mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Use Type for writable media image plugin list.
This commit is contained in:
Submodule Aaru.CommonTypes updated: e0035dbda6...fe941cd481
@@ -145,9 +145,9 @@ public sealed class PluginsViewModel : ViewModelBase
|
||||
Author = writableFloppyImage.Author
|
||||
});
|
||||
|
||||
foreach(IBaseWritableImage baseWritableImage in GetPluginBase.Instance.WritableImages.Values)
|
||||
foreach(Type baseWritableImageType in GetPluginBase.Instance.WritableImages.Values)
|
||||
{
|
||||
if(baseWritableImage is not IWritableImage writableImage)
|
||||
if(Activator.CreateInstance(baseWritableImageType) is not IWritableImage writableImage)
|
||||
continue;
|
||||
|
||||
WritableImages.Add(new PluginModel
|
||||
|
||||
@@ -202,14 +202,17 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
|
||||
PluginBase plugins = GetPluginBase.Instance;
|
||||
|
||||
foreach(IWritableImage plugin in plugins.WritableImages.Values.
|
||||
Where(p => p.SupportedMediaTypes.Contains(inputFormat.Info.MediaType)).
|
||||
Select(baseWritableImage => baseWritableImage as IWritableImage).
|
||||
Where(plugin => plugin is not null))
|
||||
foreach(Type pluginType in plugins.WritableImages.Values)
|
||||
{
|
||||
if(Activator.CreateInstance(pluginType) is not IWritableImage plugin)
|
||||
continue;
|
||||
|
||||
if(plugin.SupportedMediaTypes.Contains(inputFormat.Info.MediaType))
|
||||
PluginsList.Add(new ImagePluginModel
|
||||
{
|
||||
Plugin = plugin
|
||||
});
|
||||
}
|
||||
|
||||
AaruMetadataFromImageVisible = inputFormat.AaruMetadata != null;
|
||||
ResumeFileFromImageVisible = inputFormat.DumpHardware?.Any() == true;
|
||||
|
||||
@@ -168,12 +168,17 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
|
||||
PluginBase plugins = GetPluginBase.Instance;
|
||||
|
||||
foreach(IWritableImage plugin in
|
||||
plugins.WritableImages.Values.Where(p => p.SupportedMediaTypes.Contains(mediaType)))
|
||||
foreach(Type pluginType in plugins.WritableImages.Values)
|
||||
{
|
||||
if(Activator.CreateInstance(pluginType) is not IWritableImage plugin)
|
||||
continue;
|
||||
|
||||
if(plugin.SupportedMediaTypes.Contains(mediaType))
|
||||
PluginsList.Add(new ImagePluginModel
|
||||
{
|
||||
Plugin = plugin
|
||||
});
|
||||
}
|
||||
|
||||
Encodings.AddRange(Encoding.GetEncodings().Select(info => new EncodingModel
|
||||
{
|
||||
|
||||
@@ -145,11 +145,16 @@ sealed class FormatsCommand : Command
|
||||
|
||||
table.AddColumn(UI.Title_Media_image_format);
|
||||
|
||||
foreach(KeyValuePair<string, IBaseWritableImage> kvp in plugins.WritableImages)
|
||||
foreach(KeyValuePair<string, Type> kvp in plugins.WritableImages)
|
||||
{
|
||||
if(Activator.CreateInstance(kvp.Value) is not IBaseWritableImage plugin)
|
||||
continue;
|
||||
|
||||
if(verbose)
|
||||
table.AddRow(kvp.Value.Id.ToString(), Markup.Escape(kvp.Value.Name));
|
||||
table.AddRow(plugin.Id.ToString(), Markup.Escape(plugin.Name));
|
||||
else
|
||||
table.AddRow(Markup.Escape(kvp.Value.Name));
|
||||
table.AddRow(Markup.Escape(plugin.Name));
|
||||
}
|
||||
|
||||
AnsiConsole.Write(table);
|
||||
|
||||
|
||||
@@ -520,19 +520,24 @@ sealed class ConvertImageCommand : Command
|
||||
|
||||
// Try extension
|
||||
if(string.IsNullOrEmpty(format))
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t =>
|
||||
t.KnownExtensions.
|
||||
Contains(Path.GetExtension(outputPath))));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null
|
||||
where plugin.KnownExtensions.Contains(Path.GetExtension(outputPath)) select plugin);
|
||||
|
||||
// Try Id
|
||||
else if(Guid.TryParse(format, out Guid outId))
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t => t.Id.Equals(outId)));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null where plugin.Id.Equals(outId) select plugin);
|
||||
|
||||
// Try name
|
||||
else
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t => string.Equals(t.Name, format,
|
||||
StringComparison.
|
||||
InvariantCultureIgnoreCase)));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null
|
||||
where plugin.Name.Equals(format, StringComparison.InvariantCultureIgnoreCase)
|
||||
select plugin);
|
||||
|
||||
switch(candidates.Count)
|
||||
{
|
||||
|
||||
@@ -88,17 +88,20 @@ sealed class ListOptionsCommand : Command
|
||||
|
||||
AaruConsole.WriteLine(UI.Read_Write_media_images_options);
|
||||
|
||||
foreach(KeyValuePair<string, IBaseWritableImage> kvp in plugins.WritableImages)
|
||||
foreach(KeyValuePair<string, Type> kvp in plugins.WritableImages)
|
||||
{
|
||||
if(Activator.CreateInstance(kvp.Value) is not IBaseWritableImage plugin)
|
||||
continue;
|
||||
|
||||
List<(string name, Type type, string description, object @default)> options =
|
||||
kvp.Value.SupportedOptions.ToList();
|
||||
plugin.SupportedOptions.ToList();
|
||||
|
||||
if(options.Count == 0)
|
||||
continue;
|
||||
|
||||
var table = new Table
|
||||
{
|
||||
Title = new TableTitle(string.Format(UI.Options_for_0, kvp.Value.Name))
|
||||
Title = new TableTitle(string.Format(UI.Options_for_0, plugin.Name))
|
||||
};
|
||||
|
||||
table.AddColumn(UI.Title_Name);
|
||||
|
||||
@@ -370,17 +370,24 @@ sealed class DumpMediaCommand : Command
|
||||
|
||||
// Try extension
|
||||
if(string.IsNullOrEmpty(format))
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t => t.KnownExtensions.Contains(extension)));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null where plugin.KnownExtensions.Contains(extension)
|
||||
select plugin);
|
||||
|
||||
// Try Id
|
||||
else if(Guid.TryParse(format, out Guid outId))
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t => t.Id.Equals(outId)));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null where plugin.Id.Equals(outId) select plugin);
|
||||
|
||||
// Try name
|
||||
else
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t => string.Equals(t.Name, format,
|
||||
StringComparison.
|
||||
InvariantCultureIgnoreCase)));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null
|
||||
where plugin.Name.Equals(format, StringComparison.InvariantCultureIgnoreCase)
|
||||
select plugin);
|
||||
|
||||
switch(candidates.Count)
|
||||
{
|
||||
@@ -607,19 +614,24 @@ sealed class DumpMediaCommand : Command
|
||||
|
||||
// Try extension
|
||||
if(string.IsNullOrEmpty(format))
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t =>
|
||||
t.KnownExtensions.
|
||||
Contains(Path.GetExtension(outputPath))));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null
|
||||
where plugin.KnownExtensions.Contains(Path.GetExtension(outputPath)) select plugin);
|
||||
|
||||
// Try Id
|
||||
else if(Guid.TryParse(format, out Guid outId))
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t => t.Id.Equals(outId)));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null where plugin.Id.Equals(outId) select plugin);
|
||||
|
||||
// Try name
|
||||
else
|
||||
candidates.AddRange(plugins.WritableImages.Values.Where(t => string.Equals(t.Name, format,
|
||||
StringComparison.
|
||||
InvariantCultureIgnoreCase)));
|
||||
candidates.AddRange(from pluginType in plugins.WritableImages.Values
|
||||
select Activator.CreateInstance(pluginType) as IBaseWritableImage into plugin
|
||||
where plugin is not null
|
||||
where plugin.Name.Equals(format, StringComparison.InvariantCultureIgnoreCase)
|
||||
select plugin);
|
||||
|
||||
IBaseWritableImage outputFormat = candidates[0];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user