Change how pregap starting with 0 is calculated dumping vs converting. Fixes #375

This commit is contained in:
2020-11-04 23:55:24 +00:00
parent 14605b4d91
commit f92f122443
8 changed files with 132 additions and 220 deletions

View File

@@ -261,16 +261,9 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i + r, 1); _outputPlugin.WriteSectorsLong(data, i + r, 1);
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
desiredSubchannel, sub, desiredSubchannel, sub, i + r, 1, subLog, isrcs, 1, ref mcn, tracks,
i + r, 1, subLog, isrcs, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
1, ref mcn, tracks, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
subchannelExtents,
_fixSubchannelPosition,
_outputPlugin,
_fixSubchannel,
_fixSubchannelCrc,
_dumpLog, UpdateStatus,
smallestPregapLbaPerTrack);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -353,15 +346,9 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i, blocksToRead); _outputPlugin.WriteSectorsLong(data, i, blocksToRead);
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
desiredSubchannel, sub, i, desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, 1, ref mcn, tracks,
blocksToRead, subLog, isrcs, 1, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
ref mcn, tracks, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
subchannelExtents,
_fixSubchannelPosition,
_outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)

View File

@@ -417,7 +417,7 @@ namespace Aaru.Core.Devices.Dumping
desiredSubchannel, sub, i + r, 1, subLog, isrcs, (byte)track.TrackSequence, desiredSubchannel, sub, i + r, 1, subLog, isrcs, (byte)track.TrackSequence,
ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin,
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus,
smallestPregapLbaPerTrack); smallestPregapLbaPerTrack, true);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -560,7 +560,8 @@ namespace Aaru.Core.Devices.Dumping
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, (byte)track.TrackSequence, desiredSubchannel, sub, i, blocksToRead, subLog, isrcs, (byte)track.TrackSequence,
ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin,
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack); _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack,
true);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)

View File

@@ -308,7 +308,7 @@ namespace Aaru.Core.Devices.Dumping
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence, ref mcn, desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence, ref mcn,
tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack); _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -440,7 +440,7 @@ namespace Aaru.Core.Devices.Dumping
desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence, desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence,
ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, ref mcn, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin,
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus,
smallestPregapLbaPerTrack); smallestPregapLbaPerTrack, true);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -590,7 +590,7 @@ namespace Aaru.Core.Devices.Dumping
subLog, isrcs, (byte)track.TrackSequence, ref mcn, tracks, subLog, isrcs, (byte)track.TrackSequence, ref mcn, tracks,
subchannelExtents, _fixSubchannelPosition, _outputPlugin, subchannelExtents, _fixSubchannelPosition, _outputPlugin,
_fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus, _fixSubchannel, _fixSubchannelCrc, _dumpLog, UpdateStatus,
smallestPregapLbaPerTrack); smallestPregapLbaPerTrack, true);
if(subchannelExtents.Contains(bs)) if(subchannelExtents.Contains(bs))
continue; continue;

View File

@@ -161,16 +161,9 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i, _maximumReadable); _outputPlugin.WriteSectorsLong(data, i, _maximumReadable);
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
desiredSubchannel, sub, i, desiredSubchannel, sub, i, _maximumReadable, subLog, isrcs, 0xAA, ref mcn, tracks,
_maximumReadable, subLog, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
isrcs, 0xAA, ref mcn, tracks, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
subchannelExtents,
_fixSubchannelPosition,
_outputPlugin,
_fixSubchannel,
_fixSubchannelCrc, _dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)
@@ -336,16 +329,9 @@ namespace Aaru.Core.Devices.Dumping
_outputPlugin.WriteSectorsLong(data, i, _maximumReadable); _outputPlugin.WriteSectorsLong(data, i, _maximumReadable);
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
desiredSubchannel, sub, i, desiredSubchannel, sub, i, _maximumReadable, subLog, isrcs, 0xAA, ref mcn, tracks,
_maximumReadable, subLog, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
isrcs, 0xAA, ref mcn, tracks, _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
subchannelExtents,
_fixSubchannelPosition,
_outputPlugin,
_fixSubchannel,
_fixSubchannelCrc, _dumpLog,
UpdateStatus,
smallestPregapLbaPerTrack);
// Set tracks and go back // Set tracks and go back
if(indexesChanged) if(indexesChanged)

View File

