🎨Separate read-only filesystems from identify-only filesystem interfaces.

This commit is contained in:
2017-12-26 07:23:09 +00:00
parent 3bbb645556
commit 6aee3c9cb1
74 changed files with 206 additions and 3407 deletions

View File

@@ -134,7 +134,7 @@ namespace DiscImageChef.Commands
Core.Partitions.AddSchemesToStats(partitions);
List<string> idPlugins;
IFilesystem plugin;
IReadOnlyFilesystem plugin;
Errno error;
if(partitions.Count == 0) DicConsole.DebugWriteLine("Extract-Files command", "No partitions found");
else
@@ -155,10 +155,10 @@ namespace DiscImageChef.Commands
DicConsole.WriteLine($"Identified by {idPlugins.Count} plugins");
foreach(string pluginName in idPlugins)
if(plugins.PluginsList.TryGetValue(pluginName, out plugin))
if(plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out plugin))
{
DicConsole.WriteLine($"As identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
error = fs.Mount(imageFormat, partitions[i], encoding, options.Debug);
@@ -307,9 +307,9 @@ namespace DiscImageChef.Commands
}
else
{
plugins.PluginsList.TryGetValue(idPlugins[0], out plugin);
plugins.ReadOnlyFilesystems.TryGetValue(idPlugins[0], out plugin);
DicConsole.WriteLine($"Identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
error = fs.Mount(imageFormat, partitions[i], encoding, options.Debug);
if(error == Errno.NoError)
@@ -462,10 +462,10 @@ namespace DiscImageChef.Commands
DicConsole.WriteLine($"Identified by {idPlugins.Count} plugins");
foreach(string pluginName in idPlugins)
if(plugins.PluginsList.TryGetValue(pluginName, out plugin))
if(plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out plugin))
{
DicConsole.WriteLine($"As identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
error = fs.Mount(imageFormat, wholePart, encoding, options.Debug);
if(error == Errno.NoError)
@@ -604,9 +604,9 @@ namespace DiscImageChef.Commands
}
else
{
plugins.PluginsList.TryGetValue(idPlugins[0], out plugin);
plugins.ReadOnlyFilesystems.TryGetValue(idPlugins[0], out plugin);
DicConsole.WriteLine($"Identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
error = fs.Mount(imageFormat, wholePart, encoding, options.Debug);
if(error == Errno.NoError)

View File

@@ -31,6 +31,7 @@
// ****************************************************************************/
using System.Collections.Generic;
using System.Linq;
using DiscImageChef.Console;
using DiscImageChef.Core;
using DiscImageChef.DiscImages;
@@ -47,14 +48,14 @@ namespace DiscImageChef.Commands
PluginBase plugins = new PluginBase();
FiltersList filtersList = new FiltersList();
DicConsole.WriteLine("Supported filters:");
DicConsole.WriteLine("Supported filters ({0}):", filtersList.Filters.Count);
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("GUID\t\t\t\t\tFilter");
foreach(KeyValuePair<string, IFilter> kvp in filtersList.Filters)
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("{0}\t{1}", kvp.Value.Id, kvp.Value.Name);
else DicConsole.WriteLine(kvp.Value.Name);
DicConsole.WriteLine();
DicConsole.WriteLine("Supported disc image formats:");
DicConsole.WriteLine("Supported disc image formats ({0}):", plugins.ImagePluginsList.Count);
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("GUID\t\t\t\t\tPlugin");
foreach(KeyValuePair<string, IMediaImage> kvp in plugins.ImagePluginsList)
if(formatsOptions.Verbose)
@@ -62,15 +63,23 @@ namespace DiscImageChef.Commands
else DicConsole.WriteLine(kvp.Value.Name);
DicConsole.WriteLine();
DicConsole.WriteLine("Supported filesystems:");
DicConsole.WriteLine("Supported filesystems for identification and information only ({0}):", plugins.PluginsList.Count(t => !t.Value.GetType().GetInterfaces().Contains(typeof(IReadOnlyFilesystem))));
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("GUID\t\t\t\t\tPlugin");
foreach(KeyValuePair<string, IFilesystem> kvp in plugins.PluginsList)
foreach(KeyValuePair<string, IFilesystem> kvp in plugins.PluginsList.Where(t => !t.Value.GetType().GetInterfaces().Contains(typeof(IReadOnlyFilesystem))))
if(formatsOptions.Verbose)
DicConsole.VerboseWriteLine("{0}\t{1}", kvp.Value.Id, kvp.Value.Name);
else DicConsole.WriteLine(kvp.Value.Name);
DicConsole.WriteLine();
DicConsole.WriteLine("Supported partitioning schemes:");
DicConsole.WriteLine("Supported filesystems that can read their contents ({0}):", plugins.ReadOnlyFilesystems.Count);
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("GUID\t\t\t\t\tPlugin");
foreach(KeyValuePair<string, IReadOnlyFilesystem> kvp in plugins.ReadOnlyFilesystems)
if(formatsOptions.Verbose)
DicConsole.VerboseWriteLine("{0}\t{1}", kvp.Value.Id, kvp.Value.Name);
else DicConsole.WriteLine(kvp.Value.Name);
DicConsole.WriteLine();
DicConsole.WriteLine("Supported partitioning schemes ({0}):", plugins.PartPluginsList.Count);
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("GUID\t\t\t\t\tPlugin");
foreach(KeyValuePair<string, IPartition> kvp in plugins.PartPluginsList)
if(formatsOptions.Verbose)

View File

@@ -121,7 +121,7 @@ namespace DiscImageChef.Commands
Core.Partitions.AddSchemesToStats(partitions);
List<string> idPlugins;
IFilesystem plugin;
IReadOnlyFilesystem plugin;
Errno error;
if(partitions.Count == 0) DicConsole.DebugWriteLine("Ls command", "No partitions found");
else
@@ -142,10 +142,10 @@ namespace DiscImageChef.Commands
DicConsole.WriteLine($"Identified by {idPlugins.Count} plugins");
foreach(string pluginName in idPlugins)
if(plugins.PluginsList.TryGetValue(pluginName, out plugin))
if(plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out plugin))
{
DicConsole.WriteLine($"As identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
if(fs == null) continue;
@@ -170,11 +170,11 @@ namespace DiscImageChef.Commands
}
else
{
plugins.PluginsList.TryGetValue(idPlugins[0], out plugin);
plugins.ReadOnlyFilesystems.TryGetValue(idPlugins[0], out plugin);
if(plugin == null) continue;
DicConsole.WriteLine($"Identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
if(fs == null) continue;
@@ -209,10 +209,10 @@ namespace DiscImageChef.Commands
DicConsole.WriteLine($"Identified by {idPlugins.Count} plugins");
foreach(string pluginName in idPlugins)
if(plugins.PluginsList.TryGetValue(pluginName, out plugin))
if(plugins.ReadOnlyFilesystems.TryGetValue(pluginName, out plugin))
{
DicConsole.WriteLine($"As identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
if(fs == null) continue;
@@ -233,11 +233,11 @@ namespace DiscImageChef.Commands
}
else
{
plugins.PluginsList.TryGetValue(idPlugins[0], out plugin);
plugins.ReadOnlyFilesystems.TryGetValue(idPlugins[0], out plugin);
if(plugin != null)
{
DicConsole.WriteLine($"Identified by {plugin.Name}.");
IFilesystem fs = (IFilesystem)plugin
IReadOnlyFilesystem fs = (IReadOnlyFilesystem)plugin
.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
if(fs != null)
{