mirror of
https://github.com/aaru-dps/Aaru.git
synced 2026-07-08 18:16:24 +00:00
Add volume selection option for file extraction
This commit is contained in:
12
Aaru.Localization/UI.Designer.cs
generated
12
Aaru.Localization/UI.Designer.cs
generated
@@ -741,6 +741,18 @@ namespace Aaru.Localization {
|
||||
}
|
||||
}
|
||||
|
||||
public static string Extract_only_from_specified_volume_number {
|
||||
get {
|
||||
return ResourceManager.GetString("Extract_only_from_specified_volume_number", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
public static string Volume_number_0_not_found_only_1_volumes_found {
|
||||
get {
|
||||
return ResourceManager.GetString("Volume_number_0_not_found_only_1_volumes_found", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
public static string Namespace_to_use_for_filenames {
|
||||
get {
|
||||
return ResourceManager.GetString("Namespace_to_use_for_filenames", resourceCulture);
|
||||
|
||||
@@ -1116,6 +1116,12 @@
|
||||
</data>
|
||||
<data name="Extract_extended_attributes_if_present" xml:space="preserve">
|
||||
<value>Extraer atributos extendidos si existen.</value>
|
||||
</data>
|
||||
<data name="Extract_only_from_specified_volume_number" xml:space="preserve">
|
||||
<value>Extraer solo del número de volumen especificado (indexado desde 0). Si no se especifica, extrae de todos los volúmenes.</value>
|
||||
</data>
|
||||
<data name="Volume_number_0_not_found_only_1_volumes_found" xml:space="preserve">
|
||||
<value>[red]No se encontró el volumen número [orange3]{0}[/]. Solo se encontraron [orange3]{1}[/] volúmenes.[/]</value>
|
||||
</data>
|
||||
<data name="Filename_0_not_supported_want_to_rename_to_1" xml:space="preserve">
|
||||
<value>El nombre de fichero {0} no está soportado en esta plataforma. ¿Desea renombrarlo a {1}?</value>
|
||||
|
||||
@@ -373,6 +373,12 @@ In you are unsure, please press N to not continue.</value>
|
||||
</data>
|
||||
<data name="Extract_extended_attributes_if_present" xml:space="preserve">
|
||||
<value>Extract extended attributes if present.</value>
|
||||
</data>
|
||||
<data name="Extract_only_from_specified_volume_number" xml:space="preserve">
|
||||
<value>Extract only from the specified volume number (0-indexed). If not specified, extracts from all volumes.</value>
|
||||
</data>
|
||||
<data name="Volume_number_0_not_found_only_1_volumes_found" xml:space="preserve">
|
||||
<value>[red]Volume number [orange3]{0}[/] not found. Only [orange3]{1}[/] volumes were found.[/]</value>
|
||||
</data>
|
||||
<data name="Namespace_to_use_for_filenames" xml:space="preserve">
|
||||
<value>Namespace to use for filenames.</value>
|
||||
|
||||
@@ -69,6 +69,7 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
AaruLogging.Debug(MODULE_NAME, "--options={0}", Markup.Escape(settings.Options ?? ""));
|
||||
AaruLogging.Debug(MODULE_NAME, "--output={0}", Markup.Escape(settings.OutputDir ?? ""));
|
||||
AaruLogging.Debug(MODULE_NAME, "--verbose={0}", settings.Verbose);
|
||||
AaruLogging.Debug(MODULE_NAME, "--volume={0}", settings.Volume?.ToString() ?? "all");
|
||||
AaruLogging.Debug(MODULE_NAME, "--xattrs={0}", settings.Xattrs);
|
||||
|
||||
IFilter inputFilter = null;
|
||||
@@ -227,6 +228,8 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
|
||||
AaruLogging.WriteLine(UI._0_partitions_found, partitions.Count);
|
||||
|
||||
var volumeCounter = 0;
|
||||
|
||||
for(var i = 0; i < partitions.Count; i++)
|
||||
{
|
||||
AaruLogging.WriteLine();
|
||||
@@ -274,15 +277,19 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
|
||||
if(error == ErrorNumber.NoError)
|
||||
{
|
||||
string volumeName = string.IsNullOrEmpty(fs.Metadata.VolumeName)
|
||||
? "NO NAME"
|
||||
: fs.Metadata.VolumeName;
|
||||
if(!settings.Volume.HasValue || settings.Volume.Value == volumeCounter)
|
||||
{
|
||||
string volumeName = string.IsNullOrEmpty(fs.Metadata.VolumeName)
|
||||
? "NO NAME"
|
||||
: fs.Metadata.VolumeName;
|
||||
|
||||
volumeName = volumeName.Replace('/', '_').Replace('\\', '_');
|
||||
volumeName = volumeName.Replace('/', '_').Replace('\\', '_');
|
||||
|
||||
ExtractFilesInDir("/", fs, volumeName, settings.OutputDir, settings.Xattrs);
|
||||
ExtractFilesInDir("/", fs, volumeName, settings.OutputDir, settings.Xattrs);
|
||||
}
|
||||
|
||||
Statistics.AddFilesystem(fs.Metadata.Type);
|
||||
volumeCounter++;
|
||||
}
|
||||
else
|
||||
AaruLogging.Error(UI.Unable_to_mount_volume_error_0, error.ToString());
|
||||
@@ -309,21 +316,30 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
|
||||
if(error == ErrorNumber.NoError)
|
||||
{
|
||||
string volumeName = string.IsNullOrEmpty(fs.Metadata.VolumeName)
|
||||
? "NO NAME"
|
||||
: fs.Metadata.VolumeName;
|
||||
if(!settings.Volume.HasValue || settings.Volume.Value == volumeCounter)
|
||||
{
|
||||
string volumeName = string.IsNullOrEmpty(fs.Metadata.VolumeName)
|
||||
? "NO NAME"
|
||||
: fs.Metadata.VolumeName;
|
||||
|
||||
volumeName = volumeName.Replace('/', '_').Replace('\\', '_');
|
||||
volumeName = volumeName.Replace('/', '_').Replace('\\', '_');
|
||||
|
||||
ExtractFilesInDir("/", fs, volumeName, settings.OutputDir, settings.Xattrs);
|
||||
ExtractFilesInDir("/", fs, volumeName, settings.OutputDir, settings.Xattrs);
|
||||
}
|
||||
|
||||
Statistics.AddFilesystem(fs.Metadata.Type);
|
||||
volumeCounter++;
|
||||
}
|
||||
else
|
||||
AaruLogging.Error(UI.Unable_to_mount_volume_error_0, error.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(settings.Volume.HasValue && settings.Volume.Value >= volumeCounter)
|
||||
AaruLogging.Error(UI.Volume_number_0_not_found_only_1_volumes_found,
|
||||
settings.Volume.Value,
|
||||
volumeCounter);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
@@ -677,6 +693,10 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
[LocalizedDescription(nameof(UI.Extract_extended_attributes_if_present))]
|
||||
[DefaultValue(false)]
|
||||
public bool Xattrs { get; init; }
|
||||
[CommandOption("--volume")]
|
||||
[LocalizedDescription(nameof(UI.Extract_only_from_specified_volume_number))]
|
||||
[DefaultValue(null)]
|
||||
public int? Volume { get; init; }
|
||||
[CommandOption("-n|--namespace")]
|
||||
[LocalizedDescription(nameof(UI.Namespace_to_use_for_filenames))]
|
||||
[DefaultValue(null)]
|
||||
|
||||
Reference in New Issue
Block a user