Ensure only unique bad blocks are saved in resume file. Fixes #381

This commit is contained in:
2020-11-03 01:40:10 +00:00
parent 73faa18421
commit 49dda86cd8
10 changed files with 33 additions and 15 deletions

View File

@@ -333,6 +333,8 @@ namespace Aaru.Core.Devices.Dumping
timeSpeedStart = DateTime.UtcNow; timeSpeedStart = DateTime.UtcNow;
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
end = DateTime.Now; end = DateTime.Now;
EndProgress?.Invoke(); EndProgress?.Invoke();
mhddLog.Close(); mhddLog.Close();
@@ -555,6 +557,8 @@ namespace Aaru.Core.Devices.Dumping
} }
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
end = DateTime.Now; end = DateTime.Now;
EndProgress?.Invoke(); EndProgress?.Invoke();
mhddLog.Close(); mhddLog.Close();

View File

@@ -671,6 +671,8 @@ namespace Aaru.Core.Devices.Dumping
EndProgress?.Invoke(); EndProgress?.Invoke();
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
if(!failedCrossingLeadOut) if(!failedCrossingLeadOut)
return; return;

View File

@@ -404,6 +404,8 @@ namespace Aaru.Core.Devices.Dumping
timeSpeedStart = DateTime.UtcNow; timeSpeedStart = DateTime.UtcNow;
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
end = DateTime.UtcNow; end = DateTime.UtcNow;
EndProgress?.Invoke(); EndProgress?.Invoke();
mhddLog.Close(); mhddLog.Close();
@@ -496,8 +498,7 @@ namespace Aaru.Core.Devices.Dumping
if(dcMode6?.Pages != null) if(dcMode6?.Pages != null)
foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage => foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage =>
modePage.Page == 0x01 && modePage.Page == 0x01 && modePage.Subpage == 0x00))
modePage.Subpage == 0x00))
currentModePage = modePage; currentModePage = modePage;
} }

View File

@@ -251,6 +251,8 @@ namespace Aaru.Core.Devices.Dumping
timeSpeedStart = DateTime.UtcNow; timeSpeedStart = DateTime.UtcNow;
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
end = DateTime.UtcNow; end = DateTime.UtcNow;
EndProgress?.Invoke(); EndProgress?.Invoke();
mhddLog.Close(); mhddLog.Close();
@@ -351,9 +353,7 @@ namespace Aaru.Core.Devices.Dumping
if(dcMode10.HasValue) if(dcMode10.HasValue)
foreach(Modes.ModePage modePage in dcMode10.Value.Pages.Where(modePage => foreach(Modes.ModePage modePage in dcMode10.Value.Pages.Where(modePage =>
modePage.Page == modePage.Page == 0x01 && modePage.Subpage == 0x00))
0x01 && modePage.
Subpage == 0x00))
currentModePage = modePage; currentModePage = modePage;
} }
} }
@@ -363,8 +363,7 @@ namespace Aaru.Core.Devices.Dumping
if(dcMode6.HasValue) if(dcMode6.HasValue)
foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage => foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage =>
modePage.Page == 0x01 && modePage.Page == 0x01 && modePage.Subpage == 0x00))
modePage.Subpage == 0x00))
currentModePage = modePage; currentModePage = modePage;
} }

View File

@@ -274,6 +274,8 @@ namespace Aaru.Core.Devices.Dumping
timeSpeedStart = DateTime.UtcNow; timeSpeedStart = DateTime.UtcNow;
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
end = DateTime.UtcNow; end = DateTime.UtcNow;
EndProgress?.Invoke(); EndProgress?.Invoke();
mhddLog.Close(); mhddLog.Close();
@@ -368,8 +370,7 @@ namespace Aaru.Core.Devices.Dumping
if(dcMode6.HasValue) if(dcMode6.HasValue)
foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage => foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage =>
modePage.Page == 0x01 && modePage.Page == 0x01 && modePage.Subpage == 0x00))
modePage.Subpage == 0x00))
currentModePage = modePage; currentModePage = modePage;
} }

