From 5dd39030057883263b817f95a91e5005baf02468 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 21 Apr 2019 01:54:06 +0100 Subject: [PATCH] Update media scan GUI error times via events. --- DiscImageChef.Core/Delegates.cs | 6 ++++++ DiscImageChef.Core/Devices/Scanning/ATA.cs | 2 ++ DiscImageChef.Core/Devices/Scanning/MediaScan.cs | 3 ++- DiscImageChef.Core/Devices/Scanning/SCSI.cs | 2 ++ .../Devices/Scanning/SecureDigital.cs | 1 + DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs | 16 +++++++++++++--- 6 files changed, 26 insertions(+), 4 deletions(-) diff --git a/DiscImageChef.Core/Delegates.cs b/DiscImageChef.Core/Delegates.cs index 7feb12587..3a7fadf31 100644 --- a/DiscImageChef.Core/Delegates.cs +++ b/DiscImageChef.Core/Delegates.cs @@ -109,4 +109,10 @@ namespace DiscImageChef.Core /// Time in milliseconds /// Number of blocks scanned public delegate void ScanTimeHandler(double time, uint blocks); + + /// + /// Specified a number of blocks could not be read on scan + /// + /// Number of blocks scanned + public delegate void ScanUnreadableHandler(uint blocks); } \ No newline at end of file diff --git a/DiscImageChef.Core/Devices/Scanning/ATA.cs b/DiscImageChef.Core/Devices/Scanning/ATA.cs index 24ab716f7..3ee37d469 100644 --- a/DiscImageChef.Core/Devices/Scanning/ATA.cs +++ b/DiscImageChef.Core/Devices/Scanning/ATA.cs @@ -155,6 +155,7 @@ namespace DiscImageChef.Core.Devices.Scanning } else { + ScanUnreadable?.Invoke(blocksToRead); results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); @@ -250,6 +251,7 @@ namespace DiscImageChef.Core.Devices.Scanning } else { + ScanUnreadable?.Invoke(blocksToRead); results.Errored += blocksToRead; results.UnreadableSectors.Add(currentBlock); mhddLog.Write(currentBlock, duration < 500 ? 65535 : duration); diff --git a/DiscImageChef.Core/Devices/Scanning/MediaScan.cs b/DiscImageChef.Core/Devices/Scanning/MediaScan.cs index dcc44ed43..bf75dfa61 100644 --- a/DiscImageChef.Core/Devices/Scanning/MediaScan.cs +++ b/DiscImageChef.Core/Devices/Scanning/MediaScan.cs @@ -68,6 +68,7 @@ namespace DiscImageChef.Core.Devices.Scanning /// Event raised to update the status of an undeterminate progress bar /// public event PulseProgressHandler PulseProgress; - public event ScanTimeHandler ScanTime; + public event ScanTimeHandler ScanTime; + public event ScanUnreadableHandler ScanUnreadable; } } \ No newline at end of file diff --git a/DiscImageChef.Core/Devices/Scanning/SCSI.cs b/DiscImageChef.Core/Devices/Scanning/SCSI.cs index a5aa73bf7..d1fb82554 100644 --- a/DiscImageChef.Core/Devices/Scanning/SCSI.cs +++ b/DiscImageChef.Core/Devices/Scanning/SCSI.cs @@ -345,6 +345,7 @@ namespace DiscImageChef.Core.Devices.Scanning } else { + ScanUnreadable?.Invoke(blocksToRead); results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); @@ -417,6 +418,7 @@ namespace DiscImageChef.Core.Devices.Scanning // TODO: Separate errors on kind of errors. else { + ScanUnreadable?.Invoke(blocksToRead); results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); diff --git a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs index 17f34426d..594c04d4d 100644 --- a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs @@ -186,6 +186,7 @@ namespace DiscImageChef.Core.Devices.Scanning } else { + ScanUnreadable?.Invoke(blocksToRead); results.Errored += blocksToRead; for(ulong b = i; b < i + blocksToRead; b++) results.UnreadableSectors.Add(b); diff --git a/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs b/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs index 03150ebc7..f4a1811b4 100644 --- a/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs +++ b/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs @@ -98,9 +98,10 @@ namespace DiscImageChef.Gui.Forms Statistics.AddDevice(dev); - localResults = new ScanResults(); - scanner = new MediaScan(null, null, devicePath, dev); - scanner.ScanTime += OnScanTime; + localResults = new ScanResults(); + scanner = new MediaScan(null, null, devicePath, dev); + scanner.ScanTime += OnScanTime; + scanner.ScanUnreadable += OnScanUnreadable; ScanResults results = scanner.Scan(); Application.Instance.Invoke(() => @@ -147,6 +148,15 @@ namespace DiscImageChef.Gui.Forms }); } + void OnScanUnreadable(uint blocks) + { + Application.Instance.Invoke(() => + { + localResults.Errored += blocks; + lblUnreadableSectors.Text = $"{localResults.Errored} sectors could not be read."; + }); + } + void OnScanTime(double time, uint blocks) { Application.Instance.Invoke(() =>