From e1bb87494329c4ede537460a9328d17bd336c7f1 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 19 Dec 2023 18:26:42 +0800 Subject: [PATCH] Add `IResourceMeta` constraint on resource action. --- Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs | 4 ++-- Assets/Cryville/Crtr/Browsing/Actions/IResourceAction.cs | 4 ++-- Assets/Cryville/Crtr/Browsing/Actions/ImportResourceAction.cs | 2 +- Assets/Cryville/Crtr/Browsing/Actions/ResourceAction.cs | 4 ++-- Assets/Cryville/Crtr/Browsing/IChartDetail.cs | 2 +- Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs b/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs index f3cae1f..a49d977 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs @@ -28,7 +28,7 @@ namespace Cryville.Crtr.Browsing.Actions { public void Register(IResourceAction action) { Register(typeof(object), action); } - public void Register(IResourceAction action) { + public void Register(IResourceAction action) where T : IResourceMeta { Register(typeof(T), action); } @@ -41,7 +41,7 @@ namespace Cryville.Crtr.Browsing.Actions { public void Unregister(IResourceAction action) { Unregister(typeof(object), action); } - public void Unregister(IResourceAction action) { + public void Unregister(IResourceAction action) where T : IResourceMeta { Unregister(typeof(T), action); } diff --git a/Assets/Cryville/Crtr/Browsing/Actions/IResourceAction.cs b/Assets/Cryville/Crtr/Browsing/Actions/IResourceAction.cs index 0e5cede..cbc13cb 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/IResourceAction.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/IResourceAction.cs @@ -4,9 +4,9 @@ namespace Cryville.Crtr.Browsing.Actions { public interface IResourceAction { string Name { get; } int Priority { get; } - void Invoke(Uri uri, object resource); + void Invoke(Uri uri, IResourceMeta resource); } - public interface IResourceAction : IResourceAction { + public interface IResourceAction : IResourceAction where T : IResourceMeta { void Invoke(Uri uri, T resource); } } diff --git a/Assets/Cryville/Crtr/Browsing/Actions/ImportResourceAction.cs b/Assets/Cryville/Crtr/Browsing/Actions/ImportResourceAction.cs index e84f6e3..71bbd31 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/ImportResourceAction.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/ImportResourceAction.cs @@ -11,7 +11,7 @@ namespace Cryville.Crtr.Browsing.Actions { public string Name { get { return "Import"; } } public int Priority { get { return 0; } } - public void Invoke(Uri uri, object resource) { + public void Invoke(Uri uri, IResourceMeta resource) { if (_destination.ImportFrom(uri)) Popup.Create("Import succeeded"); else diff --git a/Assets/Cryville/Crtr/Browsing/Actions/ResourceAction.cs b/Assets/Cryville/Crtr/Browsing/Actions/ResourceAction.cs index 243bbce..286a791 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/ResourceAction.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/ResourceAction.cs @@ -1,11 +1,11 @@ using System; namespace Cryville.Crtr.Browsing.Actions { - public abstract class ResourceAction : IResourceAction { + public abstract class ResourceAction : IResourceAction where T : IResourceMeta { public abstract string Name { get; } public abstract int Priority { get; } public abstract void Invoke(Uri uri, T resource); - public void Invoke(Uri uri, object resource) { + public void Invoke(Uri uri, IResourceMeta resource) { if (resource == null) throw new ArgumentNullException("resource"); if (!(resource is T)) throw new ArgumentException("Mismatched resource type."); Invoke(uri, (T)resource); diff --git a/Assets/Cryville/Crtr/Browsing/IChartDetail.cs b/Assets/Cryville/Crtr/Browsing/IChartDetail.cs index efa9314..881b65d 100644 --- a/Assets/Cryville/Crtr/Browsing/IChartDetail.cs +++ b/Assets/Cryville/Crtr/Browsing/IChartDetail.cs @@ -1,7 +1,7 @@ using System; namespace Cryville.Crtr.Browsing { - internal interface IChartDetail { + internal interface IChartDetail : IResourceMeta { string RulesetId { get; } string Name { get; } string SongName { get; } diff --git a/Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs index e369880..159a1f9 100644 --- a/Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs +++ b/Assets/Cryville/Crtr/Browsing/Legacy/LegacyChartDetail.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using UnityEngine; namespace Cryville.Crtr.Browsing.Legacy { - internal class LegacyChartDetail : IChartDetail, IResourceMeta { + internal class LegacyChartDetail : IChartDetail { public AsyncDelivery Cover { get; set; } public ChartMeta Meta { get; set; }