Skip to content

Commit 394b645

Browse files
authored
Merge pull request #7 from Foxtrek64/Feature/FilterPluginAssemblies
Accept Predicate to Filter Plugins
2 parents d04be3c + fca6cbf commit 394b645

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

Remora.Plugins/Services/PluginService.cs

+9-3
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ public PluginService(IOptions<PluginServiceOptions> options)
5757
/// means that <see cref="PluginTree.Branches"/> will contain dependency-free plugins, with subsequent
5858
/// dependents below them (recursively).
5959
/// </summary>
60+
/// <param name="filter">If provided, any plugins must match the defined predicate to be added to the <see cref="PluginTree"/>.</param>
6061
/// <returns>The dependency tree.</returns>
6162
[PublicAPI, Pure]
62-
public PluginTree LoadPluginTree()
63+
public PluginTree LoadPluginTree(Predicate<IPluginDescriptor>? filter = null)
6364
{
6465
var pluginAssemblies = LoadAvailablePluginAssemblies().ToList();
6566
var pluginsWithDependencies = pluginAssemblies.ToDictionary
@@ -104,12 +105,17 @@ bool IsDirectDependency(Assembly assembly, Assembly dependency)
104105
{
105106
var current = sorted[0];
106107
var loadDescriptorResult = LoadPluginDescriptor(current);
107-
if (!loadDescriptorResult.IsSuccess)
108+
if (!loadDescriptorResult.IsDefined(out IPluginDescriptor? pluginDescriptor))
108109
{
109110
continue;
110111
}
111112

112-
var node = new PluginTreeNode(loadDescriptorResult.Entity);
113+
if (!filter?.Invoke(pluginDescriptor) ?? false)
114+
{
115+
continue;
116+
}
117+
118+
var node = new PluginTreeNode(pluginDescriptor);
113119

114120
var dependencies = pluginsWithDependencies[current].ToList();
115121
if (!dependencies.Any())

0 commit comments

Comments
 (0)