@@ -202,7 +202,7 @@ namespace Aaru.Core.Devices.Dumping
bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel, bool indexesChanged = Media.CompactDisc.WriteSubchannelToImage(supportedSubchannel,
desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence, ref mcn, desiredSubchannel, sub, badSector, 1, subLog, isrcs, (byte)track.TrackSequence, ref mcn,
tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel, tracks, subchannelExtents, _fixSubchannelPosition, _outputPlugin, _fixSubchannel,
_fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack); _fixSubchannelCrc, _dumpLog, UpdateStatus, smallestPregapLbaPerTrack, true);
// Set tracks and go back // Set tracks and go back
if(!indexesChanged) if(!indexesChanged)

View File

@@ -50,7 +50,7 @@ namespace Aaru.Core.Media
bool fixSubchannelPosition, IWritableImage outputPlugin, bool fixSubchannelPosition, IWritableImage outputPlugin,
bool fixSubchannel, bool fixSubchannelCrc, DumpLog dumpLog, bool fixSubchannel, bool fixSubchannelCrc, DumpLog dumpLog,
UpdateStatusHandler updateStatus, UpdateStatusHandler updateStatus,
Dictionary<byte, int> smallestPregapLbaPerTrack) Dictionary<byte, int> smallestPregapLbaPerTrack, bool dumping)
{ {
if(supportedSubchannel == MmcSubchannel.Q16) if(supportedSubchannel == MmcSubchannel.Q16)
sub = Subchannel.ConvertQToRaw(sub); sub = Subchannel.ConvertQToRaw(sub);
@@ -65,7 +65,7 @@ namespace Aaru.Core.Media
byte[] deSub = Subchannel.Deinterleave(sub); byte[] deSub = Subchannel.Deinterleave(sub);
bool indexesChanged = CheckIndexesFromSubchannel(deSub, isrcs, currentTrack, ref mcn, tracks, dumpLog, bool indexesChanged = CheckIndexesFromSubchannel(deSub, isrcs, currentTrack, ref mcn, tracks, dumpLog,
updateStatus, smallestPregapLbaPerTrack); updateStatus, smallestPregapLbaPerTrack, dumping);
if(!fixSubchannelPosition || if(!fixSubchannelPosition ||
desiredSubchannel == MmcSubchannel.None) desiredSubchannel == MmcSubchannel.None)
@@ -100,8 +100,8 @@ namespace Aaru.Core.Media
pWeight++; pWeight++;
} }
if(!deSub.Skip(subPos + 24).Take(96 - 24).All(rw => (rw == 0)) && if(!deSub.Skip(subPos + 24).Take(96 - 24).All(rw => rw == 0) &&
!deSub.Skip(subPos + 24).Take(96 - 24).All(rw => (rw == 0xFF))) !deSub.Skip(subPos + 24).Take(96 - 24).All(rw => rw == 0xFF))
rwOk = false; rwOk = false;
bool rwPacket = false; bool rwPacket = false;
@@ -253,7 +253,7 @@ namespace Aaru.Core.Media
static bool CheckIndexesFromSubchannel(byte[] deSub, Dictionary<byte, string> isrcs, byte currentTrack, static bool CheckIndexesFromSubchannel(byte[] deSub, Dictionary<byte, string> isrcs, byte currentTrack,
ref string mcn, Track[] tracks, DumpLog dumpLog, ref string mcn, Track[] tracks, DumpLog dumpLog,
UpdateStatusHandler updateStatus, UpdateStatusHandler updateStatus,
Dictionary<byte, int> smallestPregapLbaPerTrack) Dictionary<byte, int> smallestPregapLbaPerTrack, bool dumping)
{ {
bool status = false; bool status = false;
@@ -339,8 +339,10 @@ namespace Aaru.Core.Media
byte pframe = (byte)(((q[5] / 16) * 10) + (q[5] & 0x0F)); byte pframe = (byte)(((q[5] / 16) * 10) + (q[5] & 0x0F));
int qPos = (pmin * 60 * 75) + (psec * 75) + pframe; int qPos = (pmin * 60 * 75) + (psec * 75) + pframe;
// When we are dumping we calculate the pregap in reverse from index 1 back.
// When we are not, we go from index 0.
if(!smallestPregapLbaPerTrack.ContainsKey(trackNo)) if(!smallestPregapLbaPerTrack.ContainsKey(trackNo))
smallestPregapLbaPerTrack[trackNo] = 1; smallestPregapLbaPerTrack[trackNo] = dumping ? 1 : 0;
if(qPos < smallestPregapLbaPerTrack[trackNo]) if(qPos < smallestPregapLbaPerTrack[trackNo])
{ {

View File

@@ -676,16 +676,12 @@ namespace Aaru.Gui.ViewModels.Windows
}); });
foreach(MediaTagType mediaTag in _inputFormat.Info.ReadableMediaTags.Where(mediaTag => foreach(MediaTagType mediaTag in _inputFormat.Info.ReadableMediaTags.Where(mediaTag =>
!outputFormat. !outputFormat.SupportedMediaTags.Contains(mediaTag) && !ForceChecked))
SupportedMediaTags.
Contains(mediaTag) &&
!ForceChecked))
{ {
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Converting image will lose media tag {mediaTag}, not continuing...", $"Converting image will lose media tag {mediaTag}, not continuing...",
icon: Icon. icon: Icon.Error).
Error).
ShowDialog(_view)); ShowDialog(_view));
return; return;
@@ -694,9 +690,7 @@ namespace Aaru.Gui.ViewModels.Windows
bool useLong = _inputFormat.Info.ReadableSectorTags.Count != 0; bool useLong = _inputFormat.Info.ReadableSectorTags.Count != 0;
foreach(SectorTagType sectorTag in _inputFormat.Info.ReadableSectorTags.Where(sectorTag => foreach(SectorTagType sectorTag in _inputFormat.Info.ReadableSectorTags.Where(sectorTag =>
!outputFormat. !outputFormat.SupportedSectorTags.Contains(sectorTag)))
SupportedSectorTags.
Contains(sectorTag)))
{ {
if(ForceChecked) if(ForceChecked)
{ {
@@ -711,8 +705,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Converting image will lose sector tag {sectorTag}, not continuing...", $"Converting image will lose sector tag {sectorTag}, not continuing...",
icon: Icon. icon: Icon.Error).
Error).
ShowDialog(_view)); ShowDialog(_view));
return; return;
@@ -765,8 +758,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} creating output image.", $"Error {outputFormat.ErrorMessage} creating output image.",
icon: Icon. icon: Icon.Error).
Error).
ShowDialog(_view)); ShowDialog(_view));
AaruConsole.ErrorWriteLine("Error {0} creating output image.", outputFormat.ErrorMessage); AaruConsole.ErrorWriteLine("Error {0} creating output image.", outputFormat.ErrorMessage);
@@ -812,10 +804,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} setting metadata, not continuing...", $"Error {outputFormat.ErrorMessage} setting metadata, not continuing...",
icon icon: Icon.Error).ShowDialog(_view));
: Icon.
Error).
ShowDialog(_view));
AaruConsole.ErrorWriteLine("not continuing..."); AaruConsole.ErrorWriteLine("not continuing...");
@@ -843,9 +832,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} sending tracks list to output image.", $"Error {outputFormat.ErrorMessage} sending tracks list to output image.",
icon: icon: Icon.Error).
Icon.
Error).
ShowDialog(_view)); ShowDialog(_view));
AaruConsole.ErrorWriteLine("Error {0} sending tracks list to output image.", AaruConsole.ErrorWriteLine("Error {0} sending tracks list to output image.",
@@ -883,9 +870,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} writing media tag, not continuing...", $"Error {outputFormat.ErrorMessage} writing media tag, not continuing...",
icon: icon: Icon.Error).
Icon.
Error).
ShowDialog(_view)); ShowDialog(_view));
AaruConsole.ErrorWriteLine("Error {0} writing media tag, not continuing...", AaruConsole.ErrorWriteLine("Error {0} writing media tag, not continuing...",
@@ -992,10 +977,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} writing sector {doneSectors}, not continuing...", $"Error {outputFormat.ErrorMessage} writing sector {doneSectors}, not continuing...",
icon icon: Icon.Error).ShowDialog(_view));
: Icon.
Error).
ShowDialog(_view));
AaruConsole.ErrorWriteLine("Error {0} writing sector {1}, not continuing...", AaruConsole.ErrorWriteLine("Error {0} writing sector {1}, not continuing...",
outputFormat.ErrorMessage, doneSectors); outputFormat.ErrorMessage, doneSectors);
@@ -1121,14 +1103,9 @@ namespace Aaru.Gui.ViewModels.Windows
track != null) track != null)
{ {
bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw, bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw,
MmcSubchannel.Raw, sector, MmcSubchannel.Raw, sector, doneSectors, 1, null, isrcs,
doneSectors, 1, null, isrcs, (byte)track.TrackSequence, ref mcn, tracks.ToArray(), subchannelExtents, false,
(byte)track.TrackSequence, outputFormat, false, false, null, null, smallestPregapLbaPerTrack, false);
ref mcn, tracks.ToArray(),
subchannelExtents, false,
outputFormat, false, false,
null, null,
smallestPregapLbaPerTrack);
if(indexesChanged) if(indexesChanged)
outputOptical.SetTracks(tracks.ToList()); outputOptical.SetTracks(tracks.ToList());
@@ -1148,15 +1125,9 @@ namespace Aaru.Gui.ViewModels.Windows
{ {
bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw, bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw,
MmcSubchannel.Raw, sector, MmcSubchannel.Raw, sector, doneSectors, sectorsToDo, null, isrcs,
doneSectors, sectorsToDo, null, (byte)track.TrackSequence, ref mcn, tracks.ToArray(), subchannelExtents, false,
isrcs, outputFormat, false, false, null, null, smallestPregapLbaPerTrack, false);
(byte)track.TrackSequence,
ref mcn, tracks.ToArray(),
subchannelExtents, false,
outputFormat, false, false,
null, null,
smallestPregapLbaPerTrack);
if(indexesChanged) if(indexesChanged)
outputOptical.SetTracks(tracks.ToList()); outputOptical.SetTracks(tracks.ToList());
@@ -1180,9 +1151,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} writing sector {doneSectors}, not continuing...", $"Error {outputFormat.ErrorMessage} writing sector {doneSectors}, not continuing...",
icon icon: Icon.Error).
: Icon.
Error).
ShowDialog(_view)); ShowDialog(_view));
AaruConsole.ErrorWriteLine("Error {0} writing sector {1}, not continuing...", AaruConsole.ErrorWriteLine("Error {0} writing sector {1}, not continuing...",
@@ -1303,9 +1272,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} writing sector {doneSectors}, not continuing...", $"Error {outputFormat.ErrorMessage} writing sector {doneSectors}, not continuing...",
icon icon: Icon.Error).
: Icon.
Error).
ShowDialog(_view)); ShowDialog(_view));
return; return;
@@ -1323,8 +1290,7 @@ namespace Aaru.Gui.ViewModels.Windows
Progress2Value = Progress2MaxValue; Progress2Value = Progress2MaxValue;
}); });
foreach(SectorTagType tag in _inputFormat. foreach(SectorTagType tag in _inputFormat.Info.ReadableSectorTags.OrderBy(t => t).
Info.ReadableSectorTags.OrderBy(t => t).
TakeWhile(tag => useLong && !_cancel)) TakeWhile(tag => useLong && !_cancel))
{ {
switch(tag) switch(tag)
@@ -1382,9 +1348,7 @@ namespace Aaru.Gui.ViewModels.Windows
await MessageBoxManager. await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} writing tag, not continuing...", $"Error {outputFormat.ErrorMessage} writing tag, not continuing...",
icon icon: Icon.Error).
: Icon.
Error).
ShowDialog(_view)); ShowDialog(_view));
return; return;
@@ -1442,9 +1406,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} writing tag for sector {doneSectors}, not continuing...", $"Error {outputFormat.ErrorMessage} writing tag for sector {doneSectors}, not continuing...",
icon icon: Icon.Error).
: Icon.
Error).
ShowDialog(_view)); ShowDialog(_view));
return; return;
@@ -1525,8 +1487,7 @@ namespace Aaru.Gui.ViewModels.Windows
await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager. await Dispatcher.UIThread.InvokeAsync(action: async () => await MessageBoxManager.
GetMessageBoxStandardWindow("Error", GetMessageBoxStandardWindow("Error",
$"Error {outputFormat.ErrorMessage} closing output image... Contents are not correct.", $"Error {outputFormat.ErrorMessage} closing output image... Contents are not correct.",
icon: Icon. icon: Icon.Error).
Error).
ShowDialog(_view)); ShowDialog(_view));
return; return;

