diff --git a/Interfaces/IPluginRegister.cs b/Interfaces/IPluginRegister.cs index 65ef7ab68..aa8d79935 100644 --- a/Interfaces/IPluginRegister.cs +++ b/Interfaces/IPluginRegister.cs @@ -78,5 +78,9 @@ namespace Aaru.CommonTypes.Interfaces /// Gets all writable media image plugins /// List of writable media image plugins List GetAllWritableImagePlugins(); + + /// Gets all archive plugins + /// List of archive plugins + List GetAllArchivePlugins(); } -} \ No newline at end of file +} diff --git a/PluginBase.cs b/PluginBase.cs index 1c2fc729b..c709ad2f7 100644 --- a/PluginBase.cs +++ b/PluginBase.cs @@ -64,6 +64,8 @@ namespace Aaru.CommonTypes public readonly SortedDictionary WritableFloppyImages; /// List of writable media image plugins public readonly SortedDictionary WritableImages; + /// List of all archive formats + public readonly SortedDictionary Archives; /// Initializes the plugins lists public PluginBase() @@ -77,6 +79,7 @@ namespace Aaru.CommonTypes Filters = new SortedDictionary(); FloppyImages = new SortedDictionary(); WritableFloppyImages = new SortedDictionary(); + Archives = new SortedDictionary(); } public void AddPlugins(IPluginRegister pluginRegister) @@ -133,6 +136,12 @@ namespace Aaru.CommonTypes {}) is IWritableImage plugin && !WritableImages.ContainsKey(plugin.Name.ToLower())) WritableImages.Add(plugin.Name.ToLower(), plugin); + + foreach(Type type in pluginRegister.GetAllArchivePlugins() ?? Enumerable.Empty()) + if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] + {}) is IArchive plugin && + !Archives.ContainsKey(plugin.Name.ToLower())) + Archives.Add(plugin.Name.ToLower(), plugin); } } -} \ No newline at end of file +}