View File

@@ -1019,8 +1019,9 @@ namespace Aaru.Core.Devices.Dumping
timeSpeedStart = DateTime.UtcNow; timeSpeedStart = DateTime.UtcNow;
} }
blocks = currentBlock + 1; _resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
end = DateTime.UtcNow; blocks = currentBlock + 1;
end = DateTime.UtcNow;
// If not aborted this is added at the end of medium // If not aborted this is added at the end of medium
if(_aborted) if(_aborted)

View File

@@ -25,6 +25,7 @@
// ****************************************************************************/ // ****************************************************************************/
using System; using System;
using System.Linq;
using Aaru.CommonTypes.Extents; using Aaru.CommonTypes.Extents;
using Aaru.Core.Logging; using Aaru.Core.Logging;
using Schemas; using Schemas;
@@ -93,6 +94,7 @@ namespace Aaru.Core.Devices.Dumping
if(_dev.Manufacturer.ToLowerInvariant() == "insite") if(_dev.Manufacturer.ToLowerInvariant() == "insite")
{ {
_resume.BadBlocks.Add(i); _resume.BadBlocks.Add(i);
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
_resume.NextBlock++; _resume.NextBlock++;
_aborted = true; _aborted = true;
@@ -141,6 +143,8 @@ namespace Aaru.Core.Devices.Dumping
timeSpeedStart = DateTime.UtcNow; timeSpeedStart = DateTime.UtcNow;
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
EndProgress?.Invoke(); EndProgress?.Invoke();
} }
} }

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Linq;
using Aaru.CommonTypes.Extents; using Aaru.CommonTypes.Extents;
using Aaru.Console; using Aaru.Console;
using Aaru.Core.Logging; using Aaru.Core.Logging;
@@ -240,6 +241,8 @@ namespace Aaru.Core.Devices.Dumping
} }
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
EndProgress?.Invoke(); EndProgress?.Invoke();
} }
} }

View File

@@ -409,6 +409,8 @@ namespace Aaru.Core.Devices.Dumping
timeSpeedStart = DateTime.UtcNow; timeSpeedStart = DateTime.UtcNow;
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
end = DateTime.Now; end = DateTime.Now;
EndProgress?.Invoke(); EndProgress?.Invoke();
mhddLog.Close(); mhddLog.Close();

View File

@@ -686,6 +686,8 @@ namespace Aaru.Core.Devices.Dumping
currentSector = extentEnd + 1; currentSector = extentEnd + 1;
} }
_resume.BadBlocks = _resume.BadBlocks.Distinct().ToList();
EndProgress?.Invoke(); EndProgress?.Invoke();
// Middle Zone D // Middle Zone D
@@ -976,8 +978,8 @@ namespace Aaru.Core.Devices.Dumping
Modes.DecodeMode10(readBuffer, PeripheralDeviceTypes.MultiMediaDevice); Modes.DecodeMode10(readBuffer, PeripheralDeviceTypes.MultiMediaDevice);
if(dcMode10.HasValue) if(dcMode10.HasValue)
foreach(var modePage in dcMode10.Value.Pages.Where(modePage => modePage.Page == 0x01 && foreach(Modes.ModePage modePage in dcMode10.Value.Pages.Where(modePage =>
modePage.Subpage == 0x00)) modePage.Page == 0x01 && modePage.Subpage == 0x00))
currentModePage = modePage; currentModePage = modePage;
} }
} }
@@ -988,8 +990,7 @@ namespace Aaru.Core.Devices.Dumping
if(dcMode6.HasValue) if(dcMode6.HasValue)
foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage => foreach(Modes.ModePage modePage in dcMode6.Value.Pages.Where(modePage =>
modePage.Page == 0x01 && modePage.Page == 0x01 && modePage.Subpage == 0x00))
modePage.Subpage == 0x00))
currentModePage = modePage; currentModePage = modePage;
} }