From 597f27a3aea838dd521400932eb8379750012ff7 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 2 Jan 2019 22:27:02 +0000 Subject: [PATCH] Add test for inter-session reading in multi-session discs to device reports. --- .../.idea/contentModel.xml | 5 + .../Metadata/DeviceReportV2.cs | 5 + DiscImageChef.Core/Devices/Report/MMC.cs | 125 ++ .../DiscImageChef.Database.csproj | 2 + ...061236_AddMultisessionLeadTest.Designer.cs | 1559 +++++++++++++++++ .../20190102061236_AddMultisessionLeadTest.cs | 29 + .../Migrations/DicContextModelSnapshot.cs | 8 + .../DiscImageChef.Server.csproj | 7 + ...133012_AddMultisessionLeadTest.Designer.cs | 29 + ...201901022133012_AddMultisessionLeadTest.cs | 23 + ...1901022133012_AddMultisessionLeadTest.resx | 126 ++ DiscImageChef/Commands/DeviceReport.cs | 5 + 12 files changed, 1923 insertions(+) create mode 100644 DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.Designer.cs create mode 100644 DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.cs create mode 100644 DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.Designer.cs create mode 100644 DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.cs create mode 100644 DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.resx diff --git a/.idea/.idea.DiscImageChef/.idea/contentModel.xml b/.idea/.idea.DiscImageChef/.idea/contentModel.xml index b704ea17e..4f45a017f 100644 --- a/.idea/.idea.DiscImageChef/.idea/contentModel.xml +++ b/.idea/.idea.DiscImageChef/.idea/contentModel.xml @@ -330,6 +330,8 @@ + + @@ -1853,6 +1855,9 @@ + + + diff --git a/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs b/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs index 2224cd0b7..a26133133 100644 --- a/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs +++ b/DiscImageChef.CommonTypes/Metadata/DeviceReportV2.cs @@ -1338,6 +1338,11 @@ namespace DiscImageChef.CommonTypes.Metadata public bool? SupportsReadLongRetry { get; set; } public bool? SupportsSeek { get; set; } + public bool? CanReadingIntersessionLeadIn { get; set; } + public bool? CanReadingIntersessionLeadOut { get; set; } + public byte[] IntersessionLeadInData { get; set; } + public byte[] IntersessionLeadOutData { get; set; } + [JsonIgnore] public long? BlocksSql { diff --git a/DiscImageChef.Core/Devices/Report/MMC.cs b/DiscImageChef.Core/Devices/Report/MMC.cs index a3b2dc7c6..8b037b77c 100644 --- a/DiscImageChef.Core/Devices/Report/MMC.cs +++ b/DiscImageChef.Core/Devices/Report/MMC.cs @@ -31,9 +31,11 @@ // ****************************************************************************/ using System; +using System.Linq; using System.Text; using DiscImageChef.CommonTypes.Metadata; using DiscImageChef.Console; +using DiscImageChef.Decoders.CD; using DiscImageChef.Decoders.SCSI; using DiscImageChef.Decoders.SCSI.MMC; using DiscImageChef.Devices; @@ -1210,6 +1212,129 @@ namespace DiscImageChef.Core.Devices.Report if(mediaTest.SupportsHLDTSTReadRawDVD == true && debug) mediaTest.HLDTSTReadRawDVDData = buffer; + // This is for checking multi-session support, and inter-session lead-in/out reading, as Enhanced CD are + if(mediaType == "Enhanced CD (aka E-CD, CD-Plus or CD+)") + { + DicConsole.WriteLine("Querying CD Full TOC..."); + mediaTest.CanReadFullTOC = !dev.ReadRawToc(out buffer, out senseBuffer, 1, dev.Timeout, out _); + DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", !mediaTest.CanReadFullTOC); + if(debug) mediaTest.FullTocData = buffer; + + if(mediaTest.CanReadFullTOC == true) + { + FullTOC.CDFullTOC? decodedTocNullable = FullTOC.Decode(buffer); + + mediaTest.CanReadFullTOC = decodedTocNullable.HasValue; + + if(mediaTest.CanReadFullTOC == true) + { + FullTOC.CDFullTOC decodedToc = decodedTocNullable.Value; + + if(!decodedToc.TrackDescriptors.Any(t => t.SessionNumber > 1)) + { + DicConsole + .ErrorWriteLine("Could not find second session. Have you inserted the correct type of disc?"); + return null; + } + + FullTOC.TrackDataDescriptor firstSessionLeadOutTrack = + decodedToc.TrackDescriptors.FirstOrDefault(t => t.SessionNumber == 1 && t.POINT == 0xA2); + FullTOC.TrackDataDescriptor secondSessionFirstTrack = + decodedToc.TrackDescriptors.FirstOrDefault(t => t.SessionNumber > 1 && t.POINT <= 99); + + if(firstSessionLeadOutTrack.SessionNumber == 0 || secondSessionFirstTrack.SessionNumber == 0) + { + DicConsole + .ErrorWriteLine("Could not find second session. Have you inserted the correct type of disc?"); + return null; + } + + DicConsole.DebugWriteLine("SCSI Report", + "First session Lead-Out starts at {0:D2}:{1:D2}:{2:D2}", + firstSessionLeadOutTrack.PMIN, firstSessionLeadOutTrack.PSEC, + firstSessionLeadOutTrack.PFRAME); + DicConsole.DebugWriteLine("SCSI Report", "Second session starts at {0:D2}:{1:D2}:{2:D2}", + secondSessionFirstTrack.PMIN, secondSessionFirstTrack.PSEC, + secondSessionFirstTrack.PFRAME); + + // Skip Lead-Out pre-gap + uint firstSessionLeadOutLba = (uint)(firstSessionLeadOutTrack.PMIN * 60 * 75 + + firstSessionLeadOutTrack.PSEC * 75 + + firstSessionLeadOutTrack.PFRAME + 150); + + // Skip second session track pre-gap + uint secondSessionLeadInLba = (uint)(secondSessionFirstTrack.PMIN * 60 * 75 + + secondSessionFirstTrack.PSEC * 75 + + secondSessionFirstTrack.PFRAME - 300); + + DicConsole.WriteLine("Trying SCSI READ CD in first session Lead-Out..."); + mediaTest.CanReadingIntersessionLeadOut = !dev.ReadCd(out buffer, out senseBuffer, + firstSessionLeadOutLba, 2448, 1, + MmcSectorTypes.AllTypes, false, false, + false, MmcHeaderCodes.AllHeaders, true, + false, MmcErrorField.None, + MmcSubchannel.Raw, dev.Timeout, out _); + + if(mediaTest.CanReadingIntersessionLeadOut == false) + { + mediaTest.CanReadingIntersessionLeadOut = !dev.ReadCd(out buffer, out senseBuffer, + firstSessionLeadOutLba, 2368, 1, + MmcSectorTypes.AllTypes, false, false, + false, MmcHeaderCodes.AllHeaders, + true, false, MmcErrorField.None, + MmcSubchannel.Q16, dev.Timeout, + out _); + + if(mediaTest.CanReadingIntersessionLeadOut == false) + mediaTest.CanReadingIntersessionLeadOut = !dev.ReadCd(out buffer, out senseBuffer, + firstSessionLeadOutLba, 2352, 1, + MmcSectorTypes.AllTypes, false, + false, false, + MmcHeaderCodes.AllHeaders, true, + false, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, + out _); + } + + DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", + !mediaTest.CanReadingIntersessionLeadOut); + if(debug) mediaTest.IntersessionLeadOutData = buffer; + + DicConsole.WriteLine("Trying SCSI READ CD in second session Lead-In..."); + mediaTest.CanReadingIntersessionLeadIn = !dev.ReadCd(out buffer, out senseBuffer, + secondSessionLeadInLba, 2448, 1, + MmcSectorTypes.AllTypes, false, false, + false, MmcHeaderCodes.AllHeaders, true, + false, MmcErrorField.None, + MmcSubchannel.Raw, dev.Timeout, out _); + + if(mediaTest.CanReadingIntersessionLeadIn == false) + { + mediaTest.CanReadingIntersessionLeadIn = !dev.ReadCd(out buffer, out senseBuffer, + secondSessionLeadInLba, 2368, 1, + MmcSectorTypes.AllTypes, false, false, + false, MmcHeaderCodes.AllHeaders, true, + false, MmcErrorField.None, + MmcSubchannel.Q16, dev.Timeout, out _); + + if(mediaTest.CanReadingIntersessionLeadIn == false) + mediaTest.CanReadingIntersessionLeadIn = !dev.ReadCd(out buffer, out senseBuffer, + secondSessionLeadInLba, 2352, 1, + MmcSectorTypes.AllTypes, false, + false, false, + MmcHeaderCodes.AllHeaders, true, + false, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, + out _); + } + + DicConsole.DebugWriteLine("SCSI Report", "Sense = {0}", + !mediaTest.CanReadingIntersessionLeadIn); + if(debug) mediaTest.IntersessionLeadInData = buffer; + } + } + } + return mediaTest; } } diff --git a/DiscImageChef.Database/DiscImageChef.Database.csproj b/DiscImageChef.Database/DiscImageChef.Database.csproj index f0b4713a7..d20509261 100644 --- a/DiscImageChef.Database/DiscImageChef.Database.csproj +++ b/DiscImageChef.Database/DiscImageChef.Database.csproj @@ -90,6 +90,8 @@ + + diff --git a/DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.Designer.cs b/DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.Designer.cs new file mode 100644 index 000000000..a8dfb2818 --- /dev/null +++ b/DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.Designer.cs @@ -0,0 +1,1559 @@ +// +using System; +using DiscImageChef.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace DiscImageChef.Database.Migrations +{ + [DbContext(typeof(DicContext))] + [Migration("20190102061236_AddMultisessionLeadTest")] + partial class AddMultisessionLeadTest + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.1.4-rtm-31024"); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Ata", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Identify"); + + b.Property("ReadCapabilitiesId"); + + b.HasKey("Id"); + + b.HasIndex("ReadCapabilitiesId"); + + b.ToTable("Ata"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.BlockDescriptor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BlockLength"); + + b.Property("BlockLengthSql"); + + b.Property("Blocks"); + + b.Property("BlocksSql"); + + b.Property("Density"); + + b.Property("ScsiModeId"); + + b.HasKey("Id"); + + b.HasIndex("ScsiModeId"); + + b.ToTable("BlockDescriptor"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Chs", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Cylinders"); + + b.Property("CylindersSql"); + + b.Property("Heads"); + + b.Property("HeadsSql"); + + b.Property("Sectors"); + + b.Property("SectorsSql"); + + b.HasKey("Id"); + + b.ToTable("Chs"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.DensityCode", b => + { + b.Property("Code") + .ValueGeneratedOnAdd(); + + b.Property("SscSupportedMediaId"); + + b.HasKey("Code"); + + b.HasIndex("SscSupportedMediaId"); + + b.ToTable("DensityCode"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.FireWire", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Manufacturer"); + + b.Property("Product"); + + b.Property("ProductID"); + + b.Property("ProductIDSql"); + + b.Property("RemovableMedia"); + + b.Property("VendorID"); + + b.Property("VendorIDSql"); + + b.HasKey("Id"); + + b.ToTable("FireWire"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Mmc", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("FeaturesId"); + + b.Property("ModeSense2AData"); + + b.HasKey("Id"); + + b.HasIndex("FeaturesId"); + + b.ToTable("Mmc"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.MmcFeatures", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AACSVersion"); + + b.Property("AGIDs"); + + b.Property("BinaryData"); + + b.Property("BindingNonceBlocks"); + + b.Property("BlocksPerReadableUnit"); + + b.Property("BlocksPerReadableUnitSql"); + + b.Property("BufferUnderrunFreeInDVD"); + + b.Property("BufferUnderrunFreeInSAO"); + + b.Property("BufferUnderrunFreeInTAO"); + + b.Property("CPRMVersion"); + + b.Property("CSSVersion"); + + b.Property("CanAudioScan"); + + b.Property("CanEject"); + + b.Property("CanEraseSector"); + + b.Property("CanExpandBDRESpareArea"); + + b.Property("CanFormat"); + + b.Property("CanFormatBDREWithoutSpare"); + + b.Property("CanFormatCert"); + + b.Property("CanFormatFRF"); + + b.Property("CanFormatQCert"); + + b.Property("CanFormatRRM"); + + b.Property("CanGenerateBindingNonce"); + + b.Property("CanLoad"); + + b.Property("CanMuteSeparateChannels"); + + b.Property("CanOverwriteSAOTrack"); + + b.Property("CanOverwriteTAOTrack"); + + b.Property("CanPlayCDAudio"); + + b.Property("CanPseudoOverwriteBDR"); + + b.Property("CanReadAllDualR"); + + b.Property("CanReadAllDualRW"); + + b.Property("CanReadBD"); + + b.Property("CanReadBDR"); + + b.Property("CanReadBDRE1"); + + b.Property("CanReadBDRE2"); + + b.Property("CanReadBDROM"); + + b.Property("CanReadBluBCA"); + + b.Property("CanReadCD"); + + b.Property("CanReadCDMRW"); + + b.Property("CanReadCPRM_MKB"); + + b.Property("CanReadDDCD"); + + b.Property("CanReadDVD"); + + b.Property("CanReadDVDPlusMRW"); + + b.Property("CanReadDVDPlusR"); + + b.Property("CanReadDVDPlusRDL"); + + b.Property("CanReadDVDPlusRW"); + + b.Property("CanReadDVDPlusRWDL"); + + b.Property("CanReadDriveAACSCertificate"); + + b.Property("CanReadHDDVD"); + + b.Property("CanReadHDDVDR"); + + b.Property("CanReadHDDVDRAM"); + + b.Property("CanReadLeadInCDText"); + + b.Property("CanReadOldBDR"); + + b.Property("CanReadOldBDRE"); + + b.Property("CanReadOldBDROM"); + + b.Property("CanReadSpareAreaInformation"); + + b.Property("CanReportDriveSerial"); + + b.Property("CanReportMediaSerial"); + + b.Property("CanTestWriteDDCDR"); + + b.Property("CanTestWriteDVD"); + + b.Property("CanTestWriteInSAO"); + + b.Property("CanTestWriteInTAO"); + + b.Property("CanUpgradeFirmware"); + + b.Property("CanWriteBD"); + + b.Property("CanWriteBDR"); + + b.Property("CanWriteBDRE1"); + + b.Property("CanWriteBDRE2"); + + b.Property("CanWriteBusEncryptedBlocks"); + + b.Property("CanWriteCDMRW"); + + b.Property("CanWriteCDRW"); + + b.Property("CanWriteCDRWCAV"); + + b.Property("CanWriteCDSAO"); + + b.Property("CanWriteCDTAO"); + + b.Property("CanWriteCSSManagedDVD"); + + b.Property("CanWriteDDCDR"); + + b.Property("CanWriteDDCDRW"); + + b.Property("CanWriteDVDPlusMRW"); + + b.Property("CanWriteDVDPlusR"); + + b.Property("CanWriteDVDPlusRDL"); + + b.Property("CanWriteDVDPlusRW"); + + b.Property("CanWriteDVDPlusRWDL"); + + b.Property("CanWriteDVDR"); + + b.Property("CanWriteDVDRDL"); + + b.Property("CanWriteDVDRW"); + + b.Property("CanWriteHDDVDR"); + + b.Property("CanWriteHDDVDRAM"); + + b.Property("CanWriteOldBDR"); + + b.Property("CanWriteOldBDRE"); + + b.Property("CanWritePackedSubchannelInTAO"); + + b.Property("CanWriteRWSubchannelInSAO"); + + b.Property("CanWriteRWSubchannelInTAO"); + + b.Property("CanWriteRaw"); + + b.Property("CanWriteRawMultiSession"); + + b.Property("CanWriteRawSubchannelInTAO"); + + b.Property("ChangerIsSideChangeCapable"); + + b.Property("ChangerSlots"); + + b.Property("ChangerSupportsDiscPresent"); + + b.Property("DBML"); + + b.Property("DVDMultiRead"); + + b.Property("EmbeddedChanger"); + + b.Property("ErrorRecoveryPage"); + + b.Property("FirmwareDate"); + + b.Property("LoadingMechanismType"); + + b.Property("Locked"); + + b.Property("LogicalBlockSize"); + + b.Property("LogicalBlockSizeSql"); + + b.Property("MultiRead"); + + b.Property("PhysicalInterfaceStandardNumber"); + + b.Property("PhysicalInterfaceStandardNumberSql"); + + b.Property("PreventJumper"); + + b.Property("SupportsAACS"); + + b.Property("SupportsBusEncryption"); + + b.Property("SupportsC2"); + + b.Property("SupportsCPRM"); + + b.Property("SupportsCSS"); + + b.Property("SupportsDAP"); + + b.Property("SupportsDeviceBusyEvent"); + + b.Property("SupportsHybridDiscs"); + + b.Property("SupportsModePage1Ch"); + + b.Property("SupportsOSSC"); + + b.Property("SupportsPWP"); + + b.Property("SupportsSWPP"); + + b.Property("SupportsSecurDisc"); + + b.Property("SupportsSeparateVolume"); + + b.Property("SupportsVCPS"); + + b.Property("SupportsWriteInhibitDCB"); + + b.Property("SupportsWriteProtectPAC"); + + b.Property("VolumeLevels"); + + b.Property("VolumeLevelsSql"); + + b.HasKey("Id"); + + b.ToTable("MmcFeatures"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.MmcSd", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("CID"); + + b.Property("CSD"); + + b.Property("ExtendedCSD"); + + b.Property("OCR"); + + b.Property("SCR"); + + b.HasKey("Id"); + + b.ToTable("MmcSd"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Pcmcia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("CIS"); + + b.Property("CardCode"); + + b.Property("CardCodeSql"); + + b.Property("Compliance"); + + b.Property("Manufacturer"); + + b.Property("ManufacturerCode"); + + b.Property("ManufacturerCodeSql"); + + b.Property("ProductName"); + + b.HasKey("Id"); + + b.ToTable("Pcmcia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Scsi", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("InquiryData"); + + b.Property("ModeSense10Data"); + + b.Property("ModeSense6Data"); + + b.Property("ModeSenseId"); + + b.Property("MultiMediaDeviceId"); + + b.Property("ReadCapabilitiesId"); + + b.Property("SequentialDeviceId"); + + b.Property("SupportsModeSense10"); + + b.Property("SupportsModeSense6"); + + b.Property("SupportsModeSubpages"); + + b.HasKey("Id"); + + b.HasIndex("ModeSenseId"); + + b.HasIndex("MultiMediaDeviceId"); + + b.HasIndex("ReadCapabilitiesId"); + + b.HasIndex("SequentialDeviceId"); + + b.ToTable("Scsi"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.ScsiMode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BlankCheckEnabled"); + + b.Property("BufferedMode"); + + b.Property("DPOandFUA"); + + b.Property("MediumType"); + + b.Property("Speed"); + + b.Property("WriteProtected"); + + b.HasKey("Id"); + + b.ToTable("ScsiMode"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.ScsiPage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ScsiId"); + + b.Property("ScsiModeId"); + + b.Property("page"); + + b.Property("subpage"); + + b.Property("value"); + + b.HasKey("Id"); + + b.HasIndex("ScsiId"); + + b.HasIndex("ScsiModeId"); + + b.ToTable("ScsiPage"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Ssc", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BlockSizeGranularity"); + + b.Property("MaxBlockLength"); + + b.Property("MaxBlockLengthSql"); + + b.Property("MinBlockLength"); + + b.Property("MinBlockLengthSql"); + + b.HasKey("Id"); + + b.ToTable("Ssc"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SscSupportedMedia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Description"); + + b.Property("Length"); + + b.Property("LengthSql"); + + b.Property("MediumType"); + + b.Property("Name"); + + b.Property("Organization"); + + b.Property("SscId"); + + b.Property("TestedSequentialMediaId"); + + b.Property("Width"); + + b.Property("WidthSql"); + + b.HasKey("Id"); + + b.HasIndex("SscId"); + + b.HasIndex("TestedSequentialMediaId"); + + b.ToTable("SscSupportedMedia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SupportedDensity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BitsPerMm"); + + b.Property("BitsPerMmSql"); + + b.Property("Capacity"); + + b.Property("CapacitySql"); + + b.Property("DefaultDensity"); + + b.Property("Description"); + + b.Property("Duplicate"); + + b.Property("Name"); + + b.Property("Organization"); + + b.Property("PrimaryCode"); + + b.Property("SecondaryCode"); + + b.Property("SscId"); + + b.Property("TestedSequentialMediaId"); + + b.Property("Tracks"); + + b.Property("TracksSql"); + + b.Property("Width"); + + b.Property("WidthSql"); + + b.Property("Writable"); + + b.HasKey("Id"); + + b.HasIndex("SscId"); + + b.HasIndex("TestedSequentialMediaId"); + + b.ToTable("SupportedDensity"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedMedia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AdipData"); + + b.Property("AtaId"); + + b.Property("AtipData"); + + b.Property("BlockSize"); + + b.Property("BlockSizeSql"); + + b.Property("Blocks"); + + b.Property("BlocksSql"); + + b.Property("BluBcaData"); + + b.Property("BluDdsData"); + + b.Property("BluDiData"); + + b.Property("BluPacData"); + + b.Property("BluSaiData"); + + b.Property("C2PointersData"); + + b.Property("CHSId"); + + b.Property("CanReadAACS"); + + b.Property("CanReadADIP"); + + b.Property("CanReadATIP"); + + b.Property("CanReadBCA"); + + b.Property("CanReadC2Pointers"); + + b.Property("CanReadCMI"); + + b.Property("CanReadCorrectedSubchannel"); + + b.Property("CanReadCorrectedSubchannelWithC2"); + + b.Property("CanReadDCB"); + + b.Property("CanReadDDS"); + + b.Property("CanReadDMI"); + + b.Property("CanReadDiscInformation"); + + b.Property("CanReadFirstTrackPreGap"); + + b.Property("CanReadFullTOC"); + + b.Property("CanReadHDCMI"); + + b.Property("CanReadLayerCapacity"); + + b.Property("CanReadLeadIn"); + + b.Property("CanReadLeadOut"); + + b.Property("CanReadMediaID"); + + b.Property("CanReadMediaSerial"); + + b.Property("CanReadPAC"); + + b.Property("CanReadPFI"); + + b.Property("CanReadPMA"); + + b.Property("CanReadPQSubchannel"); + + b.Property("CanReadPQSubchannelWithC2"); + + b.Property("CanReadPRI"); + + b.Property("CanReadRWSubchannel"); + + b.Property("CanReadRWSubchannelWithC2"); + + b.Property("CanReadRecordablePFI"); + + b.Property("CanReadSpareAreaInformation"); + + b.Property("CanReadTOC"); + + b.Property("CanReadingIntersessionLeadIn"); + + b.Property("CanReadingIntersessionLeadOut"); + + b.Property("CmiData"); + + b.Property("CorrectedSubchannelData"); + + b.Property("CorrectedSubchannelWithC2Data"); + + b.Property("CurrentCHSId"); + + b.Property("DcbData"); + + b.Property("Density"); + + b.Property("DmiData"); + + b.Property("DvdAacsData"); + + b.Property("DvdBcaData"); + + b.Property("DvdDdsData"); + + b.Property("DvdLayerData"); + + b.Property("DvdSaiData"); + + b.Property("EmbossedPfiData"); + + b.Property("FullTocData"); + + b.Property("HLDTSTReadRawDVDData"); + + b.Property("HdCmiData"); + + b.Property("IdentifyData"); + + b.Property("IntersessionLeadInData"); + + b.Property("IntersessionLeadOutData"); + + b.Property("LBA48Sectors"); + + b.Property("LBA48SectorsSql"); + + b.Property("LBASectors"); + + b.Property("LBASectorsSql"); + + b.Property("LeadInData"); + + b.Property("LeadOutData"); + + b.Property("LogicalAlignment"); + + b.Property("LogicalAlignmentSql"); + + b.Property("LongBlockSize"); + + b.Property("LongBlockSizeSql"); + + b.Property("Manufacturer"); + + b.Property("MediaIsRecognized"); + + b.Property("MediumType"); + + b.Property("MediumTypeName"); + + b.Property("MmcId"); + + b.Property("ModeSense10Data"); + + b.Property("ModeSense6Data"); + + b.Property("Model"); + + b.Property("NecReadCddaData"); + + b.Property("NominalRotationRate"); + + b.Property("NominalRotationRateSql"); + + b.Property("PQSubchannelData"); + + b.Property("PQSubchannelWithC2Data"); + + b.Property("PfiData"); + + b.Property("PhysicalBlockSize"); + + b.Property("PhysicalBlockSizeSql"); + + b.Property("PioneerReadCddaData"); + + b.Property("PioneerReadCddaMsfData"); + + b.Property("PlextorReadCddaData"); + + b.Property("PlextorReadRawDVDData"); + + b.Property("PmaData"); + + b.Property("PriData"); + + b.Property("RWSubchannelData"); + + b.Property("RWSubchannelWithC2Data"); + + b.Property("Read10Data"); + + b.Property("Read12Data"); + + b.Property("Read16Data"); + + b.Property("Read6Data"); + + b.Property("ReadCdData"); + + b.Property("ReadCdFullData"); + + b.Property("ReadCdMsfData"); + + b.Property("ReadCdMsfFullData"); + + b.Property("ReadDmaData"); + + b.Property("ReadDmaLba48Data"); + + b.Property("ReadDmaLbaData"); + + b.Property("ReadDmaRetryData"); + + b.Property("ReadDmaRetryLbaData"); + + b.Property("ReadLba48Data"); + + b.Property("ReadLbaData"); + + b.Property("ReadLong10Data"); + + b.Property("ReadLong16Data"); + + b.Property("ReadLongData"); + + b.Property("ReadLongLbaData"); + + b.Property("ReadLongRetryData"); + + b.Property("ReadLongRetryLbaData"); + + b.Property("ReadRetryLbaData"); + + b.Property("ReadSectorsData"); + + b.Property("ReadSectorsRetryData"); + + b.Property("ScsiId"); + + b.Property("SolidStateDevice"); + + b.Property("SupportsHLDTSTReadRawDVD"); + + b.Property("SupportsNECReadCDDA"); + + b.Property("SupportsPioneerReadCDDA"); + + b.Property("SupportsPioneerReadCDDAMSF"); + + b.Property("SupportsPlextorReadCDDA"); + + b.Property("SupportsPlextorReadRawDVD"); + + b.Property("SupportsRead10"); + + b.Property("SupportsRead12"); + + b.Property("SupportsRead16"); + + b.Property("SupportsRead6"); + + b.Property("SupportsReadCapacity"); + + b.Property("SupportsReadCapacity16"); + + b.Property("SupportsReadCd"); + + b.Property("SupportsReadCdMsf"); + + b.Property("SupportsReadCdMsfRaw"); + + b.Property("SupportsReadCdRaw"); + + b.Property("SupportsReadDma"); + + b.Property("SupportsReadDmaLba"); + + b.Property("SupportsReadDmaLba48"); + + b.Property("SupportsReadDmaRetry"); + + b.Property("SupportsReadDmaRetryLba"); + + b.Property("SupportsReadLba"); + + b.Property("SupportsReadLba48"); + + b.Property("SupportsReadLong"); + + b.Property("SupportsReadLong16"); + + b.Property("SupportsReadLongLba"); + + b.Property("SupportsReadLongRetry"); + + b.Property("SupportsReadLongRetryLba"); + + b.Property("SupportsReadRetry"); + + b.Property("SupportsReadRetryLba"); + + b.Property("SupportsReadSectors"); + + b.Property("SupportsSeek"); + + b.Property("SupportsSeekLba"); + + b.Property("TocData"); + + b.Property("Track1PregapData"); + + b.Property("UnformattedBPS"); + + b.Property("UnformattedBPSSql"); + + b.Property("UnformattedBPT"); + + b.Property("UnformattedBPTSql"); + + b.HasKey("Id"); + + b.HasIndex("AtaId"); + + b.HasIndex("CHSId"); + + b.HasIndex("CurrentCHSId"); + + b.HasIndex("MmcId"); + + b.HasIndex("ScsiId"); + + b.ToTable("TestedMedia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("CanReadMediaSerial"); + + b.Property("Density"); + + b.Property("Manufacturer"); + + b.Property("MediaIsRecognized"); + + b.Property("MediumType"); + + b.Property("MediumTypeName"); + + b.Property("ModeSense10Data"); + + b.Property("ModeSense6Data"); + + b.Property("Model"); + + b.Property("SscId"); + + b.HasKey("Id"); + + b.HasIndex("SscId"); + + b.ToTable("TestedSequentialMedia"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Usb", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Descriptors"); + + b.Property("Manufacturer"); + + b.Property("Product"); + + b.Property("ProductID"); + + b.Property("ProductIDSql"); + + b.Property("RemovableMedia"); + + b.Property("VendorID"); + + b.Property("VendorIDSql"); + + b.HasKey("Id"); + + b.ToTable("Usb"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.CdOffset", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AddedWhen"); + + b.Property("Agreement"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("ModifiedWhen"); + + b.Property("Offset"); + + b.Property("Submissions"); + + b.HasKey("Id"); + + b.ToTable("CdOffsets"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Command", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Commands"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Device", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ATAId"); + + b.Property("ATAPIId"); + + b.Property("CompactFlash"); + + b.Property("FireWireId"); + + b.Property("LastSynchronized"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("MultiMediaCardId"); + + b.Property("PCMCIAId"); + + b.Property("Revision"); + + b.Property("SCSIId"); + + b.Property("SecureDigitalId"); + + b.Property("Type"); + + b.Property("USBId"); + + b.HasKey("Id"); + + b.HasIndex("ATAId"); + + b.HasIndex("ATAPIId"); + + b.HasIndex("FireWireId"); + + b.HasIndex("MultiMediaCardId"); + + b.HasIndex("PCMCIAId"); + + b.HasIndex("SCSIId"); + + b.HasIndex("SecureDigitalId"); + + b.HasIndex("USBId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.DeviceStat", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Bus"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("Revision"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("SeenDevices"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Filesystem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Filesystems"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Filter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Filters"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Media", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Real"); + + b.Property("Synchronized"); + + b.Property("Type"); + + b.HasKey("Id"); + + b.ToTable("Medias"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.MediaFormat", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("MediaFormats"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.OperatingSystem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.Property("Version"); + + b.HasKey("Id"); + + b.ToTable("OperatingSystems"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Partition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Name"); + + b.Property("Synchronized"); + + b.HasKey("Id"); + + b.ToTable("Partitions"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Report", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ATAId"); + + b.Property("ATAPIId"); + + b.Property("CompactFlash"); + + b.Property("Created"); + + b.Property("FireWireId"); + + b.Property("Manufacturer"); + + b.Property("Model"); + + b.Property("MultiMediaCardId"); + + b.Property("PCMCIAId"); + + b.Property("Revision"); + + b.Property("SCSIId"); + + b.Property("SecureDigitalId"); + + b.Property("Type"); + + b.Property("USBId"); + + b.Property("Uploaded"); + + b.HasKey("Id"); + + b.HasIndex("ATAId"); + + b.HasIndex("ATAPIId"); + + b.HasIndex("FireWireId"); + + b.HasIndex("MultiMediaCardId"); + + b.HasIndex("PCMCIAId"); + + b.HasIndex("SCSIId"); + + b.HasIndex("SecureDigitalId"); + + b.HasIndex("USBId"); + + b.ToTable("Reports"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.UsbProduct", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AddedWhen"); + + b.Property("ModifiedWhen"); + + b.Property("Product"); + + b.Property("ProductId"); + + b.Property("VendorId"); + + b.HasKey("Id"); + + b.HasIndex("VendorId"); + + b.ToTable("UsbProducts"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.UsbVendor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AddedWhen"); + + b.Property("ModifiedWhen"); + + b.Property("Vendor"); + + b.HasKey("Id"); + + b.ToTable("UsbVendors"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Version", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Synchronized"); + + b.Property("Value"); + + b.HasKey("Id"); + + b.ToTable("Versions"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Ata", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedMedia", "ReadCapabilities") + .WithMany() + .HasForeignKey("ReadCapabilitiesId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.BlockDescriptor", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.ScsiMode") + .WithMany("BlockDescriptors") + .HasForeignKey("ScsiModeId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.DensityCode", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.SscSupportedMedia") + .WithMany("DensityCodes") + .HasForeignKey("SscSupportedMediaId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Mmc", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcFeatures", "Features") + .WithMany() + .HasForeignKey("FeaturesId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.Scsi", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.ScsiMode", "ModeSense") + .WithMany() + .HasForeignKey("ModeSenseId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Mmc", "MultiMediaDevice") + .WithMany() + .HasForeignKey("MultiMediaDeviceId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedMedia", "ReadCapabilities") + .WithMany() + .HasForeignKey("ReadCapabilitiesId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc", "SequentialDevice") + .WithMany() + .HasForeignKey("SequentialDeviceId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.ScsiPage", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi") + .WithMany("EVPDPages") + .HasForeignKey("ScsiId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.ScsiMode") + .WithMany("ModePages") + .HasForeignKey("ScsiModeId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SscSupportedMedia", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc") + .WithMany("SupportedMediaTypes") + .HasForeignKey("SscId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia") + .WithMany("SupportedMediaTypes") + .HasForeignKey("TestedSequentialMediaId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.SupportedDensity", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc") + .WithMany("SupportedDensities") + .HasForeignKey("SscId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia") + .WithMany("SupportedDensities") + .HasForeignKey("TestedSequentialMediaId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedMedia", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata") + .WithMany("RemovableMedias") + .HasForeignKey("AtaId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Chs", "CHS") + .WithMany() + .HasForeignKey("CHSId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Chs", "CurrentCHS") + .WithMany() + .HasForeignKey("CurrentCHSId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Mmc") + .WithMany("TestedMedia") + .HasForeignKey("MmcId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi") + .WithMany("RemovableMedias") + .HasForeignKey("ScsiId"); + }); + + modelBuilder.Entity("DiscImageChef.CommonTypes.Metadata.TestedSequentialMedia", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ssc") + .WithMany("TestedMedia") + .HasForeignKey("SscId"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Device", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATA") + .WithMany() + .HasForeignKey("ATAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATAPI") + .WithMany() + .HasForeignKey("ATAPIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.FireWire", "FireWire") + .WithMany() + .HasForeignKey("FireWireId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "MultiMediaCard") + .WithMany() + .HasForeignKey("MultiMediaCardId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Pcmcia", "PCMCIA") + .WithMany() + .HasForeignKey("PCMCIAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi", "SCSI") + .WithMany() + .HasForeignKey("SCSIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "SecureDigital") + .WithMany() + .HasForeignKey("SecureDigitalId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Usb", "USB") + .WithMany() + .HasForeignKey("USBId"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.Report", b => + { + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATA") + .WithMany() + .HasForeignKey("ATAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Ata", "ATAPI") + .WithMany() + .HasForeignKey("ATAPIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.FireWire", "FireWire") + .WithMany() + .HasForeignKey("FireWireId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "MultiMediaCard") + .WithMany() + .HasForeignKey("MultiMediaCardId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Pcmcia", "PCMCIA") + .WithMany() + .HasForeignKey("PCMCIAId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Scsi", "SCSI") + .WithMany() + .HasForeignKey("SCSIId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.MmcSd", "SecureDigital") + .WithMany() + .HasForeignKey("SecureDigitalId"); + + b.HasOne("DiscImageChef.CommonTypes.Metadata.Usb", "USB") + .WithMany() + .HasForeignKey("USBId"); + }); + + modelBuilder.Entity("DiscImageChef.Database.Models.UsbProduct", b => + { + b.HasOne("DiscImageChef.Database.Models.UsbVendor", "Vendor") + .WithMany("Products") + .HasForeignKey("VendorId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.cs b/DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.cs new file mode 100644 index 000000000..818369f34 --- /dev/null +++ b/DiscImageChef.Database/Migrations/20190102061236_AddMultisessionLeadTest.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DiscImageChef.Database.Migrations +{ + public partial class AddMultisessionLeadTest : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn("CanReadingIntersessionLeadIn", "TestedMedia", nullable: true); + + migrationBuilder.AddColumn("CanReadingIntersessionLeadOut", "TestedMedia", nullable: true); + + migrationBuilder.AddColumn("IntersessionLeadInData", "TestedMedia", nullable: true); + + migrationBuilder.AddColumn("IntersessionLeadOutData", "TestedMedia", nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn("CanReadingIntersessionLeadIn", "TestedMedia"); + + migrationBuilder.DropColumn("CanReadingIntersessionLeadOut", "TestedMedia"); + + migrationBuilder.DropColumn("IntersessionLeadInData", "TestedMedia"); + + migrationBuilder.DropColumn("IntersessionLeadOutData", "TestedMedia"); + } + } +} \ No newline at end of file diff --git a/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs b/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs index d24ec8a5f..f937d8bf4 100644 --- a/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs +++ b/DiscImageChef.Database/Migrations/DicContextModelSnapshot.cs @@ -709,6 +709,10 @@ namespace DiscImageChef.Database.Migrations b.Property("CanReadTOC"); + b.Property("CanReadingIntersessionLeadIn"); + + b.Property("CanReadingIntersessionLeadOut"); + b.Property("CmiData"); b.Property("CorrectedSubchannelData"); @@ -743,6 +747,10 @@ namespace DiscImageChef.Database.Migrations b.Property("IdentifyData"); + b.Property("IntersessionLeadInData"); + + b.Property("IntersessionLeadOutData"); + b.Property("LBA48Sectors"); b.Property("LBA48SectorsSql"); diff --git a/DiscImageChef.Server/DiscImageChef.Server.csproj b/DiscImageChef.Server/DiscImageChef.Server.csproj index f54c320ab..e963e7e7d 100644 --- a/DiscImageChef.Server/DiscImageChef.Server.csproj +++ b/DiscImageChef.Server/DiscImageChef.Server.csproj @@ -256,6 +256,10 @@ 201812252219066_StoreReadResultsInReportDatabase.cs + + + 201901022133012_AddMultisessionLeadTest.cs + @@ -380,6 +384,9 @@ 201812252219066_StoreReadResultsInReportDatabase.cs + + 201901022133012_AddMultisessionLeadTest.cs + 10.0 diff --git a/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.Designer.cs b/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.Designer.cs new file mode 100644 index 000000000..c9a83ba80 --- /dev/null +++ b/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.Designer.cs @@ -0,0 +1,29 @@ +// +namespace DiscImageChef.Server.Migrations +{ + using System.CodeDom.Compiler; + using System.Data.Entity.Migrations; + using System.Data.Entity.Migrations.Infrastructure; + using System.Resources; + + [GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")] + public sealed partial class AddMultisessionLeadTest : IMigrationMetadata + { + private readonly ResourceManager Resources = new ResourceManager(typeof(AddMultisessionLeadTest)); + + string IMigrationMetadata.Id + { + get { return "201901022133012_AddMultisessionLeadTest"; } + } + + string IMigrationMetadata.Source + { + get { return null; } + } + + string IMigrationMetadata.Target + { + get { return Resources.GetString("Target"); } + } + } +} diff --git a/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.cs b/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.cs new file mode 100644 index 000000000..7052bdf3e --- /dev/null +++ b/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.cs @@ -0,0 +1,23 @@ +using System.Data.Entity.Migrations; + +namespace DiscImageChef.Server.Migrations +{ + public partial class AddMultisessionLeadTest : DbMigration + { + public override void Up() + { + AddColumn("dbo.TestedMedias", "CanReadingIntersessionLeadIn", c => c.Boolean()); + AddColumn("dbo.TestedMedias", "CanReadingIntersessionLeadOut", c => c.Boolean()); + AddColumn("dbo.TestedMedias", "IntersessionLeadInData", c => c.Binary()); + AddColumn("dbo.TestedMedias", "IntersessionLeadOutData", c => c.Binary()); + } + + public override void Down() + { + DropColumn("dbo.TestedMedias", "IntersessionLeadOutData"); + DropColumn("dbo.TestedMedias", "IntersessionLeadInData"); + DropColumn("dbo.TestedMedias", "CanReadingIntersessionLeadOut"); + DropColumn("dbo.TestedMedias", "CanReadingIntersessionLeadIn"); + } + } +} \ No newline at end of file diff --git a/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.resx b/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.resx new file mode 100644 index 000000000..cffbecc17 --- /dev/null +++ b/DiscImageChef.Server/Migrations/201901022133012_AddMultisessionLeadTest.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 + + + dbo + + \ No newline at end of file diff --git a/DiscImageChef/Commands/DeviceReport.cs b/DiscImageChef/Commands/DeviceReport.cs index b4bc48de7..e1e8c3ec3 100644 --- a/DiscImageChef/Commands/DeviceReport.cs +++ b/DiscImageChef/Commands/DeviceReport.cs @@ -317,6 +317,7 @@ namespace DiscImageChef.Commands { mediaTypes.Add("CD-ROM"); mediaTypes.Add("Audio CD"); + mediaTypes.Add("Enhanced CD (aka E-CD, CD-Plus or CD+)"); if(report.SCSI.MultiMediaDevice.ModeSense2A.ReadCDR) mediaTypes.Add("CD-R"); if(report.SCSI.MultiMediaDevice.ModeSense2A.ReadCDRW) { @@ -434,6 +435,8 @@ namespace DiscImageChef.Commands mediaTypes.Add("CD-RW High Speed (marked between 8x and 12x)"); if(!mediaTypes.Contains("CD-RW (marked 4x or lower)")) mediaTypes.Add("CD-RW (marked 4x or lower)"); + if(!mediaTypes.Contains("Enhanced CD (aka E-CD, CD-Plus or CD+)")) + mediaTypes.Add("Enhanced CD (aka E-CD, CD-Plus or CD+)"); } mediaTypes.Sort(); @@ -587,6 +590,8 @@ namespace DiscImageChef.Commands mediaTest = reporter.ReportMmcMedia(mediaType, tryPlextor, tryPioneer, tryNec, tryHldtst); + if(mediaTest is null) continue; + if(mediaTest.SupportsReadLong == true && mediaTest.LongBlockSize == mediaTest.BlockSize) {