mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[Plugin system] Move partitions to dependency injection.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user