diff --git a/.idea/.idea.DiscImageChef/.idea/contentModel.xml b/.idea/.idea.DiscImageChef/.idea/contentModel.xml index ed679f441..d93498612 100644 --- a/.idea/.idea.DiscImageChef/.idea/contentModel.xml +++ b/.idea/.idea.DiscImageChef/.idea/contentModel.xml @@ -162,7 +162,6 @@ - @@ -665,6 +664,7 @@ + diff --git a/DiscImageChef.Core/Devices/Dumping/ResumeSupport.cs b/DiscImageChef.Core/Devices/Dumping/ResumeSupport.cs index 1b2ddb87f..a7b9db7ec 100644 --- a/DiscImageChef.Core/Devices/Dumping/ResumeSupport.cs +++ b/DiscImageChef.Core/Devices/Dumping/ResumeSupport.cs @@ -36,6 +36,7 @@ using DiscImageChef.Metadata; using Extents; using Schemas; using PlatformID = DiscImageChef.Interop.PlatformID; +using Version = DiscImageChef.Interop.Version; namespace DiscImageChef.Core.Devices.Dumping { @@ -62,9 +63,11 @@ namespace DiscImageChef.Core.Devices.Dumping /// If the provided resume does not correspond with the current in /// progress dump /// - internal static void Process(bool isLba, bool removable, ulong blocks, string manufacturer, string model, - string serial, PlatformID platform, ref Resume resume, - ref DumpHardwareType currentTry, ref ExtentsULong extents) + internal static void Process(bool isLba, bool removable, ulong blocks, + string manufacturer, string model, + string serial, PlatformID platform, ref Resume resume, + ref DumpHardwareType currentTry, + ref ExtentsULong extents) { if(resume != null) { @@ -98,15 +101,15 @@ namespace DiscImageChef.Core.Devices.Dumping if(oldtry.Software == null) throw new InvalidOperationException("Found corrupt resume file, cannot continue..."); - if(oldtry.Software.Name != "DiscImageChef" || + if(oldtry.Software.Name != "DiscImageChef" || oldtry.Software.OperatingSystem != platform.ToString() || - oldtry.Software.Version != Version.GetVersion()) continue; + oldtry.Software.Version != Version.GetVersion()) continue; if(removable && (oldtry.Manufacturer != manufacturer || oldtry.Model != model || - oldtry.Serial != serial)) continue; + oldtry.Serial != serial)) continue; currentTry = oldtry; - extents = ExtentsConverter.FromMetadata(currentTry.Extents); + extents = ExtentsConverter.FromMetadata(currentTry.Extents); break; } @@ -114,10 +117,10 @@ namespace DiscImageChef.Core.Devices.Dumping currentTry = new DumpHardwareType { - Software = Version.GetSoftwareType(platform), + Software = Version.GetSoftwareType(platform), Manufacturer = manufacturer, - Model = model, - Serial = serial + Model = model, + Serial = serial }; resume.Tries.Add(currentTry); extents = new ExtentsULong(); @@ -126,20 +129,20 @@ namespace DiscImageChef.Core.Devices.Dumping { resume = new Resume { - Tries = new List(), + Tries = new List(), CreationDate = DateTime.UtcNow, - BadBlocks = new List(), - LastBlock = blocks - 1 + BadBlocks = new List(), + LastBlock = blocks - 1 }; currentTry = new DumpHardwareType { - Software = Version.GetSoftwareType(platform), + Software = Version.GetSoftwareType(platform), Manufacturer = manufacturer, - Model = model, - Serial = serial + Model = model, + Serial = serial }; resume.Tries.Add(currentTry); - extents = new ExtentsULong(); + extents = new ExtentsULong(); resume.Removable = removable; } } diff --git a/DiscImageChef.Core/Devices/Dumping/SSC.cs b/DiscImageChef.Core/Devices/Dumping/SSC.cs index 427c27a06..e9d46b497 100644 --- a/DiscImageChef.Core/Devices/Dumping/SSC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SSC.cs @@ -43,6 +43,7 @@ using DiscImageChef.Devices; using DiscImageChef.Metadata; using Schemas; using MediaType = DiscImageChef.CommonTypes.MediaType; +using Version = DiscImageChef.Interop.Version; namespace DiscImageChef.Core.Devices.Dumping { @@ -58,21 +59,22 @@ namespace DiscImageChef.Core.Devices.Dumping /// Dump logger /// Partially filled initialized sidecar internal static void Dump(Device dev, string outputPrefix, string devicePath, ref CICMMetadataType sidecar, - ref Resume resume, ref DumpLog dumpLog) + ref Resume resume, + ref DumpLog dumpLog) { FixedSense? fxSense; - bool aborted; - bool sense; - ulong blocks = 0; - uint blockSize; - MediaType dskType = MediaType.Unknown; - DateTime start; - DateTime end; - double totalDuration = 0; - double totalChkDuration = 0; - double currentSpeed = 0; - double maxSpeed = double.MinValue; - double minSpeed = double.MaxValue; + bool aborted; + bool sense; + ulong blocks = 0; + uint blockSize; + MediaType dskType = MediaType.Unknown; + DateTime start; + DateTime end; + double totalDuration = 0; + double totalChkDuration = 0; + double currentSpeed = 0; + double maxSpeed = double.MinValue; + double minSpeed = double.MaxValue; dev.RequestSense(out byte[] senseBuf, dev.Timeout, out double duration); fxSense = Sense.DecodeFixed(senseBuf, out string strSense); @@ -87,8 +89,8 @@ namespace DiscImageChef.Core.Devices.Dumping } // Not in BOM/P - if(fxSense.HasValue && fxSense.Value.ASC == 0x00 && fxSense.Value.ASCQ != 0x00 && - fxSense.Value.ASCQ != 0x04 && fxSense.Value.SenseKey != SenseKeys.IllegalRequest) + if(fxSense.HasValue && fxSense.Value.ASC == 0x00 && fxSense.Value.ASCQ != 0x00 && + fxSense.Value.ASCQ != 0x04 && fxSense.Value.SenseKey != SenseKeys.IllegalRequest) { dumpLog.WriteLine("Rewinding, please wait..."); DicConsole.Write("Rewinding, please wait..."); @@ -104,13 +106,13 @@ namespace DiscImageChef.Core.Devices.Dumping fxSense = Sense.DecodeFixed(senseBuf, out strSense); } while(fxSense.HasValue && fxSense.Value.ASC == 0x00 && - (fxSense.Value.ASCQ == 0x1A || fxSense.Value.ASCQ != 0x04)); + (fxSense.Value.ASCQ == 0x1A || fxSense.Value.ASCQ != 0x04)); dev.RequestSense(out senseBuf, dev.Timeout, out duration); fxSense = Sense.DecodeFixed(senseBuf, out strSense); // And yet, did not rewind! - if(fxSense.HasValue && + if(fxSense.HasValue && (fxSense.Value.ASC == 0x00 && fxSense.Value.ASCQ != 0x04 || fxSense.Value.ASC != 0x00)) { DicConsole.WriteLine(); @@ -135,9 +137,9 @@ namespace DiscImageChef.Core.Devices.Dumping // Anyway, <=SCSI-1 tapes do not support partitions fxSense = Sense.DecodeFixed(senseBuf, out strSense); - if(fxSense.HasValue && (fxSense.Value.ASC == 0x20 && fxSense.Value.ASCQ != 0x00 || - fxSense.Value.ASC != 0x20 && fxSense.Value.SenseKey != SenseKeys.IllegalRequest) - ) + if(fxSense.HasValue && (fxSense.Value.ASC == 0x20 && fxSense.Value.ASCQ != 0x00 || + fxSense.Value.ASC != 0x20 && + fxSense.Value.SenseKey != SenseKeys.IllegalRequest)) { DicConsole.ErrorWriteLine("Could not get position. Sense follows..."); DicConsole.ErrorWriteLine("{0}", strSense); @@ -177,7 +179,7 @@ namespace DiscImageChef.Core.Devices.Dumping fxSense = Sense.DecodeFixed(senseBuf, out strSense); } while(fxSense.HasValue && fxSense.Value.ASC == 0x00 && - (fxSense.Value.ASCQ == 0x1A || fxSense.Value.ASCQ == 0x19)); + (fxSense.Value.ASCQ == 0x1A || fxSense.Value.ASCQ == 0x19)); // And yet, did not rewind! if(fxSense.HasValue && (fxSense.Value.ASC == 0x00 && fxSense.Value.ASCQ != 0x04 || @@ -217,9 +219,9 @@ namespace DiscImageChef.Core.Devices.Dumping } } - sidecar.BlockMedia = new BlockMediaType[1]; - sidecar.BlockMedia[0] = new BlockMediaType {SCSI = new SCSIType()}; - byte scsiMediumTypeTape = 0; + sidecar.BlockMedia = new BlockMediaType[1]; + sidecar.BlockMedia[0] = new BlockMediaType {SCSI = new SCSIType()}; + byte scsiMediumTypeTape = 0; byte scsiDensityCodeTape = 0; dumpLog.WriteLine("Requesting MODE SENSE (10)."); @@ -234,11 +236,11 @@ namespace DiscImageChef.Core.Devices.Dumping if(!sense && !dev.Error) if(Modes.DecodeMode10(cmdBuf, dev.ScsiType).HasValue) { - decMode = Modes.DecodeMode10(cmdBuf, dev.ScsiType); + decMode = Modes.DecodeMode10(cmdBuf, dev.ScsiType); sidecar.BlockMedia[0].SCSI.ModeSense10 = new DumpType { - Image = outputPrefix + ".modesense10.bin", - Size = cmdBuf.Length, + Image = outputPrefix + ".modesense10.bin", + Size = cmdBuf.Length, Checksums = Checksum.GetChecksums(cmdBuf).ToArray() }; DataFile.WriteTo("SCSI Dump", sidecar.BlockMedia[0].SCSI.ModeSense10.Image, cmdBuf); @@ -255,11 +257,11 @@ namespace DiscImageChef.Core.Devices.Dumping if(!sense && !dev.Error) if(Modes.DecodeMode6(cmdBuf, dev.ScsiType).HasValue) { - decMode = Modes.DecodeMode6(cmdBuf, dev.ScsiType); + decMode = Modes.DecodeMode6(cmdBuf, dev.ScsiType); sidecar.BlockMedia[0].SCSI.ModeSense = new DumpType { - Image = outputPrefix + ".modesense.bin", - Size = cmdBuf.Length, + Image = outputPrefix + ".modesense.bin", + Size = cmdBuf.Length, Checksums = Checksum.GetChecksums(cmdBuf).ToArray() }; DataFile.WriteTo("SCSI Dump", sidecar.BlockMedia[0].SCSI.ModeSense.Image, cmdBuf); @@ -271,7 +273,7 @@ namespace DiscImageChef.Core.Devices.Dumping scsiMediumTypeTape = (byte)decMode.Value.Header.MediumType; if(decMode.Value.Header.BlockDescriptors != null && decMode.Value.Header.BlockDescriptors.Length >= 1) scsiDensityCodeTape = (byte)decMode.Value.Header.BlockDescriptors[0].Density; - blockSize = decMode.Value.Header.BlockDescriptors[0].BlockLength; + blockSize = decMode.Value.Header.BlockDescriptors[0].BlockLength; dumpLog.WriteLine("Device reports {0} blocks ({1} bytes).", blocks, blocks * blockSize); } else blockSize = 1; @@ -282,21 +284,21 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.WriteLine("Media identified as {0}", dskType); - dumpLog.WriteLine("SCSI device type: {0}.", dev.ScsiType); - dumpLog.WriteLine("SCSI medium type: {0}.", scsiMediumTypeTape); - dumpLog.WriteLine("SCSI density type: {0}.", scsiDensityCodeTape); + dumpLog.WriteLine("SCSI device type: {0}.", dev.ScsiType); + dumpLog.WriteLine("SCSI medium type: {0}.", scsiMediumTypeTape); + dumpLog.WriteLine("SCSI density type: {0}.", scsiDensityCodeTape); dumpLog.WriteLine("Media identified as {0}.", dskType); - bool endOfMedia = false; - ulong currentBlock = 0; - ulong currentFile = 0; - byte currentPartition = 0; - byte totalPartitions = 1; // TODO: Handle partitions. - ulong currentSize = 0; + bool endOfMedia = false; + ulong currentBlock = 0; + ulong currentFile = 0; + byte currentPartition = 0; + byte totalPartitions = 1; // TODO: Handle partitions. + ulong currentSize = 0; ulong currentPartitionSize = 0; - ulong currentFileSize = 0; + ulong currentFileSize = 0; - bool fixedLen = false; + bool fixedLen = false; uint transferLen = blockSize; sense = dev.Read6(out cmdBuf, out senseBuf, false, fixedLen, transferLen, blockSize, dev.Timeout, @@ -323,10 +325,10 @@ namespace DiscImageChef.Core.Devices.Dumping } } - fixedLen = true; + fixedLen = true; transferLen = 1; - sense = dev.Read6(out cmdBuf, out senseBuf, false, fixedLen, transferLen, blockSize, - dev.Timeout, out duration); + sense = dev.Read6(out cmdBuf, out senseBuf, false, fixedLen, transferLen, blockSize, + dev.Timeout, out duration); if(sense) { DicConsole.WriteLine(); @@ -374,44 +376,44 @@ namespace DiscImageChef.Core.Devices.Dumping } List partitions = new List(); - List files = new List(); + List files = new List(); DicConsole.WriteLine(); DataFile dumpFile = new DataFile(outputPrefix + ".bin"); - Checksum dataChk = new Checksum(); - start = DateTime.UtcNow; - MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, 1); - IbgLog ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0008); + Checksum dataChk = new Checksum(); + start = DateTime.UtcNow; + MhddLog mhddLog = new MhddLog(outputPrefix + ".mhddlog.bin", dev, blocks, blockSize, 1); + IbgLog ibgLog = new IbgLog(outputPrefix + ".ibg", 0x0008); TapeFileType currentTapeFile = new TapeFileType { Image = new ImageType { - format = "BINARY", - offset = (long)currentSize, + format = "BINARY", + offset = (long)currentSize, offsetSpecified = true, - Value = outputPrefix + ".bin" + Value = outputPrefix + ".bin" }, - Sequence = (long)currentFile, + Sequence = (long)currentFile, StartBlock = (long)currentBlock, - BlockSize = blockSize + BlockSize = blockSize }; - Checksum fileChk = new Checksum(); + Checksum fileChk = new Checksum(); TapePartitionType currentTapePartition = new TapePartitionType { Image = new ImageType { - format = "BINARY", - offset = (long)currentSize, + format = "BINARY", + offset = (long)currentSize, offsetSpecified = true, - Value = outputPrefix + ".bin" + Value = outputPrefix + ".bin" }, - Sequence = currentPartition, + Sequence = currentPartition, StartBlock = (long)currentBlock }; Checksum partitionChk = new Checksum(); - aborted = false; + aborted = false; System.Console.CancelKeyPress += (sender, e) => e.Cancel = aborted = true; while(currentPartition < totalPartitions) @@ -427,10 +429,10 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.WriteLine(); DicConsole.WriteLine("Finished partition {0}", currentPartition); dumpLog.WriteLine("Finished partition {0}", currentPartition); - currentTapePartition.File = files.ToArray(); + currentTapePartition.File = files.ToArray(); currentTapePartition.Checksums = partitionChk.End().ToArray(); - currentTapePartition.EndBlock = (long)(currentBlock - 1); - currentTapePartition.Size = (long)currentPartitionSize; + currentTapePartition.EndBlock = (long)(currentBlock - 1); + currentTapePartition.Size = (long)currentPartitionSize; partitions.Add(currentTapePartition); currentPartition++; @@ -442,32 +444,32 @@ namespace DiscImageChef.Core.Devices.Dumping { Image = new ImageType { - format = "BINARY", - offset = (long)currentSize, + format = "BINARY", + offset = (long)currentSize, offsetSpecified = true, - Value = outputPrefix + ".bin" + Value = outputPrefix + ".bin" }, - Sequence = (long)currentFile, + Sequence = (long)currentFile, StartBlock = (long)currentBlock, - BlockSize = blockSize + BlockSize = blockSize }; - currentFileSize = 0; - fileChk = new Checksum(); - files = new List(); + currentFileSize = 0; + fileChk = new Checksum(); + files = new List(); currentTapePartition = new TapePartitionType { Image = new ImageType { - format = "BINARY", - offset = (long)currentSize, + format = "BINARY", + offset = (long)currentSize, offsetSpecified = true, - Value = outputPrefix + ".bin" + Value = outputPrefix + ".bin" }, - Sequence = currentPartition, + Sequence = currentPartition, StartBlock = (long)currentBlock }; currentPartitionSize = 0; - partitionChk = new Checksum(); + partitionChk = new Checksum(); DicConsole.WriteLine("Seeking to partition {0}", currentPartition); dev.Locate(out senseBuf, false, currentPartition, 0, dev.Timeout, out duration); totalDuration += duration; @@ -476,10 +478,10 @@ namespace DiscImageChef.Core.Devices.Dumping continue; } -#pragma warning disable RECS0018 // Comparison of floating point numbers with equality operator + #pragma warning disable RECS0018 // Comparison of floating point numbers with equality operator if(currentSpeed > maxSpeed && currentSpeed != 0) maxSpeed = currentSpeed; if(currentSpeed < minSpeed && currentSpeed != 0) minSpeed = currentSpeed; -#pragma warning restore RECS0018 // Comparison of floating point numbers with equality operator + #pragma warning restore RECS0018 // Comparison of floating point numbers with equality operator DicConsole.Write("\rReading block {0} ({1:F3} MiB/sec.)", currentBlock, currentSpeed); @@ -501,7 +503,8 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.WriteLine("Blocksize changed to {0} bytes at block {1}", blockSize, currentBlock); dumpLog.WriteLine("Blocksize changed to {0} bytes at block {1}", blockSize, currentBlock); - sense = dev.Space(out senseBuf, SscSpaceCodes.LogicalBlock, -1, dev.Timeout, out duration); + sense = dev.Space(out senseBuf, SscSpaceCodes.LogicalBlock, -1, dev.Timeout, + out duration); totalDuration += duration; if(sense) @@ -532,7 +535,7 @@ namespace DiscImageChef.Core.Devices.Dumping } // For sure this is an end-of-tape/partition - if(fxSense.Value.ASC == 0x00 && + if(fxSense.Value.ASC == 0x00 && (fxSense.Value.ASCQ == 0x02 || fxSense.Value.ASCQ == 0x05 || fxSense.Value.EOM)) { // TODO: Detect end of partition @@ -550,7 +553,7 @@ namespace DiscImageChef.Core.Devices.Dumping if((fxSense.Value.SenseKey == SenseKeys.NoSense || fxSense.Value.SenseKey == SenseKeys.RecoveredError) && - (fxSense.Value.ASCQ == 0x02 || fxSense.Value.ASCQ == 0x05 || fxSense.Value.EOM)) + (fxSense.Value.ASCQ == 0x02 || fxSense.Value.ASCQ == 0x05 || fxSense.Value.EOM)) { // TODO: Detect end of partition endOfMedia = true; @@ -560,11 +563,11 @@ namespace DiscImageChef.Core.Devices.Dumping if((fxSense.Value.SenseKey == SenseKeys.NoSense || fxSense.Value.SenseKey == SenseKeys.RecoveredError) && - (fxSense.Value.ASCQ == 0x01 || fxSense.Value.Filemark)) + (fxSense.Value.ASCQ == 0x01 || fxSense.Value.Filemark)) { currentTapeFile.Checksums = fileChk.End().ToArray(); - currentTapeFile.EndBlock = (long)(currentBlock - 1); - currentTapeFile.Size = (long)currentFileSize; + currentTapeFile.EndBlock = (long)(currentBlock - 1); + currentTapeFile.Size = (long)currentFileSize; files.Add(currentTapeFile); currentFile++; @@ -572,17 +575,17 @@ namespace DiscImageChef.Core.Devices.Dumping { Image = new ImageType { - format = "BINARY", - offset = (long)currentSize, + format = "BINARY", + offset = (long)currentSize, offsetSpecified = true, - Value = outputPrefix + ".bin" + Value = outputPrefix + ".bin" }, - Sequence = (long)currentFile, + Sequence = (long)currentFile, StartBlock = (long)currentBlock, - BlockSize = blockSize + BlockSize = blockSize }; currentFileSize = 0; - fileChk = new Checksum(); + fileChk = new Checksum(); DicConsole.WriteLine(); DicConsole.WriteLine("Changed to file {0} at block {1}", currentFile, currentBlock); @@ -608,18 +611,19 @@ namespace DiscImageChef.Core.Devices.Dumping dataChk.Update(cmdBuf); fileChk.Update(cmdBuf); partitionChk.Update(cmdBuf); - DateTime chkEnd = DateTime.UtcNow; - double chkDuration = (chkEnd - chkStart).TotalMilliseconds; - totalChkDuration += chkDuration; + DateTime chkEnd = DateTime.UtcNow; + double chkDuration = (chkEnd - chkStart).TotalMilliseconds; + totalChkDuration += chkDuration; if(currentBlock % 10 == 0) { - double newSpeed = blockSize / (double)1048576 / (duration / 1000); + double newSpeed = blockSize / (double)1048576 / (duration / 1000); if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } + currentBlock++; - currentSize += blockSize; - currentFileSize += blockSize; + currentSize += blockSize; + currentFileSize += blockSize; currentPartitionSize += blockSize; } @@ -628,8 +632,10 @@ namespace DiscImageChef.Core.Devices.Dumping end = DateTime.UtcNow; mhddLog.Close(); ibgLog.Close(dev, blocks, blockSize, (end - start).TotalSeconds, currentSpeed * 1024, - blockSize * (double)(blocks + 1) / 1024 / (totalDuration / 1000), devicePath); - dumpLog.WriteLine("Dump finished in {0} seconds.", (end - start).TotalSeconds); + blockSize * (double)(blocks + 1) / + 1024 / (totalDuration / 1000), devicePath); + dumpLog.WriteLine("Dump finished in {0} seconds.", + (end - start).TotalSeconds); dumpLog.WriteLine("Average dump speed {0:F3} KiB/sec.", (double)blockSize * (double)(blocks + 1) / 1024 / (totalDuration / 1000)); dumpLog.WriteLine("Average checksum speed {0:F3} KiB/sec.", @@ -642,28 +648,30 @@ namespace DiscImageChef.Core.Devices.Dumping DicConsole.WriteLine("Fastest speed burst: {0:F3} MiB/sec.", maxSpeed); DicConsole.WriteLine("Slowest speed burst: {0:F3} MiB/sec.", minSpeed); - sidecar.BlockMedia[0].Checksums = dataChk.End().ToArray(); + sidecar.BlockMedia[0].Checksums = dataChk.End().ToArray(); sidecar.BlockMedia[0].Dimensions = Dimensions.DimensionsFromMediaType(dskType); Metadata.MediaType.MediaTypeToString(dskType, out string xmlDskTyp, out string xmlDskSubTyp); - sidecar.BlockMedia[0].DiskType = xmlDskTyp; + sidecar.BlockMedia[0].DiskType = xmlDskTyp; sidecar.BlockMedia[0].DiskSubType = xmlDskSubTyp; // TODO: Implement device firmware revision sidecar.BlockMedia[0].Image = new ImageType { format = "Raw disk image (sector by sector copy)", - Value = outputPrefix + ".bin" + Value = outputPrefix + ".bin" }; - sidecar.BlockMedia[0].LogicalBlocks = (long)blocks; - sidecar.BlockMedia[0].Size = (long)currentSize; - sidecar.BlockMedia[0].DumpHardwareArray = new DumpHardwareType[1]; - sidecar.BlockMedia[0].DumpHardwareArray[0] = new DumpHardwareType {Extents = new ExtentType[1]}; - sidecar.BlockMedia[0].DumpHardwareArray[0].Extents[0] = new ExtentType {Start = 0, End = blocks - 1}; + sidecar.BlockMedia[0].LogicalBlocks = (long)blocks; + sidecar.BlockMedia[0].Size = (long)currentSize; + sidecar.BlockMedia[0].DumpHardwareArray = new DumpHardwareType[1]; + sidecar.BlockMedia[0].DumpHardwareArray[0] = + new DumpHardwareType {Extents = new ExtentType[1]}; + sidecar.BlockMedia[0].DumpHardwareArray[0].Extents[0] = + new ExtentType {Start = 0, End = blocks - 1}; sidecar.BlockMedia[0].DumpHardwareArray[0].Manufacturer = dev.Manufacturer; - sidecar.BlockMedia[0].DumpHardwareArray[0].Model = dev.Model; - sidecar.BlockMedia[0].DumpHardwareArray[0].Revision = dev.Revision; - sidecar.BlockMedia[0].DumpHardwareArray[0].Serial = dev.Serial; - sidecar.BlockMedia[0].DumpHardwareArray[0].Software = Version.GetSoftwareType(dev.PlatformId); - sidecar.BlockMedia[0].TapeInformation = partitions.ToArray(); + sidecar.BlockMedia[0].DumpHardwareArray[0].Model = dev.Model; + sidecar.BlockMedia[0].DumpHardwareArray[0].Revision = dev.Revision; + sidecar.BlockMedia[0].DumpHardwareArray[0].Serial = dev.Serial; + sidecar.BlockMedia[0].DumpHardwareArray[0].Software = Version.GetSoftwareType(dev.PlatformId); + sidecar.BlockMedia[0].TapeInformation = partitions.ToArray(); if(!aborted) { diff --git a/DiscImageChef.Core/DiscImageChef.Core.csproj b/DiscImageChef.Core/DiscImageChef.Core.csproj index 65fd2a96a..3b3a24601 100644 --- a/DiscImageChef.Core/DiscImageChef.Core.csproj +++ b/DiscImageChef.Core/DiscImageChef.Core.csproj @@ -70,7 +70,6 @@ - diff --git a/DiscImageChef.Core/Logging/DumpLog.cs b/DiscImageChef.Core/Logging/DumpLog.cs index d14f40336..663468d92 100644 --- a/DiscImageChef.Core/Logging/DumpLog.cs +++ b/DiscImageChef.Core/Logging/DumpLog.cs @@ -36,6 +36,7 @@ using System.Reflection; using DiscImageChef.Devices; using DiscImageChef.Interop; using PlatformID = DiscImageChef.Interop.PlatformID; +using Version = DiscImageChef.Interop.Version; namespace DiscImageChef.Core.Logging { @@ -59,60 +60,63 @@ namespace DiscImageChef.Core.Logging logSw.WriteLine("Start logging at {0}", DateTime.Now); - PlatformID platId = DetectOS.GetRealPlatformID(); - string platVer = DetectOS.GetVersion(); - Type monoRunType = Type.GetType("Mono.Runtime"); + PlatformID platId = DetectOS.GetRealPlatformID(); + string platVer = DetectOS.GetVersion(); + Type monoRunType = Type.GetType("Mono.Runtime"); logSw.WriteLine("################# System information #################"); logSw.WriteLine("{0} {1} ({2}-bit)", DetectOS.GetPlatformName(platId, platVer), platVer, Environment.Is64BitOperatingSystem ? 64 : 32); if(monoRunType != null) { - string monoVer = "unknown version"; + string monoVer = "unknown version"; MethodInfo monoDisplayName = monoRunType.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); if(monoDisplayName != null) monoVer = (string)monoDisplayName.Invoke(null, null); logSw.WriteLine("Mono {0}", monoVer); } else logSw.WriteLine(".NET Framework {0}", Environment.Version); + logSw.WriteLine(); logSw.WriteLine("################# Program information ################"); logSw.WriteLine("DiscImageChef {0} running in {1}-bit", Version.GetVersion(), Environment.Is64BitProcess ? 64 : 32); -#if DEBUG + #if DEBUG logSw.WriteLine("DEBUG version"); -#endif + #endif logSw.WriteLine("Command line: {0}", Environment.CommandLine); logSw.WriteLine(); logSw.WriteLine("################# Device information #################"); - logSw.WriteLine("Manufacturer: {0}", dev.Manufacturer); - logSw.WriteLine("Model: {0}", dev.Model); - logSw.WriteLine("Firmware revision: {0}", dev.Revision); - logSw.WriteLine("Serial number: {0}", dev.Serial); - logSw.WriteLine("Removable device: {0}", dev.IsRemovable); - logSw.WriteLine("Device type: {0}", dev.Type); + logSw.WriteLine("Manufacturer: {0}", dev.Manufacturer); + logSw.WriteLine("Model: {0}", dev.Model); + logSw.WriteLine("Firmware revision: {0}", dev.Revision); + logSw.WriteLine("Serial number: {0}", dev.Serial); + logSw.WriteLine("Removable device: {0}", dev.IsRemovable); + logSw.WriteLine("Device type: {0}", dev.Type); logSw.WriteLine("CompactFlash device: {0}", dev.IsCompactFlash); - logSw.WriteLine("PCMCIA device: {0}", dev.IsPcmcia); - logSw.WriteLine("USB device: {0}", dev.IsUsb); + logSw.WriteLine("PCMCIA device: {0}", dev.IsPcmcia); + logSw.WriteLine("USB device: {0}", dev.IsUsb); if(dev.IsUsb) { - logSw.WriteLine("USB manufacturer: {0}", dev.UsbManufacturerString); - logSw.WriteLine("USB product: {0}", dev.UsbProductString); - logSw.WriteLine("USB serial: {0}", dev.UsbSerialString); - logSw.WriteLine("USB vendor ID: {0:X4}h", dev.UsbVendorId); + logSw.WriteLine("USB manufacturer: {0}", dev.UsbManufacturerString); + logSw.WriteLine("USB product: {0}", dev.UsbProductString); + logSw.WriteLine("USB serial: {0}", dev.UsbSerialString); + logSw.WriteLine("USB vendor ID: {0:X4}h", dev.UsbVendorId); logSw.WriteLine("USB product ID: {0:X4}h", dev.UsbProductId); } + logSw.WriteLine("FireWire device: {0}", dev.IsFireWire); if(dev.IsFireWire) { - logSw.WriteLine("FireWire vendor: {0}", dev.FireWireVendorName); - logSw.WriteLine("FireWire model: {0}", dev.FireWireModelName); - logSw.WriteLine("FireWire GUID: 0x{0:X16}", dev.FireWireGuid); - logSw.WriteLine("FireWire vendor ID: 0x{0:X8}", dev.FireWireVendor); + logSw.WriteLine("FireWire vendor: {0}", dev.FireWireVendorName); + logSw.WriteLine("FireWire model: {0}", dev.FireWireModelName); + logSw.WriteLine("FireWire GUID: 0x{0:X16}", dev.FireWireGuid); + logSw.WriteLine("FireWire vendor ID: 0x{0:X8}", dev.FireWireVendor); logSw.WriteLine("FireWire product ID: 0x{0:X8}", dev.FireWireModel); } + logSw.WriteLine(); logSw.WriteLine("######################################################"); diff --git a/DiscImageChef.Core/Statistics.cs b/DiscImageChef.Core/Statistics.cs index 1cfa7123c..efe808bc2 100644 --- a/DiscImageChef.Core/Statistics.cs +++ b/DiscImageChef.Core/Statistics.cs @@ -41,6 +41,7 @@ using DiscImageChef.Devices; using DiscImageChef.Interop; using DiscImageChef.Metadata; using MediaType = DiscImageChef.CommonTypes.MediaType; +using Version = DiscImageChef.Interop.Version; namespace DiscImageChef.Core { @@ -69,7 +70,7 @@ namespace DiscImageChef.Core { if(File.Exists(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml"))) { - AllStats = new Stats(); + AllStats = new Stats(); CurrentStats = new Stats { OperatingSystems = @@ -77,21 +78,21 @@ namespace DiscImageChef.Core { new OsStats { - name = DetectOS.GetRealPlatformID().ToString(), - Value = 1, + name = DetectOS.GetRealPlatformID().ToString(), + Value = 1, version = DetectOS.GetVersion() } }, Versions = new List {new NameValueStats {name = Version.GetVersion(), Value = 1}} }; XmlSerializer xs = new XmlSerializer(AllStats.GetType()); - StreamReader sr = new StreamReader(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml")); - AllStats = (Stats)xs.Deserialize(sr); + StreamReader sr = new StreamReader(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml")); + AllStats = (Stats)xs.Deserialize(sr); sr.Close(); } else if(Settings.Settings.Current.Stats != null) { - AllStats = new Stats(); + AllStats = new Stats(); CurrentStats = new Stats { OperatingSystems = @@ -99,8 +100,8 @@ namespace DiscImageChef.Core { new OsStats { - name = DetectOS.GetRealPlatformID().ToString(), - Value = 1, + name = DetectOS.GetRealPlatformID().ToString(), + Value = 1, version = DetectOS.GetVersion() } }, @@ -109,7 +110,7 @@ namespace DiscImageChef.Core } else { - AllStats = null; + AllStats = null; CurrentStats = null; } } @@ -126,12 +127,13 @@ namespace DiscImageChef.Core long count = 0; OsStats old = null; - foreach(OsStats nvs in - AllStats.OperatingSystems.Where(nvs => nvs.name == DetectOS.GetRealPlatformID().ToString() && - nvs.version == DetectOS.GetVersion())) + foreach(OsStats nvs in AllStats.OperatingSystems.Where(nvs => + nvs.name == DetectOS + .GetRealPlatformID().ToString() && + nvs.version == DetectOS.GetVersion())) { count = nvs.Value + 1; - old = nvs; + old = nvs; break; } @@ -140,12 +142,13 @@ namespace DiscImageChef.Core count++; AllStats.OperatingSystems.Add(new OsStats { - name = DetectOS.GetRealPlatformID().ToString(), - Value = count, + name = DetectOS.GetRealPlatformID().ToString(), + Value = count, version = DetectOS.GetVersion() }); } - else if(CurrentStats != null) AllStats.OperatingSystems = CurrentStats.OperatingSystems; + else if(CurrentStats != null) + AllStats.OperatingSystems = CurrentStats.OperatingSystems; if(AllStats.Versions != null) { @@ -155,7 +158,7 @@ namespace DiscImageChef.Core foreach(NameValueStats nvs in AllStats.Versions.Where(nvs => nvs.name == Version.GetVersion())) { count = nvs.Value + 1; - old = nvs; + old = nvs; break; } @@ -164,7 +167,8 @@ namespace DiscImageChef.Core count++; AllStats.Versions.Add(new NameValueStats {name = Version.GetVersion(), Value = count}); } - else if(CurrentStats != null) AllStats.Versions = CurrentStats.Versions; + else if(CurrentStats != null) + AllStats.Versions = CurrentStats.Versions; FileStream fs = new FileStream(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml"), FileMode.Create); @@ -208,31 +212,32 @@ namespace DiscImageChef.Core Stats stats = new Stats(); // This can execute before debug console has been inited -#if DEBUG + #if DEBUG System.Console.WriteLine("Uploading partial statistics file {0}", statsFile); -#else + #else DiscImageChef.Console.DicConsole.DebugWriteLine("Submit stats", "Uploading partial statistics file {0}", statsFile); -#endif + #endif - FileStream fs = new FileStream(statsFile, FileMode.Open, FileAccess.Read); + FileStream fs = new FileStream(statsFile, FileMode.Open, FileAccess.Read); XmlSerializer xs = new XmlSerializer(stats.GetType()); xs.Deserialize(fs); // Just to test validity of stats file fs.Seek(0, SeekOrigin.Begin); - WebRequest request = WebRequest.Create("http://discimagechef.claunia.com/api/uploadstats"); + WebRequest request = + WebRequest.Create("http://discimagechef.claunia.com/api/uploadstats"); ((HttpWebRequest)request).UserAgent = $"DiscImageChef {typeof(Version).Assembly.GetName().Version}"; - request.Method = "POST"; + request.Method = "POST"; request.ContentLength = fs.Length; - request.ContentType = "application/xml"; - Stream reqStream = request.GetRequestStream(); + request.ContentType = "application/xml"; + Stream reqStream = request.GetRequestStream(); fs.CopyTo(reqStream); reqStream.Close(); WebResponse response = request.GetResponse(); if(((HttpWebResponse)response).StatusCode != HttpStatusCode.OK) return; - Stream data = response.GetResponseStream(); + Stream data = response.GetResponseStream(); StreamReader reader = new StreamReader(data ?? throw new InvalidOperationException()); string responseFromServer = reader.ReadToEnd(); @@ -248,12 +253,12 @@ namespace DiscImageChef.Core } catch { -#if DEBUG + #if DEBUG submitStatsLock = false; throw; -#else + #else continue; -#endif + #endif } submitStatsLock = false; @@ -366,7 +371,7 @@ namespace DiscImageChef.Core { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.FilesystemStats) return; - if(AllStats.Filesystems == null) AllStats.Filesystems = new List(); + if(AllStats.Filesystems == null) AllStats.Filesystems = new List(); if(CurrentStats.Filesystems == null) CurrentStats.Filesystems = new List(); NameValueStats old = AllStats.Filesystems.FirstOrDefault(nvs => nvs.name == filesystem); @@ -374,15 +379,16 @@ namespace DiscImageChef.Core NameValueStats nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; AllStats.Filesystems.Remove(old); } else { - nw.name = filesystem; + nw.name = filesystem; nw.Value = 1; } + AllStats.Filesystems.Add(nw); old = CurrentStats.Filesystems.FirstOrDefault(nvs => nvs.name == filesystem); @@ -390,15 +396,16 @@ namespace DiscImageChef.Core nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; CurrentStats.Filesystems.Remove(old); } else { - nw.name = filesystem; + nw.name = filesystem; nw.Value = 1; } + CurrentStats.Filesystems.Add(nw); } @@ -410,7 +417,7 @@ namespace DiscImageChef.Core { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.PartitionStats) return; - if(AllStats.Partitions == null) AllStats.Partitions = new List(); + if(AllStats.Partitions == null) AllStats.Partitions = new List(); if(CurrentStats.Partitions == null) CurrentStats.Partitions = new List(); NameValueStats old = AllStats.Partitions.FirstOrDefault(nvs => nvs.name == partition); @@ -418,15 +425,16 @@ namespace DiscImageChef.Core NameValueStats nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; AllStats.Partitions.Remove(old); } else { - nw.name = partition; + nw.name = partition; nw.Value = 1; } + AllStats.Partitions.Add(nw); old = CurrentStats.Partitions.FirstOrDefault(nvs => nvs.name == partition); @@ -434,15 +442,16 @@ namespace DiscImageChef.Core nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; CurrentStats.Partitions.Remove(old); } else { - nw.name = partition; + nw.name = partition; nw.Value = 1; } + CurrentStats.Partitions.Add(nw); } @@ -454,7 +463,7 @@ namespace DiscImageChef.Core { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.FilterStats) return; - if(AllStats.Filters == null) AllStats.Filters = new List(); + if(AllStats.Filters == null) AllStats.Filters = new List(); if(CurrentStats.Filters == null) CurrentStats.Filters = new List(); NameValueStats old = AllStats.Filters.FirstOrDefault(nvs => nvs.name == format); @@ -462,15 +471,16 @@ namespace DiscImageChef.Core NameValueStats nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; AllStats.Filters.Remove(old); } else { - nw.name = format; + nw.name = format; nw.Value = 1; } + AllStats.Filters.Add(nw); old = CurrentStats.Filters.FirstOrDefault(nvs => nvs.name == format); @@ -478,15 +488,16 @@ namespace DiscImageChef.Core nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; CurrentStats.Filters.Remove(old); } else { - nw.name = format; + nw.name = format; nw.Value = 1; } + CurrentStats.Filters.Add(nw); } @@ -498,7 +509,7 @@ namespace DiscImageChef.Core { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaImageStats) return; - if(AllStats.MediaImages == null) AllStats.MediaImages = new List(); + if(AllStats.MediaImages == null) AllStats.MediaImages = new List(); if(CurrentStats.MediaImages == null) CurrentStats.MediaImages = new List(); NameValueStats old = AllStats.MediaImages.FirstOrDefault(nvs => nvs.name == format); @@ -506,15 +517,16 @@ namespace DiscImageChef.Core NameValueStats nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; AllStats.MediaImages.Remove(old); } else { - nw.name = format; + nw.name = format; nw.Value = 1; } + AllStats.MediaImages.Add(nw); old = CurrentStats.MediaImages.FirstOrDefault(nvs => nvs.name == format); @@ -522,15 +534,16 @@ namespace DiscImageChef.Core nw = new NameValueStats(); if(old != null) { - nw.name = old.name; + nw.name = old.name; nw.Value = old.Value + 1; CurrentStats.MediaImages.Remove(old); } else { - nw.name = format; + nw.name = format; nw.Value = 1; } + CurrentStats.MediaImages.Add(nw); } @@ -542,42 +555,46 @@ namespace DiscImageChef.Core { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.DeviceStats) return; - if(AllStats.Devices == null) AllStats.Devices = new List(); + if(AllStats.Devices == null) AllStats.Devices = new List(); if(CurrentStats.Devices == null) CurrentStats.Devices = new List(); string deviceBus; if(dev.IsUsb) deviceBus = "USB"; - else if(dev.IsFireWire) deviceBus = "FireWire"; - else deviceBus = dev.Type.ToString(); + else if(dev.IsFireWire) + deviceBus = "FireWire"; + else + deviceBus = dev.Type.ToString(); DeviceStats old = AllStats.Devices.FirstOrDefault(ds => ds.Manufacturer == dev.Manufacturer && - ds.Model == dev.Model && - ds.Revision == dev.Revision && ds.Bus == deviceBus); + ds.Model == dev.Model && + ds.Revision == dev.Revision && + ds.Bus == deviceBus); if(old != null) AllStats.Devices.Remove(old); DeviceStats nw = new DeviceStats { - Model = dev.Model, - Manufacturer = dev.Manufacturer, - Revision = dev.Revision, - Bus = deviceBus, + Model = dev.Model, + Manufacturer = dev.Manufacturer, + Revision = dev.Revision, + Bus = deviceBus, ManufacturerSpecified = true }; AllStats.Devices.Add(nw); old = CurrentStats.Devices.FirstOrDefault(ds => ds.Manufacturer == dev.Manufacturer && - ds.Model == dev.Model && ds.Revision == dev.Revision && - ds.Bus == deviceBus); + ds.Model == dev.Model && + ds.Revision == dev.Revision && + ds.Bus == deviceBus); if(old != null) CurrentStats.Devices.Remove(old); nw = new DeviceStats { - Model = dev.Model, - Manufacturer = dev.Manufacturer, - Revision = dev.Revision, - Bus = deviceBus, + Model = dev.Model, + Manufacturer = dev.Manufacturer, + Revision = dev.Revision, + Bus = deviceBus, ManufacturerSpecified = true }; CurrentStats.Devices.Add(nw); @@ -592,7 +609,7 @@ namespace DiscImageChef.Core { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaStats) return; - if(AllStats.Medias == null) AllStats.Medias = new List(); + if(AllStats.Medias == null) AllStats.Medias = new List(); if(CurrentStats.Medias == null) CurrentStats.Medias = new List(); MediaStats old = AllStats.Medias.FirstOrDefault(ms => ms.real == real && ms.type == type.ToString()); @@ -600,17 +617,18 @@ namespace DiscImageChef.Core MediaStats nw = new MediaStats(); if(old != null) { - nw.type = old.type; - nw.real = old.real; + nw.type = old.type; + nw.real = old.real; nw.Value = old.Value + 1; AllStats.Medias.Remove(old); } else { - nw.type = type.ToString(); - nw.real = real; + nw.type = type.ToString(); + nw.real = real; nw.Value = 1; } + AllStats.Medias.Add(nw); old = CurrentStats.Medias.FirstOrDefault(ms => ms.real == real && ms.type == type.ToString()); @@ -618,17 +636,18 @@ namespace DiscImageChef.Core nw = new MediaStats(); if(old != null) { - nw.type = old.type; - nw.real = old.real; + nw.type = old.type; + nw.real = old.real; nw.Value = old.Value + 1; CurrentStats.Medias.Remove(old); } else { - nw.type = type.ToString(); - nw.real = real; + nw.type = type.ToString(); + nw.real = real; nw.Value = 1; } + CurrentStats.Medias.Add(nw); } @@ -642,33 +661,33 @@ namespace DiscImageChef.Core /// Maximum used memory /// Minimum used memory public static void AddBenchmark(Dictionary checksums, double entropy, double all, - double sequential, long maxMemory, long minMemory) + double sequential, long maxMemory, long minMemory) { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.BenchmarkStats) return; CurrentStats.Benchmark = new BenchmarkStats {Checksum = new List()}; - AllStats.Benchmark = new BenchmarkStats {Checksum = new List()}; + AllStats.Benchmark = new BenchmarkStats {Checksum = new List()}; foreach(ChecksumStats st in checksums.Select(kvp => new ChecksumStats { algorithm = kvp.Key, - Value = kvp.Value + Value = kvp.Value })) { CurrentStats.Benchmark.Checksum.Add(st); AllStats.Benchmark.Checksum.Add(st); } - CurrentStats.Benchmark.All = all; - CurrentStats.Benchmark.Entropy = entropy; - CurrentStats.Benchmark.MaxMemory = maxMemory; - CurrentStats.Benchmark.MinMemory = minMemory; + CurrentStats.Benchmark.All = all; + CurrentStats.Benchmark.Entropy = entropy; + CurrentStats.Benchmark.MaxMemory = maxMemory; + CurrentStats.Benchmark.MinMemory = minMemory; CurrentStats.Benchmark.Sequential = sequential; - AllStats.Benchmark.All = all; - AllStats.Benchmark.Entropy = entropy; - AllStats.Benchmark.MaxMemory = maxMemory; - AllStats.Benchmark.MinMemory = minMemory; + AllStats.Benchmark.All = all; + AllStats.Benchmark.Entropy = entropy; + AllStats.Benchmark.MaxMemory = maxMemory; + AllStats.Benchmark.MinMemory = minMemory; AllStats.Benchmark.Sequential = sequential; } @@ -685,7 +704,7 @@ namespace DiscImageChef.Core if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.VerifyStats) return; if(CurrentStats.Verify == null) - CurrentStats.Verify = + CurrentStats.Verify = new VerifyStats {MediaImages = new VerifiedItems(), Sectors = new ScannedSectors()}; if(AllStats.Verify == null) @@ -703,15 +722,15 @@ namespace DiscImageChef.Core AllStats.Verify.MediaImages.Failed++; } - CurrentStats.Verify.Sectors.Correct += correct; - CurrentStats.Verify.Sectors.Error += failed; + CurrentStats.Verify.Sectors.Correct += correct; + CurrentStats.Verify.Sectors.Error += failed; CurrentStats.Verify.Sectors.Unverifiable += unknown; - CurrentStats.Verify.Sectors.Total += total; + CurrentStats.Verify.Sectors.Total += total; - AllStats.Verify.Sectors.Correct += correct; - AllStats.Verify.Sectors.Error += failed; + AllStats.Verify.Sectors.Correct += correct; + AllStats.Verify.Sectors.Error += failed; AllStats.Verify.Sectors.Unverifiable += unknown; - AllStats.Verify.Sectors.Total += total; + AllStats.Verify.Sectors.Total += total; } /// @@ -726,8 +745,9 @@ namespace DiscImageChef.Core /// Total sectors /// Errored sectors /// Correct sectors - public static void AddMediaScan(long lessThan3ms, long lessThan10ms, long lessThan50ms, long lessThan150ms, - long lessThan500ms, long moreThan500ms, long total, long error, long correct) + public static void AddMediaScan(long lessThan3ms, long lessThan10ms, long lessThan50ms, long lessThan150ms, + long lessThan500ms, long moreThan500ms, long total, long error, + long correct) { if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaScanStats) return; @@ -737,22 +757,22 @@ namespace DiscImageChef.Core if(AllStats.MediaScan == null) AllStats.MediaScan = new MediaScanStats {Sectors = new ScannedSectors(), Times = new TimeStats()}; - CurrentStats.MediaScan.Sectors.Correct += correct; - CurrentStats.MediaScan.Sectors.Error += error; - CurrentStats.MediaScan.Sectors.Total += total; - CurrentStats.MediaScan.Times.LessThan3ms += lessThan3ms; - CurrentStats.MediaScan.Times.LessThan10ms += lessThan10ms; - CurrentStats.MediaScan.Times.LessThan50ms += lessThan50ms; + CurrentStats.MediaScan.Sectors.Correct += correct; + CurrentStats.MediaScan.Sectors.Error += error; + CurrentStats.MediaScan.Sectors.Total += total; + CurrentStats.MediaScan.Times.LessThan3ms += lessThan3ms; + CurrentStats.MediaScan.Times.LessThan10ms += lessThan10ms; + CurrentStats.MediaScan.Times.LessThan50ms += lessThan50ms; CurrentStats.MediaScan.Times.LessThan150ms += lessThan150ms; CurrentStats.MediaScan.Times.LessThan500ms += lessThan500ms; CurrentStats.MediaScan.Times.MoreThan500ms += moreThan500ms; - AllStats.MediaScan.Sectors.Correct += correct; - AllStats.MediaScan.Sectors.Error += error; - AllStats.MediaScan.Sectors.Total += total; - AllStats.MediaScan.Times.LessThan3ms += lessThan3ms; - AllStats.MediaScan.Times.LessThan10ms += lessThan10ms; - AllStats.MediaScan.Times.LessThan50ms += lessThan50ms; + AllStats.MediaScan.Sectors.Correct += correct; + AllStats.MediaScan.Sectors.Error += error; + AllStats.MediaScan.Sectors.Total += total; + AllStats.MediaScan.Times.LessThan3ms += lessThan3ms; + AllStats.MediaScan.Times.LessThan10ms += lessThan10ms; + AllStats.MediaScan.Times.LessThan50ms += lessThan50ms; AllStats.MediaScan.Times.LessThan150ms += lessThan150ms; AllStats.MediaScan.Times.LessThan500ms += lessThan500ms; AllStats.MediaScan.Times.MoreThan500ms += moreThan500ms; diff --git a/DiscImageChef.Interop/DiscImageChef.Interop.csproj b/DiscImageChef.Interop/DiscImageChef.Interop.csproj index e4affb38d..c38d89709 100644 --- a/DiscImageChef.Interop/DiscImageChef.Interop.csproj +++ b/DiscImageChef.Interop/DiscImageChef.Interop.csproj @@ -1,4 +1,4 @@ - + Debug @@ -37,12 +37,19 @@ + LICENSE.MIT + + + {9F213318-5CB8-4066-A757-074489C9F818} + DiscImageChef.Metadata + + diff --git a/DiscImageChef.Core/Version.cs b/DiscImageChef.Interop/Version.cs similarity index 53% rename from DiscImageChef.Core/Version.cs rename to DiscImageChef.Interop/Version.cs index 2fc5025c3..8014b6e79 100644 --- a/DiscImageChef.Core/Version.cs +++ b/DiscImageChef.Interop/Version.cs @@ -5,7 +5,7 @@ // Filename : Version.cs // Author(s) : Natalia Portillo // -// Component : Core algorithms. +// Component : Interop services. // // --[ Description ] ---------------------------------------------------------- // @@ -13,18 +13,24 @@ // // --[ License ] -------------------------------------------------------------- // -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General internal License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General internal License for more details. +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. // -// You should have received a copy of the GNU General internal License -// along with this program. If not, see . +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // ---------------------------------------------------------------------------- // Copyright © 2011-2018 Natalia Portillo @@ -33,16 +39,16 @@ using DiscImageChef.Interop; using Schemas; -namespace DiscImageChef.Core +namespace DiscImageChef.Interop { - static class Version + public static class Version { /// /// Gets XML software type for the running version /// /// Platform we are running in /// XML software type - internal static SoftwareType GetSoftwareType(PlatformID platform) + public static SoftwareType GetSoftwareType(PlatformID platform) { // TODO: Platform should be get automatically return new SoftwareType @@ -57,7 +63,7 @@ namespace DiscImageChef.Core /// Gets version string /// /// Version - internal static string GetVersion() + public static string GetVersion() { return typeof(Version).Assembly.GetName().Version.ToString(); }