View File

@@ -557,10 +557,7 @@ namespace Aaru.Commands.Image
} }
foreach(MediaTagType mediaTag in inputFormat.Info.ReadableMediaTags.Where(mediaTag => foreach(MediaTagType mediaTag in inputFormat.Info.ReadableMediaTags.Where(mediaTag =>
!outputFormat. !outputFormat.SupportedMediaTags.Contains(mediaTag) && !force))
SupportedMediaTags.
Contains(mediaTag) &&
!force))
{ {
AaruConsole.ErrorWriteLine("Converting image will lose media tag {0}, not continuing...", mediaTag); AaruConsole.ErrorWriteLine("Converting image will lose media tag {0}, not continuing...", mediaTag);
AaruConsole.ErrorWriteLine("If you don't care, use force option."); AaruConsole.ErrorWriteLine("If you don't care, use force option.");
@@ -571,9 +568,7 @@ namespace Aaru.Commands.Image
bool useLong = inputFormat.Info.ReadableSectorTags.Count != 0; bool useLong = inputFormat.Info.ReadableSectorTags.Count != 0;
foreach(SectorTagType sectorTag in inputFormat.Info.ReadableSectorTags.Where(sectorTag => foreach(SectorTagType sectorTag in inputFormat.Info.ReadableSectorTags.Where(sectorTag =>
!outputFormat. !outputFormat.SupportedSectorTags.Contains(sectorTag)))
SupportedSectorTags.
Contains(sectorTag)))
{ {
if(force) if(force)
{ {
@@ -639,9 +634,7 @@ namespace Aaru.Commands.Image
List<DumpHardwareType> dumpHardware = inputFormat.DumpHardware; List<DumpHardwareType> dumpHardware = inputFormat.DumpHardware;
foreach(MediaTagType mediaTag in inputFormat.Info.ReadableMediaTags.Where(mediaTag => foreach(MediaTagType mediaTag in inputFormat.Info.ReadableMediaTags.Where(mediaTag =>
!force || outputFormat. !force || outputFormat.SupportedMediaTags.Contains(mediaTag)))
SupportedMediaTags.
Contains(mediaTag)))
{ {
AaruConsole.WriteLine("Converting media tag {0}", mediaTag); AaruConsole.WriteLine("Converting media tag {0}", mediaTag);
byte[] tag = inputFormat.ReadDiskTag(mediaTag); byte[] tag = inputFormat.ReadDiskTag(mediaTag);
@@ -833,8 +826,8 @@ namespace Aaru.Commands.Image
subchannelExtents.Add((int)s); subchannelExtents.Add((int)s);
} }
foreach(SectorTagType tag in inputFormat. foreach(SectorTagType tag in inputFormat.Info.ReadableSectorTags.OrderBy(t => t).
Info.ReadableSectorTags.OrderBy(t => t).TakeWhile(tag => useLong)) TakeWhile(tag => useLong))
{ {
switch(tag) switch(tag)
{ {
@@ -908,19 +901,10 @@ namespace Aaru.Commands.Image
if(tag == SectorTagType.CdSectorSubchannel) if(tag == SectorTagType.CdSectorSubchannel)
{ {
bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw, bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw,
MmcSubchannel.Raw, sector, MmcSubchannel.Raw, sector, doneSectors + track.TrackStartSector, 1, null,
doneSectors + isrcs, (byte)track.TrackSequence, ref mcn, tracks, subchannelExtents,
track.TrackStartSector, 1, fixSubchannelPosition, outputFormat, fixSubchannel, fixSubchannelCrc, null,
null, isrcs, null, smallestPregapLbaPerTrack, false);
(byte)track.TrackSequence,
ref mcn, tracks,
subchannelExtents,
fixSubchannelPosition,
outputFormat,
fixSubchannel,
fixSubchannelCrc, null,
null,
smallestPregapLbaPerTrack);
if(indexesChanged) if(indexesChanged)
outputOptical.SetTracks(tracks.ToList()); outputOptical.SetTracks(tracks.ToList());
@@ -939,19 +923,10 @@ namespace Aaru.Commands.Image
if(tag == SectorTagType.CdSectorSubchannel) if(tag == SectorTagType.CdSectorSubchannel)
{ {
bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw, bool indexesChanged = CompactDisc.WriteSubchannelToImage(MmcSubchannel.Raw,
MmcSubchannel.Raw, sector, MmcSubchannel.Raw, sector, doneSectors + track.TrackStartSector,
doneSectors + sectorsToDo, null, isrcs, (byte)track.TrackSequence, ref mcn, tracks,
track.TrackStartSector, subchannelExtents, fixSubchannelPosition, outputFormat, fixSubchannel,
sectorsToDo, null, isrcs, fixSubchannelCrc, null, null, smallestPregapLbaPerTrack, false);
(byte)track.TrackSequence,
ref mcn, tracks,
subchannelExtents,
fixSubchannelPosition,
outputFormat,
fixSubchannel,
fixSubchannelCrc, null,
null,
smallestPregapLbaPerTrack);
if(indexesChanged) if(indexesChanged)
outputOptical.SetTracks(tracks.ToList()); outputOptical.SetTracks(tracks.ToList());