From 067370bc628bc113ea7df588d71c7aefeb4c2e15 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 17 Dec 2022 19:27:27 +0000 Subject: [PATCH] Use Type for media image plugin list. --- Aaru.CommonTypes | 2 +- Aaru.Core/ImageFormat.cs | 22 +++++++++++++++---- .../ViewModels/Dialogs/PluginsViewModel.cs | 9 ++++++-- Aaru/Commands/Formats.cs | 18 +++++++++------ 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/Aaru.CommonTypes b/Aaru.CommonTypes index 679d36b35..e0035dbda 160000 --- a/Aaru.CommonTypes +++ b/Aaru.CommonTypes @@ -1 +1 @@ -Subproject commit 679d36b3530bb90fca04c3858b57aaf83d569b85 +Subproject commit e0035dbda64ad8bc2b57ff355513536bfe7b6fa3 diff --git a/Aaru.Core/ImageFormat.cs b/Aaru.Core/ImageFormat.cs index a21833fca..8abdf9bc7 100644 --- a/Aaru.Core/ImageFormat.cs +++ b/Aaru.Core/ImageFormat.cs @@ -53,8 +53,14 @@ public static class ImageFormat IBaseImage imageFormat = null; // Check all but RAW plugin - foreach(IMediaImage imagePlugin in plugins.ImagePluginsList.Values.Where(imagePlugin => - imagePlugin.Id != new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))) + foreach(Type pluginType in plugins.MediaImages.Values) + { + if(Activator.CreateInstance(pluginType) is not IMediaImage imagePlugin) + continue; + + if(imagePlugin.Id == new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) + continue; + try { AaruConsole.DebugWriteLine("Format detection", Localization.Core.Trying_plugin_0, imagePlugin.Name); @@ -71,6 +77,7 @@ public static class ImageFormat { // ignored } + } if(imageFormat != null) return imageFormat; @@ -99,8 +106,14 @@ public static class ImageFormat return imageFormat; // Check only RAW plugin - foreach(IMediaImage imagePlugin in plugins.ImagePluginsList.Values.Where(imagePlugin => - imagePlugin.Id == new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))) + foreach(Type pluginType in plugins.MediaImages.Values) + { + if(Activator.CreateInstance(pluginType) is not IMediaImage imagePlugin) + continue; + + if(imagePlugin.Id != new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) + continue; + try { AaruConsole.DebugWriteLine("Format detection", Localization.Core.Trying_plugin_0, imagePlugin.Name); @@ -117,6 +130,7 @@ public static class ImageFormat { // ignored } + } // Still not recognized return imageFormat; diff --git a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs index 4ffc09559..b990378a4 100644 --- a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs +++ b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs @@ -80,14 +80,19 @@ public sealed class PluginsViewModel : ViewModelBase Author = floppyImage.Author }); - foreach(IMediaImage mediaImage in GetPluginBase.Instance.ImagePluginsList.Values) + foreach(Type imageType in GetPluginBase.Instance.MediaImages.Values) + { + if(Activator.CreateInstance(imageType) is not IMediaImage mediaImage) + continue; + Images.Add(new PluginModel { Name = mediaImage.Name, Uuid = mediaImage.Id, - Version = Assembly.GetAssembly(mediaImage.GetType())?.GetName().Version?.ToString(), + Version = Assembly.GetAssembly(imageType)?.GetName().Version?.ToString(), Author = mediaImage.Author }); + } foreach(Type partitionType in GetPluginBase.Instance.Partitions.Values) { diff --git a/Aaru/Commands/Formats.cs b/Aaru/Commands/Formats.cs index 0a67bedda..618d8d649 100644 --- a/Aaru/Commands/Formats.cs +++ b/Aaru/Commands/Formats.cs @@ -110,9 +110,8 @@ sealed class FormatsCommand : Command table = new Table { Title = new TableTitle(string.Format(UI.Read_only_media_image_formats_0, - plugins.ImagePluginsList.Count(t => !t.Value.GetType().GetInterfaces(). - Contains(typeof( - IWritableImage))))) + plugins.MediaImages.Count(t => !t.Value.GetInterfaces(). + Contains(typeof(IWritableImage))))) }; if(verbose) @@ -120,12 +119,17 @@ sealed class FormatsCommand : Command table.AddColumn(UI.Title_Media_image_format); - foreach(KeyValuePair kvp in plugins.ImagePluginsList.Where(t => !t.Value.GetType(). - GetInterfaces().Contains(typeof(IWritableImage)))) + foreach(KeyValuePair kvp in plugins.MediaImages.Where(t => !t.Value.GetInterfaces(). + Contains(typeof(IWritableImage)))) + { + if(Activator.CreateInstance(kvp.Value) is not IMediaImage imagePlugin) + continue; + if(verbose) - table.AddRow(kvp.Value.Id.ToString(), Markup.Escape(kvp.Value.Name)); + table.AddRow(imagePlugin.Id.ToString(), Markup.Escape(imagePlugin.Name)); else - table.AddRow(Markup.Escape(kvp.Value.Name)); + table.AddRow(Markup.Escape(imagePlugin.Name)); + } AnsiConsole.Write(table);