diff --git a/Aaru.Core/Devices/Dumping/ATA.cs b/Aaru.Core/Devices/Dumping/ATA.cs index fd2312199..73035ec7b 100644 --- a/Aaru.Core/Devices/Dumping/ATA.cs +++ b/Aaru.Core/Devices/Dumping/ATA.cs @@ -912,7 +912,10 @@ public partial class Dump var jsonFs = new FileStream(_outputPrefix + ".metadata.json", FileMode.Create); - JsonSerializer.Serialize(jsonFs, sidecar, new JsonSerializerOptions + JsonSerializer.Serialize(jsonFs, new MetadataJson + { + AaruMetadata = sidecar + }, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true diff --git a/Aaru.Core/Devices/Dumping/Metadata.cs b/Aaru.Core/Devices/Dumping/Metadata.cs index f8acf9152..1bc8d4d55 100644 --- a/Aaru.Core/Devices/Dumping/Metadata.cs +++ b/Aaru.Core/Devices/Dumping/Metadata.cs @@ -147,7 +147,10 @@ partial class Dump var jsonFs = new FileStream(_outputPrefix + ".metadata.json", FileMode.Create); - JsonSerializer.Serialize(jsonFs, sidecar, new JsonSerializerOptions + JsonSerializer.Serialize(jsonFs, new MetadataJson + { + AaruMetadata = sidecar + }, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true diff --git a/Aaru.Core/Devices/Dumping/MiniDisc.cs b/Aaru.Core/Devices/Dumping/MiniDisc.cs index 907c30af2..4c6ab150a 100644 --- a/Aaru.Core/Devices/Dumping/MiniDisc.cs +++ b/Aaru.Core/Devices/Dumping/MiniDisc.cs @@ -876,7 +876,10 @@ partial class Dump var jsonFs = new FileStream(_outputPrefix + ".metadata.json", FileMode.Create); - JsonSerializer.Serialize(jsonFs, sidecar, new JsonSerializerOptions + JsonSerializer.Serialize(jsonFs, new MetadataJson + { + AaruMetadata = sidecar + }, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true diff --git a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs index 0b1ac6b44..ec8b320b7 100644 --- a/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs +++ b/Aaru.Core/Devices/Dumping/PlayStationPortable/MemoryStick.cs @@ -718,7 +718,10 @@ public partial class Dump var jsonFs = new FileStream(_outputPrefix + ".metadata.json", FileMode.Create); - JsonSerializer.Serialize(jsonFs, sidecar, new JsonSerializerOptions + JsonSerializer.Serialize(jsonFs, new MetadataJson + { + AaruMetadata = sidecar + }, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true diff --git a/Aaru.Core/Devices/Dumping/SSC.cs b/Aaru.Core/Devices/Dumping/SSC.cs index 1e34106bf..f2218d5c5 100644 --- a/Aaru.Core/Devices/Dumping/SSC.cs +++ b/Aaru.Core/Devices/Dumping/SSC.cs @@ -1450,7 +1450,10 @@ partial class Dump var jsonFs = new FileStream(_outputPrefix + ".metadata.json", FileMode.Create); - JsonSerializer.Serialize(jsonFs, sidecar, new JsonSerializerOptions + JsonSerializer.Serialize(jsonFs, new MetadataJson + { + AaruMetadata = sidecar + }, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true diff --git a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs index 0fd14d72b..773f562e7 100644 --- a/Aaru.Core/Devices/Dumping/Sbc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/Sbc/Dump.cs @@ -1305,7 +1305,10 @@ partial class Dump var jsonFs = new FileStream(_outputPrefix + ".metadata.json", FileMode.Create); - JsonSerializer.Serialize(jsonFs, sidecar, new JsonSerializerOptions + JsonSerializer.Serialize(jsonFs, new MetadataJson + { + AaruMetadata = sidecar + }, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true diff --git a/Aaru.Core/Devices/Dumping/SecureDigital.cs b/Aaru.Core/Devices/Dumping/SecureDigital.cs index ffaf15fcd..7e64eeb56 100644 --- a/Aaru.Core/Devices/Dumping/SecureDigital.cs +++ b/Aaru.Core/Devices/Dumping/SecureDigital.cs @@ -982,7 +982,10 @@ public partial class Dump var jsonFs = new FileStream(_outputPrefix + ".metadata.json", FileMode.Create); - JsonSerializer.Serialize(jsonFs, sidecar, new JsonSerializerOptions + JsonSerializer.Serialize(jsonFs, new MetadataJson + { + AaruMetadata = sidecar + }, new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true diff --git a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs index 6475ff7d9..2ed8ca84b 100644 --- a/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/ImageConvertViewModel.cs @@ -38,6 +38,8 @@ using System.IO; using System.Linq; using System.Reactive; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using System.Xml.Serialization; @@ -57,7 +59,6 @@ using Avalonia.Threading; using MessageBox.Avalonia; using MessageBox.Avalonia.Enums; using ReactiveUI; -using Schemas; using ImageInfo = Aaru.CommonTypes.Structs.ImageInfo; using Track = Aaru.CommonTypes.Structs.Track; using Version = Aaru.CommonTypes.Interop.Version; @@ -150,7 +151,7 @@ public sealed class ImageConvertViewModel : ViewModelBase public string DriveLabel => UI.Title_Drive; public string FirmwareRevisionLabel => UI.Title_Firmware_revision; public string CommentsLabel => UI.Title_Comments; - public string CicmXmlLabel => UI.Title_Existing_CICM_XML_sidecar; + public string AaruMetadataLabel => UI.Title_Existing_Aaru_Metadata_sidecar; public string FromImageLabel => UI.Title_From_image; public string ResumeFileLabel => UI.Title_Existing_resume_file; public string StartLabel => UI.ButtonLabel_Start; @@ -179,7 +180,7 @@ public sealed class ImageConvertViewModel : ViewModelBase DriveFirmwareRevisionCommand = ReactiveCommand.Create(ExecuteDriveFirmwareRevisionCommand); CommentsCommand = ReactiveCommand.Create(ExecuteCommentsCommand); AaruMetadataFromImageCommand = ReactiveCommand.Create(ExecuteAaruMetadataFromImageCommand); - CicmXmlCommand = ReactiveCommand.Create(ExecuteCicmXmlCommand); + AaruMetadataCommand = ReactiveCommand.Create(ExecuteAaruMetadataCommand); ResumeFileFromImageCommand = ReactiveCommand.Create(ExecuteResumeFileFromImageCommand); ResumeFileCommand = ReactiveCommand.Create(ExecuteResumeFileCommand); StartCommand = ReactiveCommand.Create(ExecuteStartCommand); @@ -570,7 +571,7 @@ public sealed class ImageConvertViewModel : ViewModelBase public ReactiveCommand DriveFirmwareRevisionCommand { get; } public ReactiveCommand CommentsCommand { get; } public ReactiveCommand AaruMetadataFromImageCommand { get; } - public ReactiveCommand CicmXmlCommand { get; } + public ReactiveCommand AaruMetadataCommand { get; } public ReactiveCommand ResumeFileFromImageCommand { get; } public ReactiveCommand ResumeFileCommand { get; } public ReactiveCommand StartCommand { get; } @@ -2005,7 +2006,7 @@ public sealed class ImageConvertViewModel : ViewModelBase _aaruMetadata = _inputFormat.AaruMetadata; } - async Task ExecuteCicmXmlCommand() + async Task ExecuteAaruMetadataCommand() { _aaruMetadata = null; MetadataJsonText = ""; @@ -2020,7 +2021,7 @@ public sealed class ImageConvertViewModel : ViewModelBase Name = UI.Dialog_Aaru_Metadata, Extensions = new List(new[] { - ".xml" + ".json" }) }); @@ -2030,14 +2031,17 @@ public sealed class ImageConvertViewModel : ViewModelBase result.Length != 1) return; - var sidecarXs = new XmlSerializer(typeof(CICMMetadataType)); - try { - var sr = new StreamReader(result[0]); + var fs = new FileStream(result[0], FileMode.Open); - // _aaruMetadata = (CICMMetadataType)sidecarXs.Deserialize(sr); - sr.Close(); + _aaruMetadata = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNameCaseInsensitive = true + })?.AaruMetadata; + + fs.Close(); MetadataJsonText = result[0]; } catch @@ -2065,7 +2069,7 @@ public sealed class ImageConvertViewModel : ViewModelBase dlgMetadata.Filters?.Add(new FileDialogFilter { - Name = UI.Dialog_Aaru_Metadata, + Name = UI.Dialog_Choose_existing_resume_file, Extensions = new List(new[] { ".xml" diff --git a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs index 3055fda7c..5f2109c3d 100644 --- a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs @@ -62,7 +62,6 @@ using JetBrains.Annotations; using MessageBox.Avalonia; using MessageBox.Avalonia.Enums; using ReactiveUI; -using Schemas; using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo; using Dump = Aaru.Core.Devices.Dumping.Dump; using File = System.IO.File; @@ -515,7 +514,7 @@ public sealed class MediaDumpViewModel : ViewModelBase Name = UI.Dialog_Aaru_Metadata, Extensions = new List(new[] { - ".xml" + ".json" }) }); @@ -528,14 +527,17 @@ public sealed class MediaDumpViewModel : ViewModelBase return; } - var sidecarXs = new XmlSerializer(typeof(CICMMetadataType)); - try { - var sr = new StreamReader(result[0]); + var fs = new FileStream(result[0], FileMode.Open); - // _sidecar = (CICMMetadataType)sidecarXs.Deserialize(sr); - sr.Close(); + _sidecar = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNameCaseInsensitive = true + })?.AaruMetadata; + + fs.Close(); } catch { diff --git a/Aaru.Gui/Views/Windows/ImageConvert.xaml b/Aaru.Gui/Views/Windows/ImageConvert.xaml index b3ba7fbd6..20922e86d 100644 --- a/Aaru.Gui/Views/Windows/ImageConvert.xaml +++ b/Aaru.Gui/Views/Windows/ImageConvert.xaml @@ -191,14 +191,14 @@ - + - diff --git a/Aaru.Images/ZZZRawImage/Read.cs b/Aaru.Images/ZZZRawImage/Read.cs index 5da206701..79588d5ba 100644 --- a/Aaru.Images/ZZZRawImage/Read.cs +++ b/Aaru.Images/ZZZRawImage/Read.cs @@ -34,11 +34,13 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Xml.Serialization; using Aaru.CommonTypes; +using Aaru.CommonTypes.AaruMetadata; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Interfaces; -using Aaru.CommonTypes.Structs; using Aaru.CommonTypes.Structs.Devices.ATA; using Aaru.CommonTypes.Structs.Devices.SCSI; using Aaru.Console; @@ -48,8 +50,10 @@ using Aaru.Decoders.SCSI; using Aaru.Helpers; using Schemas; using DMI = Aaru.Decoders.Xbox.DMI; +using File = System.IO.File; using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry; using Session = Aaru.CommonTypes.Structs.Session; +using Track = Aaru.CommonTypes.Structs.Track; using TrackType = Aaru.CommonTypes.Enums.TrackType; namespace Aaru.DiscImages; @@ -1125,20 +1129,41 @@ public sealed partial class ZZZRawImage AaruConsole.VerboseWriteLine(Localization.Raw_disk_image_contains_a_disk_of_type_0, _imageInfo.MediaType); - var sidecarXs = new XmlSerializer(typeof(CICMMetadataType)); - - if(File.Exists(basename + "cicm.xml")) - try + try + { + if(File.Exists(basename + ".metadata.json")) { - var sr = new StreamReader(basename + "cicm.xml"); + var fs = new FileStream(basename + ".metadata.json", FileMode.Open); + + AaruMetadata = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNameCaseInsensitive = true + })?.AaruMetadata; + + fs.Close(); + } + else if(File.Exists(basename + ".cicm.xml")) + { + // The converter to AaruMetadata basically overcomes this (should?) + #pragma warning disable IL2026 + var sidecarXs = new XmlSerializer(typeof(CICMMetadataType)); + #pragma warning restore IL2026 + + var sr = new StreamReader(basename + ".cicm.xml"); + + // The converter to AaruMetadata basically overcomes this (should?) + #pragma warning disable IL2026 + AaruMetadata = (CICMMetadataType)sidecarXs.Deserialize(sr); + #pragma warning restore IL2026 - // AaruMetadata = (CICMMetadataType)sidecarXs.Deserialize(sr); sr.Close(); } - catch - { - // Do nothing. - } + } + catch + { + // Do nothing. + } _imageInfo.ReadableMediaTags = new List(_mediaTags.Keys); diff --git a/Aaru.Localization/UI.Designer.cs b/Aaru.Localization/UI.Designer.cs index 20de562ae..634edc9f9 100644 --- a/Aaru.Localization/UI.Designer.cs +++ b/Aaru.Localization/UI.Designer.cs @@ -6953,11 +6953,11 @@ namespace Aaru.Localization { } /// - /// Looks up a localized string similar to Existing CICM XML sidecar. + /// Looks up a localized string similar to Existing Aaru Metadata sidecar. /// - public static string Title_Existing_CICM_XML_sidecar { + public static string Title_Existing_Aaru_Metadata_sidecar { get { - return ResourceManager.GetString("Title_Existing_CICM_XML_sidecar", resourceCulture); + return ResourceManager.GetString("Title_Existing_Aaru_Metadata_sidecar", resourceCulture); } } diff --git a/Aaru.Localization/UI.resx b/Aaru.Localization/UI.resx index 1df0524cf..6ec393462 100644 --- a/Aaru.Localization/UI.resx +++ b/Aaru.Localization/UI.resx @@ -2703,8 +2703,8 @@ Do you want to continue? Firmware revision - - Existing CICM XML sidecar + + Existing Aaru Metadata sidecar From image... diff --git a/Aaru/Commands/Image/Convert.cs b/Aaru/Commands/Image/Convert.cs index 5ba56c61f..a7c78ecae 100644 --- a/Aaru/Commands/Image/Convert.cs +++ b/Aaru/Commands/Image/Convert.cs @@ -37,6 +37,8 @@ using System.CommandLine.NamingConventionBinder; using System.IO; using System.Linq; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Xml.Serialization; using Aaru.CommonTypes; using Aaru.CommonTypes.AaruMetadata; @@ -143,6 +145,11 @@ sealed class ConvertImageCommand : Command "--generate-subchannels" }, () => false, UI.Generates_subchannels_help)); + Add(new Option(new[] + { + "--aaru-metadata", "-m" + }, () => null, "Take metadata from existing Aaru Metadata sidecar.")); + AddArgument(new Argument { Arity = ArgumentArity.ExactlyOne, @@ -167,7 +174,7 @@ sealed class ConvertImageCommand : Command int mediaSequence, string mediaSerialNumber, string mediaTitle, string outputPath, string options, string resumeFile, string format, string geometry, bool fixSubchannelPosition, bool fixSubchannel, bool fixSubchannelCrc, - bool generateSubchannels) + bool generateSubchannels, string aaruMetadata) { MainClass.PrintCopyright(); @@ -233,6 +240,7 @@ sealed class ConvertImageCommand : Command AaruConsole.DebugWriteLine("Image convert command", "--fix-subchannel={0}", fixSubchannel); AaruConsole.DebugWriteLine("Image convert command", "--fix-subchannel-crc={0}", fixSubchannelCrc); AaruConsole.DebugWriteLine("Image convert command", "--generate-subchannels={0}", generateSubchannels); + AaruConsole.DebugWriteLine("Image convert command", "--aaru-metadata={0}", aaruMetadata); Dictionary parsedOptions = Core.Options.Parse(options); AaruConsole.DebugWriteLine("Image convert command", UI.Parsed_options); @@ -294,15 +302,44 @@ sealed class ConvertImageCommand : Command Metadata sidecar = null; MediaType mediaType; - var xs = new XmlSerializer(typeof(CICMMetadataType)); + if(aaruMetadata != null) - if(cicmXml != null) + if(File.Exists(aaruMetadata)) + try + { + var fs = new FileStream(aaruMetadata, FileMode.Open); + + sidecar = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNameCaseInsensitive = true + })?.AaruMetadata; + + fs.Close(); + } + catch(Exception ex) + { + AaruConsole.ErrorWriteLine(UI.Incorrect_metadata_sidecar_file_not_continuing); + AaruConsole.DebugWriteLine("Image conversion", $"{ex}"); + + return (int)ErrorNumber.InvalidSidecar; + } + else + { + AaruConsole.ErrorWriteLine(UI.Could_not_find_metadata_sidecar); + + return (int)ErrorNumber.NoSuchFile; + } + + else if(cicmXml != null) if(File.Exists(cicmXml)) try { + var xs = new XmlSerializer(typeof(CICMMetadataType)); + var sr = new StreamReader(cicmXml); - //sidecar = (CICMMetadataType)xs.Deserialize(sr); + sidecar = (CICMMetadataType)xs.Deserialize(sr); sr.Close(); } catch(Exception ex) @@ -319,15 +356,31 @@ sealed class ConvertImageCommand : Command return (int)ErrorNumber.NoSuchFile; } - xs = new XmlSerializer(typeof(Resume)); - if(resumeFile != null) + { if(File.Exists(resumeFile)) + { try { - var sr = new StreamReader(resumeFile); - resume = (Resume)xs.Deserialize(sr); - sr.Close(); + if(resumeFile.EndsWith(".metadata.json", StringComparison.CurrentCultureIgnoreCase)) + { + var fs = new FileStream(resumeFile, FileMode.Open); + + resume = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNameCaseInsensitive = true + })?.Resume; + + fs.Close(); + } + else + { + var xs = new XmlSerializer(typeof(Resume)); + var sr = new StreamReader(resumeFile); + resume = (Resume)xs.Deserialize(sr); + sr.Close(); + } } catch(Exception ex) { @@ -336,12 +389,14 @@ sealed class ConvertImageCommand : Command return (int)ErrorNumber.InvalidResume; } + } else { AaruConsole.ErrorWriteLine(UI.Could_not_find_resume_file); return (int)ErrorNumber.NoSuchFile; } + } var filtersList = new FiltersList(); IFilter inputFilter = null; @@ -601,7 +656,7 @@ sealed class ConvertImageCommand : Command return (int)ErrorNumber.CannotCreateFormat; } - var metadata = new ImageInfo + var imageInfo = new ImageInfo { Application = "Aaru", ApplicationVersion = Version.GetVersion(), @@ -621,7 +676,7 @@ sealed class ConvertImageCommand : Command MediaTitle = mediaTitle ?? inputFormat.Info.MediaTitle }; - if(!outputFormat.SetImageInfo(metadata)) + if(!outputFormat.SetImageInfo(imageInfo)) { if(!force) { @@ -633,7 +688,7 @@ sealed class ConvertImageCommand : Command AaruConsole.ErrorWriteLine(Localization.Core.Error_0_setting_metadata, outputFormat.ErrorMessage); } - Metadata aaruMetadata = inputFormat.AaruMetadata; + Metadata metadata = inputFormat.AaruMetadata; List dumpHardware = inputFormat.DumpHardware; foreach(MediaTagType mediaTag in inputFormat.Info.ReadableMediaTags.Where(mediaTag => @@ -1433,8 +1488,8 @@ sealed class ConvertImageCommand : Command ret = false; - if(sidecar != null || - aaruMetadata != null) + if(sidecar != null || + metadata != null) { Core.Spectre.ProgressSingleSpinner(ctx => { @@ -1442,8 +1497,8 @@ sealed class ConvertImageCommand : Command if(sidecar != null) ret = outputFormat.SetMetadata(sidecar); - else if(aaruMetadata != null) - ret = outputFormat.SetMetadata(aaruMetadata); + else if(metadata != null) + ret = outputFormat.SetMetadata(metadata); }); if(ret) diff --git a/Aaru/Commands/Media/Dump.cs b/Aaru/Commands/Media/Dump.cs index 92cdb0748..d0b466584 100644 --- a/Aaru/Commands/Media/Dump.cs +++ b/Aaru/Commands/Media/Dump.cs @@ -218,6 +218,11 @@ sealed class DumpMediaCommand : Command "--dimensions" }, () => 1080, UI.Dump_graph_dimensions_argument_help)); + Add(new Option(new[] + { + "--aaru-metadata", "-m" + }, () => null, "Take metadata from existing Aaru Metadata sidecar.")); + Handler = CommandHandler.Create(GetType().GetMethod(nameof(Invoke))); } @@ -228,7 +233,7 @@ sealed class DumpMediaCommand : Command bool fixSubchannelPosition, bool retrySubchannel, bool fixSubchannel, bool fixSubchannelCrc, bool generateSubchannels, bool skipCdiReadyHole, bool eject, uint maxBlocks, bool useBufferedReads, bool storeEncrypted, bool titleKeys, - uint ignoreCdrRunOuts, bool createGraph, uint dimensions) + uint ignoreCdrRunOuts, bool createGraph, uint dimensions, string aaruMetadata) { MainClass.PrintCopyright(); @@ -299,6 +304,7 @@ sealed class DumpMediaCommand : Command AaruConsole.DebugWriteLine("Dump-Media command", "--ignore-cdr-runouts={0}", ignoreCdrRunOuts); AaruConsole.DebugWriteLine("Dump-Media command", "--create-graph={0}", createGraph); AaruConsole.DebugWriteLine("Dump-Media command", "--dimensions={0}", dimensions); + AaruConsole.DebugWriteLine("Dump-Media command", "--aaru-metadata={0}", aaruMetadata); // TODO: Disabled temporarily //AaruConsole.DebugWriteLine("Dump-Media command", "--raw={0}", raw); @@ -468,7 +474,6 @@ sealed class DumpMediaCommand : Command string outputPrefix = Path.Combine(Path.GetDirectoryName(outputPath), responseLine); Resume resumeClass = null; - var xs = new XmlSerializer(typeof(Resume)); if(resume) { @@ -491,6 +496,7 @@ sealed class DumpMediaCommand : Command // DEPRECATED: To be removed in Aaru 7 else if(File.Exists(outputPrefix + ".resume.xml") && resume) { + var xs = new XmlSerializer(typeof(Resume)); var sr = new StreamReader(outputPrefix + ".resume.xml"); resumeClass = (Resume)xs.Deserialize(sr); sr.Close(); @@ -522,16 +528,48 @@ sealed class DumpMediaCommand : Command return (int)ErrorNumber.AlreadyDumped; } - Metadata sidecar = null; - var sidecarXs = new XmlSerializer(typeof(CICMMetadataType)); + Metadata sidecar = null; - if(cicmXml != null) + if(aaruMetadata != null) + if(File.Exists(aaruMetadata)) + try + { + var fs = new FileStream(aaruMetadata, FileMode.Open); + + sidecar = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNameCaseInsensitive = true + })?.AaruMetadata; + + fs.Close(); + } + catch + { + AaruConsole.ErrorWriteLine(UI.Incorrect_metadata_sidecar_file_not_continuing); + + if(isResponse) + continue; + + return (int)ErrorNumber.InvalidSidecar; + } + else + { + AaruConsole.ErrorWriteLine(UI.Could_not_find_metadata_sidecar); + + if(isResponse) + continue; + + return (int)ErrorNumber.NoSuchFile; + } + else if(cicmXml != null) if(File.Exists(cicmXml)) try { - var sr = new StreamReader(cicmXml); + var sr = new StreamReader(cicmXml); + var sidecarXs = new XmlSerializer(typeof(CICMMetadataType)); - //sidecar = (CICMMetadataType)sidecarXs.Deserialize(sr); + sidecar = (CICMMetadataType)sidecarXs.Deserialize(sr); sr.Close(); } catch