diff --git a/Aaru.CommonTypes b/Aaru.CommonTypes index 1e0ba4d3a..679d36b35 160000 --- a/Aaru.CommonTypes +++ b/Aaru.CommonTypes @@ -1 +1 @@ -Subproject commit 1e0ba4d3ac8f75e38fa8715286ff4b79be809dcc +Subproject commit 679d36b3530bb90fca04c3858b57aaf83d569b85 diff --git a/Aaru.Core/Partitions.cs b/Aaru.Core/Partitions.cs index 42b49dcfe..9380e5ee8 100644 --- a/Aaru.Core/Partitions.cs +++ b/Aaru.Core/Partitions.cs @@ -30,6 +30,7 @@ // Copyright © 2011-2023 Natalia Portillo // ****************************************************************************/ +using System; using System.Collections.Generic; using System.Linq; using Aaru.CommonTypes; @@ -59,14 +60,19 @@ public static class Partitions if(tapeImage?.Files != null) foreach(TapeFile tapeFile in tapeImage.Files) { - foreach(IPartition partitionPlugin in plugins.PartPluginsList.Values) - if(partitionPlugin.GetInformation(image, out List partitions, tapeFile.FirstBlock)) - { - foundPartitions.AddRange(partitions); + foreach(Type pluginType in plugins.Partitions.Values) + { + if(Activator.CreateInstance(pluginType) is not IPartition part) + continue; - AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_1, partitionPlugin.Name, - tapeFile.FirstBlock); - } + if(!part.GetInformation(image, out List partitions, tapeFile.FirstBlock)) + continue; + + foundPartitions.AddRange(partitions); + + AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_1, part.Name, + tapeFile.FirstBlock); + } checkedLocations.Add(tapeFile.FirstBlock); } @@ -75,14 +81,19 @@ public static class Partitions if(partitionableImage?.Partitions != null) foreach(Partition imagePartition in partitionableImage.Partitions) { - foreach(IPartition partitionPlugin in plugins.PartPluginsList.Values) - if(partitionPlugin.GetInformation(image, out List partitions, imagePartition.Start)) - { - foundPartitions.AddRange(partitions); + foreach(Type pluginType in plugins.Partitions.Values) + { + if(Activator.CreateInstance(pluginType) is not IPartition part) + continue; - AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_1, partitionPlugin.Name, - imagePartition.Start); - } + if(!part.GetInformation(image, out List partitions, imagePartition.Start)) + continue; + + foundPartitions.AddRange(partitions); + + AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_1, part.Name, + imagePartition.Start); + } checkedLocations.Add(imagePartition.Start); } @@ -90,12 +101,17 @@ public static class Partitions // Getting all partitions at start of device if(!checkedLocations.Contains(0)) { - foreach(IPartition partitionPlugin in plugins.PartPluginsList.Values) - if(partitionPlugin.GetInformation(image, out List partitions, 0)) - { - foundPartitions.AddRange(partitions); - AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_zero, partitionPlugin.Name); - } + foreach(Type pluginType in plugins.Partitions.Values) + { + if(Activator.CreateInstance(pluginType) is not IPartition part) + continue; + + if(!part.GetInformation(image, out List partitions, 0)) + continue; + + foundPartitions.AddRange(partitions); + AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_zero, part.Name); + } checkedLocations.Add(0); } @@ -112,15 +128,18 @@ public static class Partitions List children = new(); - foreach(IPartition partitionPlugin in plugins.PartPluginsList.Values) + foreach(Type pluginType in plugins.Partitions.Values) { - AaruConsole.DebugWriteLine("Partitions", Localization.Core.Trying_0_at_1, partitionPlugin.Name, - foundPartitions[0].Start); - - if(!partitionPlugin.GetInformation(image, out List partitions, foundPartitions[0].Start)) + if(Activator.CreateInstance(pluginType) is not IPartition part) continue; - AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_1, partitionPlugin.Name, + AaruConsole.DebugWriteLine("Partitions", Localization.Core.Trying_0_at_1, part.Name, + foundPartitions[0].Start); + + if(!part.GetInformation(image, out List partitions, foundPartitions[0].Start)) + continue; + + AaruConsole.DebugWriteLine("Partitions", Localization.Core.Found_0_at_1, part.Name, foundPartitions[0].Start); children.AddRange(partitions); diff --git a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs index 9f0b085db..4ffc09559 100644 --- a/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs +++ b/Aaru.Gui/ViewModels/Dialogs/PluginsViewModel.cs @@ -30,6 +30,7 @@ // Copyright © 2011-2023 Natalia Portillo // ****************************************************************************/ +using System; using System.Collections.ObjectModel; using System.Reactive; using System.Reflection; @@ -88,32 +89,47 @@ public sealed class PluginsViewModel : ViewModelBase Author = mediaImage.Author }); - foreach(IPartition partition in GetPluginBase.Instance.PartPluginsList.Values) + foreach(Type partitionType in GetPluginBase.Instance.Partitions.Values) + { + if(Activator.CreateInstance(partitionType) is not IPartition partition) + continue; + PartitionSchemes.Add(new PluginModel { Name = partition.Name, Uuid = partition.Id, - Version = Assembly.GetAssembly(partition.GetType())?.GetName().Version?.ToString(), + Version = Assembly.GetAssembly(partitionType)?.GetName().Version?.ToString(), Author = partition.Author }); + } + + foreach(Type filesystem in GetPluginBase.Instance.Filesystems.Values) + { + if(Activator.CreateInstance(filesystem) is not IFilesystem fs) + continue; - foreach(IFilesystem filesystem in GetPluginBase.Instance.Filesystems.Values) Filesystems.Add(new PluginModel { - Name = filesystem.Name, - Uuid = filesystem.Id, - Version = Assembly.GetAssembly(filesystem.GetType())?.GetName().Version?.ToString(), - Author = filesystem.Author + Name = fs.Name, + Uuid = fs.Id, + Version = Assembly.GetAssembly(filesystem)?.GetName().Version?.ToString(), + Author = fs.Author }); + } + + foreach(Type readOnlyFilesystem in GetPluginBase.Instance.ReadOnlyFilesystems.Values) + { + if(Activator.CreateInstance(readOnlyFilesystem) is not IReadOnlyFilesystem fs) + continue; - foreach(IReadOnlyFilesystem readOnlyFilesystem in GetPluginBase.Instance.ReadOnlyFilesystems.Values) ReadOnlyFilesystems.Add(new PluginModel { - Name = readOnlyFilesystem.Name, - Uuid = readOnlyFilesystem.Id, - Version = Assembly.GetAssembly(readOnlyFilesystem.GetType())?.GetName().Version?.ToString(), - Author = readOnlyFilesystem.Author + Name = fs.Name, + Uuid = fs.Id, + Version = Assembly.GetAssembly(readOnlyFilesystem)?.GetName().Version?.ToString(), + Author = fs.Author }); + } foreach(IWritableFloppyImage writableFloppyImage in GetPluginBase.Instance.WritableFloppyImages.Values) WritableFloppyImages.Add(new PluginModel diff --git a/Aaru/Commands/Formats.cs b/Aaru/Commands/Formats.cs index 65f9d895b..382d15142 100644 --- a/Aaru/Commands/Formats.cs +++ b/Aaru/Commands/Formats.cs @@ -209,7 +209,7 @@ sealed class FormatsCommand : Command table = new Table { - Title = new TableTitle(string.Format(UI.Supported_partitioning_schemes_0, plugins.PartPluginsList.Count)) + Title = new TableTitle(string.Format(UI.Supported_partitioning_schemes_0, plugins.Partitions.Count)) }; if(verbose) @@ -217,11 +217,16 @@ sealed class FormatsCommand : Command table.AddColumn(UI.Title_Scheme); - foreach(KeyValuePair kvp in plugins.PartPluginsList) + foreach(KeyValuePair kvp in plugins.Partitions) + { + if(Activator.CreateInstance(kvp.Value) is not IPartition part) + continue; + if(verbose) - table.AddRow(kvp.Value.Id.ToString(), Markup.Escape(kvp.Value.Name)); + table.AddRow(part.Id.ToString(), Markup.Escape(part.Name)); else - table.AddRow(Markup.Escape(kvp.Value.Name)); + table.AddRow(Markup.Escape(part.Name)); + } AnsiConsole.Write(table);