Add CanInvoke
method to IResourceAction
.
This commit is contained in:
@@ -45,17 +45,21 @@ namespace Cryville.Crtr.Browsing.Actions {
|
||||
Unregister(typeof(T), action);
|
||||
}
|
||||
|
||||
public IEnumerable<IResourceAction> GetActions(Type type) {
|
||||
public IEnumerable<IResourceAction> GetActions(Uri uri, IResourceMeta res) {
|
||||
return GetActions(uri, res, res.GetType());
|
||||
}
|
||||
IEnumerable<IResourceAction> GetActions(Uri uri, IResourceMeta res, Type type) {
|
||||
if (type == null) return Enumerable.Empty<IResourceAction>();
|
||||
List<IResourceAction> actions;
|
||||
if (!_actions.TryGetValue(type, out actions)) {
|
||||
actions = new List<IResourceAction>();
|
||||
}
|
||||
IEnumerable<IResourceAction> result = actions;
|
||||
IEnumerable<IResourceAction> result;
|
||||
if (_actions.TryGetValue(type, out actions))
|
||||
result = actions.Where(i => i.CanInvoke(uri, res));
|
||||
else
|
||||
result = Enumerable.Empty<IResourceAction>();
|
||||
if (type != typeof(object))
|
||||
result = result
|
||||
.Concat(GetActions(type.BaseType))
|
||||
.Concat(type.GetInterfaces().SelectMany(i => GetActions(i)));
|
||||
.Concat(GetActions(uri, res, type.BaseType))
|
||||
.Concat(type.GetInterfaces().SelectMany(i => GetActions(uri, res, i)));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user