From a800ddb0ab527b4b8fd7b322a6f471dd5646d78e Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 21 Apr 2019 01:42:38 +0100 Subject: [PATCH] Update media scan GUI block times via events. --- DiscImageChef.Core/Delegates.cs | 4 +-- DiscImageChef.Core/Devices/Scanning/ATA.cs | 2 ++ .../Devices/Scanning/MediaScan.cs | 5 +--- DiscImageChef.Core/Devices/Scanning/SCSI.cs | 2 ++ .../Devices/Scanning/SecureDigital.cs | 1 + DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs | 25 ++++++++++++++++++- DiscImageChef/Commands/MediaScan.cs | 1 - 7 files changed, 32 insertions(+), 8 deletions(-) diff --git a/DiscImageChef.Core/Delegates.cs b/DiscImageChef.Core/Delegates.cs index 001f25273..7feb12587 100644 --- a/DiscImageChef.Core/Delegates.cs +++ b/DiscImageChef.Core/Delegates.cs @@ -104,9 +104,9 @@ namespace DiscImageChef.Core public delegate void ErrorMessageHandler(string text); /// - /// Updates lists of time taken on scanning the specified number of blocks + /// Updates lists of time taken on scanning the specified number of blocks /// /// Time in milliseconds /// Number of blocks scanned - public delegate void ScanTime(double time, uint blocks); + public delegate void ScanTimeHandler(double time, 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 e3256b78d..24ab716f7 100644 --- a/DiscImageChef.Core/Devices/Scanning/ATA.cs +++ b/DiscImageChef.Core/Devices/Scanning/ATA.cs @@ -149,6 +149,7 @@ namespace DiscImageChef.Core.Devices.Scanning else if(duration >= 3) results.B += blocksToRead; else results.A += blocksToRead; + ScanTime?.Invoke(duration, blocksToRead); mhddLog.Write(i, duration); ibgLog.Write(i, currentSpeed * 1024); } @@ -243,6 +244,7 @@ namespace DiscImageChef.Core.Devices.Scanning else if(duration >= 3) results.B += blocksToRead; else results.A += blocksToRead; + ScanTime?.Invoke(duration, blocksToRead); mhddLog.Write(currentBlock, duration); ibgLog.Write(currentBlock, currentSpeed * 1024); } diff --git a/DiscImageChef.Core/Devices/Scanning/MediaScan.cs b/DiscImageChef.Core/Devices/Scanning/MediaScan.cs index aea49ad48..dcc44ed43 100644 --- a/DiscImageChef.Core/Devices/Scanning/MediaScan.cs +++ b/DiscImageChef.Core/Devices/Scanning/MediaScan.cs @@ -57,10 +57,6 @@ namespace DiscImageChef.Core.Devices.Scanning /// public event UpdateStatusHandler UpdateStatus; /// - /// Event raised to report a non-fatal error - /// - public event ErrorMessageHandler ErrorMessage; - /// /// Event raised to report a fatal error that stops the dumping operation and should call user's attention /// public event ErrorMessageHandler StoppingErrorMessage; @@ -72,5 +68,6 @@ namespace DiscImageChef.Core.Devices.Scanning /// Event raised to update the status of an undeterminate progress bar /// public event PulseProgressHandler PulseProgress; + public event ScanTimeHandler ScanTime; } } \ No newline at end of file diff --git a/DiscImageChef.Core/Devices/Scanning/SCSI.cs b/DiscImageChef.Core/Devices/Scanning/SCSI.cs index 48b71c8d2..a5aa73bf7 100644 --- a/DiscImageChef.Core/Devices/Scanning/SCSI.cs +++ b/DiscImageChef.Core/Devices/Scanning/SCSI.cs @@ -317,6 +317,7 @@ namespace DiscImageChef.Core.Devices.Scanning else if(cmdDuration >= 3) results.B += blocksToRead; else results.A += blocksToRead; + ScanTime?.Invoke(cmdDuration, blocksToRead); mhddLog.Write(i, cmdDuration); ibgLog.Write(i, currentSpeed * 1024); } @@ -409,6 +410,7 @@ namespace DiscImageChef.Core.Devices.Scanning else if(cmdDuration >= 3) results.B += blocksToRead; else results.A += blocksToRead; + ScanTime?.Invoke(cmdDuration, blocksToRead); mhddLog.Write(i, cmdDuration); ibgLog.Write(i, currentSpeed * 1024); } diff --git a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs index 247c8bb46..17f34426d 100644 --- a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs @@ -180,6 +180,7 @@ namespace DiscImageChef.Core.Devices.Scanning else if(duration >= 3) results.B += blocksToRead; else results.A += blocksToRead; + ScanTime?.Invoke(duration, blocksToRead); mhddLog.Write(i, duration); ibgLog.Write(i, currentSpeed * 1024); } diff --git a/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs b/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs index 09ff16893..03150ebc7 100644 --- a/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs +++ b/DiscImageChef.Gui/Forms/frmMediaScan.xeto.cs @@ -47,6 +47,8 @@ namespace DiscImageChef.Gui.Forms { string devicePath; + ScanResults localResults; + MediaScan scanner; public frmMediaScan(string devicePath, DeviceInfo deviceInfo, ScsiInfo scsiInfo = null) @@ -96,7 +98,9 @@ namespace DiscImageChef.Gui.Forms Statistics.AddDevice(dev); - scanner = new MediaScan(null, null, devicePath, dev); + localResults = new ScanResults(); + scanner = new MediaScan(null, null, devicePath, dev); + scanner.ScanTime += OnScanTime; ScanResults results = scanner.Scan(); Application.Instance.Invoke(() => @@ -143,6 +147,25 @@ namespace DiscImageChef.Gui.Forms }); } + void OnScanTime(double time, uint blocks) + { + Application.Instance.Invoke(() => + { + if(time < 3) localResults.A += blocks; + else if(time >= 3 && time < 10) localResults.B += blocks; + else if(time >= 10 && time < 50) localResults.C += blocks; + else if(time >= 50 && time < 150) localResults.D += blocks; + else if(time >= 150 && time < 500) localResults.E += blocks; + else if(time >= 500) localResults.F += blocks; + lblA.Text = $"{localResults.A} sectors took less than 3 ms."; + lblB.Text = $"{localResults.B} sectors took less than 10 ms but more than 3 ms."; + lblC.Text = $"{localResults.C} sectors took less than 50 ms but more than 10 ms."; + lblD.Text = $"{localResults.D} sectors took less than 150 ms but more than 50 ms."; + lblE.Text = $"{localResults.E} sectors took less than 500 ms but more than 150 ms."; + lblF.Text = $"{localResults.F} sectors took more than 500 ms."; + }); + } + #region XAML IDs Label lblTotalTime; Label lblAvgSpeed; diff --git a/DiscImageChef/Commands/MediaScan.cs b/DiscImageChef/Commands/MediaScan.cs index 1f178ab6b..da9b1e46b 100644 --- a/DiscImageChef/Commands/MediaScan.cs +++ b/DiscImageChef/Commands/MediaScan.cs @@ -113,7 +113,6 @@ namespace DiscImageChef.Commands MediaScan scanner = new MediaScan(mhddLogPath, ibgLogPath, devicePath, dev); scanner.UpdateStatus += Progress.UpdateStatus; - scanner.ErrorMessage += Progress.ErrorMessage; scanner.StoppingErrorMessage += Progress.ErrorMessage; scanner.UpdateProgress += Progress.UpdateProgress; scanner.PulseProgress += Progress.PulseProgress;