From e75a1a4f69c063d6f5cd2ff4e0b8bf9bfebcde52 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 23 Oct 2020 04:06:10 +0100 Subject: [PATCH] Use image capabilities when dumping CDs. --- Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs index a54d7206e..179baf90f 100644 --- a/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs +++ b/Aaru.Core/Devices/Dumping/CompactDisc/Dump.cs @@ -407,7 +407,37 @@ namespace Aaru.Core.Devices.Dumping } if(!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities. - CanStorePregaps) && + CanStoreRawData)) + { + if(!_force) + { + _dumpLog.WriteLine("Output format does not support storing raw data, this may end in a loss of data, not continuing..."); + + StoppingErrorMessage?. + Invoke("Output format does not support storing raw data, this may end in a loss of data, not continuing..."); + + return; + } + + _dumpLog.WriteLine("Output format does not support storing raw data, this may end in a loss of data, continuing..."); + + ErrorMessage?. + Invoke("Output format does not support storing raw data, this may end in a loss of data, continuing..."); + } + + if(!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities. + CanStoreAudioTracks) && + tracks.Any(track => track.TrackType == TrackType.Audio)) + { + _dumpLog.WriteLine("Output format does not support audio tracks, cannot continue..."); + + StoppingErrorMessage?.Invoke("Output format does not support audio tracks, cannot continue..."); + + return; + } + + if(!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities. + CanStorePregaps) && tracks.Where(track => track.TrackSequence != tracks.First(t => t.TrackSession == track.TrackSession).TrackSequence). Any(track => track.TrackPregap > 0)) @@ -455,6 +485,26 @@ namespace Aaru.Core.Devices.Dumping // Read media tags ReadCdTags(ref dskType, mediaTags, out sessions, out firstTrackLastSession); + if(!(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities. + CanStoreSessions) && + sessions > 1) + { + if(!_force) + { + _dumpLog.WriteLine("Output format does not support sessions, this will end in a loss of data, not continuing..."); + + StoppingErrorMessage?. + Invoke("Output format does not support sessions, this will end in a loss of data, not continuing..."); + + return; + } + + _dumpLog.WriteLine("Output format does not support sessions, this will end in a loss of data, continuing..."); + + ErrorMessage?. + Invoke("Output format does not support sessions, this will end in a loss of data, continuing..."); + } + // Check if output format supports all disc tags we have retrieved so far foreach(MediaTagType tag in mediaTags.Keys.Where(tag => !_outputPlugin.SupportedMediaTags.Contains(tag))) { @@ -788,7 +838,7 @@ namespace Aaru.Core.Devices.Dumping // If a subchannel is supported, check if output plugin allows us to write it. if(desiredSubchannel != MmcSubchannel.None && !(_outputPlugin as IWritableOpticalImage).OpticalCapabilities.HasFlag(OpticalImageCapabilities. - CanStoreSubchannelRw)) + CanStoreSubchannelRw)) { _dumpLog.WriteLine("Output image does not support subchannels, {0}continuing...", _force ? "" : "not ");