diff --git a/Aaru.CommonTypes b/Aaru.CommonTypes index a5cdad33c..33da34f01 160000 --- a/Aaru.CommonTypes +++ b/Aaru.CommonTypes @@ -1 +1 @@ -Subproject commit a5cdad33c13a82b0a7113989d0f09cc0e4c9cd4e +Subproject commit 33da34f017ccb082c5ab639267d9c7b0b5b67009 diff --git a/Aaru.Generators/PluginRegisterGenerator.cs b/Aaru.Generators/PluginRegisterGenerator.cs index 1e1218193..f7eafac17 100644 --- a/Aaru.Generators/PluginRegisterGenerator.cs +++ b/Aaru.Generators/PluginRegisterGenerator.cs @@ -232,16 +232,16 @@ public class PluginRegisterGenerator : ISourceGenerator if(writableImagePlugins?.Count > 0) { - sb.AppendLine(" public List GetAllWritableImagePlugins() => new()"); + sb.AppendLine(" public void RegisterWritableImagePlugins(IServiceCollection services)"); sb.AppendLine(" {"); foreach(string plugin in writableImagePlugins) - sb.AppendLine($" typeof({plugin}),"); + sb.AppendLine($" services.AddTransient();"); - sb.AppendLine(" };"); + sb.AppendLine(" }"); } else - sb.AppendLine(" public List GetAllWritableImagePlugins() => null;"); + sb.AppendLine(" public void RegisterWritableImagePlugins(IServiceCollection services) {}"); sb.AppendLine(); diff --git a/Aaru.Gui/Models/ImagePluginModel.cs b/Aaru.Gui/Models/ImagePluginModel.cs index a46c50d9d..1603dd0f1 100644 --- a/Aaru.Gui/Models/ImagePluginModel.cs +++ b/Aaru.Gui/Models/ImagePluginModel.cs @@ -36,6 +36,6 @@ namespace Aaru.Gui.Models; public sealed class ImagePluginModel { - public string Name => Plugin.Name; - public IWritableImage Plugin { get; set; } + public string Name => Plugin.Name; + public IBaseWritableImage Plugin { get; set; } } \ No newline at end of file diff --git a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs index f6396ef0c..54976e45e 100644 --- a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs +++ b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs @@ -30,7 +30,6 @@ // Copyright © 2011-2023 Natalia Portillo // ****************************************************************************/ -using System; using System.Collections.ObjectModel; using System.Reactive; using System.Reflection; @@ -160,16 +159,16 @@ public sealed class PluginsViewModel : ViewModelBase }); } - foreach(Type baseWritableImageType in PluginRegister.Singleton.WritableImages.Values) + foreach(IWritableImage writableImage in PluginRegister.Singleton.WritableImages.Values) { - if(Activator.CreateInstance(baseWritableImageType) is not IWritableImage writableImage) + if(writableImage is null) continue; WritableImages.Add(new PluginModel { Name = writableImage.Name, Uuid = writableImage.Id, - Version = Assembly.GetAssembly(baseWritableImageType)?.GetName().Version?.ToString(), + Version = Assembly.GetAssembly(writableImage.GetType())?.GetName().Version?.ToString(), Author = writableImage.Author }); } diff --git a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs index 683a434cd..7b1148dcc 100644 --- a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs @@ -175,9 +175,9 @@ public sealed class ImageConvertViewModel : ViewModelBase PluginRegister plugins = PluginRegister.Singleton; - foreach(Type pluginType in plugins.WritableImages.Values) + foreach(IBaseWritableImage plugin in plugins.WritableImages.Values) { - if(Activator.CreateInstance(pluginType) is not IWritableImage plugin) + if(plugin is null) continue; if(plugin.SupportedMediaTypes.Contains(inputFormat.Info.MediaType)) diff --git a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs index 56258fc69..2d5846fb7 100644 --- a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs @@ -170,9 +170,9 @@ public sealed class MediaDumpViewModel : ViewModelBase PluginRegister plugins = PluginRegister.Singleton; - foreach(Type pluginType in plugins.WritableImages.Values) + foreach(IWritableImage plugin in plugins.WritableImages.Values) { - if(Activator.CreateInstance(pluginType) is not IWritableImage plugin) + if(plugin is null) continue; if(plugin.SupportedMediaTypes.Contains(mediaType)) diff --git a/Aaru/Commands/Formats.cs b/Aaru/Commands/Formats.cs index b41ad9ef4..44aeaf0d2 100644 --- a/Aaru/Commands/Formats.cs +++ b/Aaru/Commands/Formats.cs @@ -31,7 +31,6 @@ // ****************************************************************************/ using System; -using System.Collections.Generic; using System.CommandLine; using System.CommandLine.NamingConventionBinder; using System.Linq; @@ -115,9 +114,8 @@ sealed class FormatsCommand : Command table = new Table { Title = new TableTitle(string.Format(UI.Read_only_media_image_formats_0, - plugins.MediaImages.Count(t => !t.Value.GetType(). - GetInterfaces(). - Contains(typeof(IWritableImage))))) + plugins.MediaImages.Count(t => !plugins.WritableImages. + ContainsKey(t.Key)))) }; if(verbose) @@ -125,11 +123,8 @@ sealed class FormatsCommand : Command table.AddColumn(UI.Title_Media_image_format); - foreach(IMediaImage imagePlugin in plugins.MediaImages.Values. - Where(t => !t.GetType(). - GetInterfaces(). - Contains(typeof(IWritableImage))). - Where(t => t is not null)) + foreach(IMediaImage imagePlugin in + plugins.MediaImages.Values.Where(t => !plugins.WritableImages.ContainsKey(t.Name))) { if(verbose) table.AddRow(imagePlugin.Id.ToString(), Markup.Escape(imagePlugin.Name)); @@ -151,9 +146,9 @@ sealed class FormatsCommand : Command table.AddColumn(UI.Title_Media_image_format); - foreach(KeyValuePair kvp in plugins.WritableImages) + foreach(IBaseWritableImage plugin in plugins.WritableImages.Values) { - if(Activator.CreateInstance(kvp.Value) is not IBaseWritableImage plugin) + if(plugin is null) continue; if(verbose) diff --git a/Aaru/Commands/Image/Convert.cs b/Aaru/Commands/Image/Convert.cs index fd1c6da2b..bc05065fd 100644 --- a/Aaru/Commands/Image/Convert.cs +++ b/Aaru/Commands/Image/Convert.cs @@ -536,9 +536,7 @@ sealed class ConvertImageCommand : Command // Try extension if(string.IsNullOrEmpty(format)) { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.KnownExtensions.Contains(Path.GetExtension(outputPath)) select plugin); @@ -547,9 +545,7 @@ sealed class ConvertImageCommand : Command // Try Id else if(Guid.TryParse(format, out Guid outId)) { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.Id.Equals(outId) select plugin); @@ -558,9 +554,7 @@ sealed class ConvertImageCommand : Command // Try name else { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.Name.Equals(format, StringComparison.InvariantCultureIgnoreCase) select plugin); diff --git a/Aaru/Commands/Image/Options.cs b/Aaru/Commands/Image/Options.cs index 6901a737c..549f1c4ea 100644 --- a/Aaru/Commands/Image/Options.cs +++ b/Aaru/Commands/Image/Options.cs @@ -31,7 +31,6 @@ // ****************************************************************************/ using System; -using System.Collections.Generic; using System.CommandLine; using System.CommandLine.NamingConventionBinder; using System.Linq; @@ -92,9 +91,9 @@ sealed class ListOptionsCommand : Command AaruConsole.WriteLine(UI.Read_Write_media_images_options); - foreach(KeyValuePair kvp in plugins.WritableImages) + foreach(IBaseWritableImage plugin in plugins.WritableImages.Values) { - if(Activator.CreateInstance(kvp.Value) is not IBaseWritableImage plugin) + if(plugin is null) continue; var options = plugin.SupportedOptions.ToList(); diff --git a/Aaru/Commands/Media/Dump.cs b/Aaru/Commands/Media/Dump.cs index dafd85805..9648e74ee 100644 --- a/Aaru/Commands/Media/Dump.cs +++ b/Aaru/Commands/Media/Dump.cs @@ -377,9 +377,7 @@ sealed class DumpMediaCommand : Command // Try extension if(string.IsNullOrEmpty(format)) { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.KnownExtensions.Contains(extension) select plugin); @@ -388,9 +386,7 @@ sealed class DumpMediaCommand : Command // Try Id else if(Guid.TryParse(format, out Guid outId)) { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.Id.Equals(outId) select plugin); @@ -399,9 +395,7 @@ sealed class DumpMediaCommand : Command // Try name else { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.Name.Equals(format, StringComparison.InvariantCultureIgnoreCase) select plugin); @@ -645,9 +639,7 @@ sealed class DumpMediaCommand : Command // Try extension if(string.IsNullOrEmpty(format)) { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.KnownExtensions.Contains(Path.GetExtension(outputPath)) select plugin); @@ -656,9 +648,7 @@ sealed class DumpMediaCommand : Command // Try Id else if(Guid.TryParse(format, out Guid outId)) { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.Id.Equals(outId) select plugin); @@ -667,9 +657,7 @@ sealed class DumpMediaCommand : Command // Try name else { - candidates.AddRange(from pluginType in plugins.WritableImages.Values - select Activator.CreateInstance(pluginType) as IBaseWritableImage - into plugin + candidates.AddRange(from plugin in plugins.WritableImages.Values where plugin is not null where plugin.Name.Equals(format, StringComparison.InvariantCultureIgnoreCase) select plugin);