[Plugin system] Move partitions to dependency injection.

This commit is contained in:
2023-10-05 16:11:12 +01:00
parent 24d1702838
commit e00af2a93f
3 changed files with 25 additions and 28 deletions

View File

@@ -30,7 +30,6 @@
// Copyright © 2011-2023 Natalia Portillo // Copyright © 2011-2023 Natalia Portillo
// ****************************************************************************/ // ****************************************************************************/
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Aaru.CommonTypes; using Aaru.CommonTypes;
@@ -63,17 +62,17 @@ public static class Partitions
{ {
foreach(TapeFile tapeFile in tapeImage.Files) foreach(TapeFile tapeFile in tapeImage.Files)
{ {
foreach(Type pluginType in plugins.Partitions.Values) foreach(IPartition plugin in plugins.Partitions.Values)
{ {
if(Activator.CreateInstance(pluginType) is not IPartition part) if(plugin is null)
continue; continue;
if(!part.GetInformation(image, out List<Partition> partitions, tapeFile.FirstBlock)) if(!plugin.GetInformation(image, out List<Partition> partitions, tapeFile.FirstBlock))
continue; continue;
foundPartitions.AddRange(partitions); foundPartitions.AddRange(partitions);
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_1, part.Name, AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_1, plugin.Name,
tapeFile.FirstBlock); tapeFile.FirstBlock);
} }
@@ -86,17 +85,17 @@ public static class Partitions
{ {
foreach(Partition imagePartition in partitionableImage.Partitions) foreach(Partition imagePartition in partitionableImage.Partitions)
{ {
foreach(Type pluginType in plugins.Partitions.Values) foreach(IPartition plugin in plugins.Partitions.Values)
{ {
if(Activator.CreateInstance(pluginType) is not IPartition part) if(plugin is null)
continue; continue;
if(!part.GetInformation(image, out List<Partition> partitions, imagePartition.Start)) if(!plugin.GetInformation(image, out List<Partition> partitions, imagePartition.Start))
continue; continue;
foundPartitions.AddRange(partitions); foundPartitions.AddRange(partitions);
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_1, part.Name, AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_1, plugin.Name,
imagePartition.Start); imagePartition.Start);
} }
@@ -107,16 +106,16 @@ public static class Partitions
// Getting all partitions at start of device // Getting all partitions at start of device
if(!checkedLocations.Contains(0)) if(!checkedLocations.Contains(0))
{ {
foreach(Type pluginType in plugins.Partitions.Values) foreach(IPartition plugin in plugins.Partitions.Values)
{ {
if(Activator.CreateInstance(pluginType) is not IPartition part) if(plugin is null)
continue; continue;
if(!part.GetInformation(image, out List<Partition> partitions, 0)) if(!plugin.GetInformation(image, out List<Partition> partitions, 0))
continue; continue;
foundPartitions.AddRange(partitions); foundPartitions.AddRange(partitions);
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_zero, part.Name); AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_zero, plugin.Name);
} }
checkedLocations.Add(0); checkedLocations.Add(0);
@@ -134,18 +133,18 @@ public static class Partitions
List<Partition> children = new(); List<Partition> children = new();
foreach(Type pluginType in plugins.Partitions.Values) foreach(IPartition plugin in plugins.Partitions.Values)
{ {
if(Activator.CreateInstance(pluginType) is not IPartition part) if(plugin is null)
continue; continue;
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Trying_0_at_1, part.Name, AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Trying_0_at_1, plugin.Name,
foundPartitions[0].Start); foundPartitions[0].Start);
if(!part.GetInformation(image, out List<Partition> partitions, foundPartitions[0].Start)) if(!plugin.GetInformation(image, out List<Partition> partitions, foundPartitions[0].Start))
continue; continue;
AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_1, part.Name, AaruConsole.DebugWriteLine(MODULE_NAME, Localization.Core.Found_0_at_1, plugin.Name,
foundPartitions[0].Start); foundPartitions[0].Start);
children.AddRange(partitions); children.AddRange(partitions);

View File

@@ -195,16 +195,14 @@ public class PluginRegisterGenerator : ISourceGenerator
if(partitionPlugins?.Count > 0) if(partitionPlugins?.Count > 0)
{ {
sb.AppendLine(" public List<Type> GetAllPartitionPlugins() => new()"); sb.AppendLine(" public void RegisterPartitionPlugins(IServiceCollection services)");
sb.AppendLine(" {"); sb.AppendLine(" {");
foreach(string plugin in partitionPlugins) foreach(string plugin in partitionPlugins)
sb.AppendLine($" typeof({plugin}),"); sb.AppendLine($" services.AddTransient<IPartition, {plugin}>();");
sb.AppendLine(" }");
sb.AppendLine(" };");
} }
else else
sb.AppendLine(" public List<Type> GetAllPartitionPlugins() => null;"); sb.AppendLine(" public void RegisterPartitionPlugins(IServiceCollection services) {}");
sb.AppendLine(); sb.AppendLine();

View File

@@ -231,15 +231,15 @@ sealed class FormatsCommand : Command
table.AddColumn(UI.Title_Scheme); table.AddColumn(UI.Title_Scheme);
foreach(KeyValuePair<string, Type> kvp in plugins.Partitions) foreach(IPartition plugin in plugins.Partitions.Values)
{ {
if(Activator.CreateInstance(kvp.Value) is not IPartition part) if(plugin is null)
continue; continue;
if(verbose) if(verbose)
table.AddRow(part.Id.ToString(), Markup.Escape(part.Name)); table.AddRow(plugin.Id.ToString(), Markup.Escape(plugin.Name));
else else
table.AddRow(Markup.Escape(part.Name)); table.AddRow(Markup.Escape(plugin.Name));
} }
AnsiConsole.Write(table); AnsiConsole.Write(table);