Refactor: Simplification and C# 7.

This commit is contained in:
2017-08-08 14:18:31 +01:00
parent 4e9738be08
commit aebe7dd2ac
5 changed files with 239 additions and 150 deletions

View File

@@ -48,16 +48,26 @@ namespace DiscImageChef.Core
// TODO: Complete it // TODO: Complete it
static void AudioMedia(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar) static void AudioMedia(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar)
{ {
sidecar.AudioMedia = new AudioMediaType[1]; sidecar.AudioMedia = new []
sidecar.AudioMedia[0] = new AudioMediaType(); {
sidecar.AudioMedia[0].Checksums = imgChecksums.ToArray(); new AudioMediaType
sidecar.AudioMedia[0].Image = new ImageType(); {
sidecar.AudioMedia[0].Image.format = image.GetImageFormat(); Checksums = imgChecksums.ToArray(),
sidecar.AudioMedia[0].Image.offset = 0; Image = new ImageType
sidecar.AudioMedia[0].Image.offsetSpecified = true; {
sidecar.AudioMedia[0].Image.Value = Path.GetFileName(imagePath); format = image.GetImageFormat(),
sidecar.AudioMedia[0].Size = fi.Length; offset = 0,
sidecar.AudioMedia[0].Sequence = new SequenceType(); offsetSpecified = true,
Value = Path.GetFileName(imagePath)
},
Size = fi.Length,
Sequence = new SequenceType
{
MediaTitle = image.GetImageName()
}
}
};
if(image.GetMediaSequence() != 0 && image.GetLastDiskSequence() != 0) if(image.GetMediaSequence() != 0 && image.GetLastDiskSequence() != 0)
{ {
sidecar.AudioMedia[0].Sequence.MediaSequence = image.GetMediaSequence(); sidecar.AudioMedia[0].Sequence.MediaSequence = image.GetMediaSequence();
@@ -68,7 +78,6 @@ namespace DiscImageChef.Core
sidecar.AudioMedia[0].Sequence.MediaSequence = 1; sidecar.AudioMedia[0].Sequence.MediaSequence = 1;
sidecar.AudioMedia[0].Sequence.TotalMedia = 1; sidecar.AudioMedia[0].Sequence.TotalMedia = 1;
} }
sidecar.AudioMedia[0].Sequence.MediaTitle = image.GetImageName();
} }
} }
} }

View File

@@ -50,16 +50,26 @@ namespace DiscImageChef.Core
{ {
static void BlockMedia(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar) static void BlockMedia(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar)
{ {
sidecar.BlockMedia = new BlockMediaType[1]; sidecar.BlockMedia = new[]
sidecar.BlockMedia[0] = new BlockMediaType(); {
sidecar.BlockMedia[0].Checksums = imgChecksums.ToArray(); new BlockMediaType
sidecar.BlockMedia[0].Image = new ImageType(); {
sidecar.BlockMedia[0].Image.format = image.GetImageFormat(); Checksums = imgChecksums.ToArray(),
sidecar.BlockMedia[0].Image.offset = 0; Image = new ImageType
sidecar.BlockMedia[0].Image.offsetSpecified = true; {
sidecar.BlockMedia[0].Image.Value = Path.GetFileName(imagePath); format = image.GetImageFormat(),
sidecar.BlockMedia[0].Size = fi.Length; offset = 0,
sidecar.BlockMedia[0].Sequence = new SequenceType(); offsetSpecified = true,
Value = Path.GetFileName(imagePath)
},
Size = fi.Length,
Sequence = new SequenceType
{
MediaTitle = image.GetImageName()
}
}
};
if(image.GetMediaSequence() != 0 && image.GetLastDiskSequence() != 0) if(image.GetMediaSequence() != 0 && image.GetLastDiskSequence() != 0)
{ {
sidecar.BlockMedia[0].Sequence.MediaSequence = image.GetMediaSequence(); sidecar.BlockMedia[0].Sequence.MediaSequence = image.GetMediaSequence();
@@ -70,30 +80,41 @@ namespace DiscImageChef.Core
sidecar.BlockMedia[0].Sequence.MediaSequence = 1; sidecar.BlockMedia[0].Sequence.MediaSequence = 1;
sidecar.BlockMedia[0].Sequence.TotalMedia = 1; sidecar.BlockMedia[0].Sequence.TotalMedia = 1;
} }
sidecar.BlockMedia[0].Sequence.MediaTitle = image.GetImageName();
foreach(MediaTagType tagType in image.ImageInfo.readableMediaTags) foreach(MediaTagType tagType in image.ImageInfo.readableMediaTags)
{ {
switch(tagType) switch(tagType)
{ {
case MediaTagType.ATAPI_IDENTIFY: case MediaTagType.ATAPI_IDENTIFY:
sidecar.BlockMedia[0].ATA = new ATAType(); sidecar.BlockMedia[0].ATA = new ATAType
sidecar.BlockMedia[0].ATA.Identify = new DumpType(); {
sidecar.BlockMedia[0].ATA.Identify.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY)).ToArray(); Identify = new DumpType
sidecar.BlockMedia[0].ATA.Identify.Size = image.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY).Length; {
Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY).Length
}
};
break; break;
case MediaTagType.ATA_IDENTIFY: case MediaTagType.ATA_IDENTIFY:
sidecar.BlockMedia[0].ATA = new ATAType(); sidecar.BlockMedia[0].ATA = new ATAType
sidecar.BlockMedia[0].ATA.Identify = new DumpType(); {
sidecar.BlockMedia[0].ATA.Identify.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.ATA_IDENTIFY)).ToArray(); Identify = new DumpType
sidecar.BlockMedia[0].ATA.Identify.Size = image.ReadDiskTag(MediaTagType.ATA_IDENTIFY).Length; {
Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.ATA_IDENTIFY)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.ATA_IDENTIFY).Length
}
};
break; break;
case MediaTagType.PCMCIA_CIS: case MediaTagType.PCMCIA_CIS:
byte[] cis = image.ReadDiskTag(MediaTagType.PCMCIA_CIS); byte[] cis = image.ReadDiskTag(MediaTagType.PCMCIA_CIS);
sidecar.BlockMedia[0].PCMCIA = new PCMCIAType(); sidecar.BlockMedia[0].PCMCIA = new PCMCIAType
sidecar.BlockMedia[0].PCMCIA.CIS = new DumpType(); {
sidecar.BlockMedia[0].PCMCIA.CIS.Checksums = Checksum.GetChecksums(cis).ToArray(); CIS = new DumpType
sidecar.BlockMedia[0].PCMCIA.CIS.Size = cis.Length; {
Checksums = Checksum.GetChecksums(cis).ToArray(),
Size = cis.Length
}
};
Tuple[] tuples = CIS.GetTuples(cis); Tuple[] tuples = CIS.GetTuples(cis);
if(tuples != null) if(tuples != null)
{ {
@@ -127,31 +148,41 @@ namespace DiscImageChef.Core
} }
break; break;
case MediaTagType.SCSI_INQUIRY: case MediaTagType.SCSI_INQUIRY:
sidecar.BlockMedia[0].SCSI = new SCSIType(); sidecar.BlockMedia[0].SCSI = new SCSIType
sidecar.BlockMedia[0].SCSI.Inquiry = new DumpType(); {
sidecar.BlockMedia[0].SCSI.Inquiry.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SCSI_INQUIRY)).ToArray(); Inquiry = new DumpType
sidecar.BlockMedia[0].SCSI.Inquiry.Size = image.ReadDiskTag(MediaTagType.SCSI_INQUIRY).Length; {
Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SCSI_INQUIRY)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.SCSI_INQUIRY).Length
}
};
break; break;
case MediaTagType.SD_CID: case MediaTagType.SD_CID:
if(sidecar.BlockMedia[0].SecureDigital == null) if(sidecar.BlockMedia[0].SecureDigital == null)
sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType();
sidecar.BlockMedia[0].SecureDigital.CID = new DumpType(); sidecar.BlockMedia[0].SecureDigital.CID = new DumpType
sidecar.BlockMedia[0].SecureDigital.CID.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_CID)).ToArray(); {
sidecar.BlockMedia[0].SecureDigital.CID.Size = image.ReadDiskTag(MediaTagType.SD_CID).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_CID)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.SD_CID).Length
};
break; break;
case MediaTagType.SD_CSD: case MediaTagType.SD_CSD:
if(sidecar.BlockMedia[0].SecureDigital == null) if(sidecar.BlockMedia[0].SecureDigital == null)
sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType();
sidecar.BlockMedia[0].SecureDigital.CSD = new DumpType(); sidecar.BlockMedia[0].SecureDigital.CSD = new DumpType
sidecar.BlockMedia[0].SecureDigital.CSD.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_CSD)).ToArray(); {
sidecar.BlockMedia[0].SecureDigital.CSD.Size = image.ReadDiskTag(MediaTagType.SD_CSD).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_CSD)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.SD_CSD).Length
};
break; break;
case MediaTagType.SD_ExtendedCSD: case MediaTagType.SD_ExtendedCSD:
if(sidecar.BlockMedia[0].SecureDigital == null) if(sidecar.BlockMedia[0].SecureDigital == null)
sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType(); sidecar.BlockMedia[0].SecureDigital = new SecureDigitalType();
sidecar.BlockMedia[0].SecureDigital.ExtendedCSD = new DumpType(); sidecar.BlockMedia[0].SecureDigital.ExtendedCSD = new DumpType
sidecar.BlockMedia[0].SecureDigital.ExtendedCSD.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_ExtendedCSD)).ToArray(); {
sidecar.BlockMedia[0].SecureDigital.ExtendedCSD.Size = image.ReadDiskTag(MediaTagType.SD_ExtendedCSD).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.SD_ExtendedCSD)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.SD_ExtendedCSD).Length
};
break; break;
} }
} }
@@ -198,8 +229,7 @@ namespace DiscImageChef.Core
EndProgress2(); EndProgress2();
} }
string dskType, dskSubType; Metadata.MediaType.MediaTypeToString(image.ImageInfo.mediaType, out string dskType, out string dskSubType);
Metadata.MediaType.MediaTypeToString(image.ImageInfo.mediaType, out dskType, out dskSubType);
sidecar.BlockMedia[0].DiskType = dskType; sidecar.BlockMedia[0].DiskType = dskType;
sidecar.BlockMedia[0].DiskSubType = dskSubType; sidecar.BlockMedia[0].DiskSubType = dskSubType;
Statistics.AddMedia(image.ImageInfo.mediaType, false); Statistics.AddMedia(image.ImageInfo.mediaType, false);
@@ -222,14 +252,15 @@ namespace DiscImageChef.Core
sidecar.BlockMedia[0].FileSystemInformation = new PartitionType[partitions.Count]; sidecar.BlockMedia[0].FileSystemInformation = new PartitionType[partitions.Count];
for(int i = 0; i < partitions.Count; i++) for(int i = 0; i < partitions.Count; i++)
{ {
sidecar.BlockMedia[0].FileSystemInformation[i] = new PartitionType(); sidecar.BlockMedia[0].FileSystemInformation[i] = new PartitionType
sidecar.BlockMedia[0].FileSystemInformation[i].Description = partitions[i].Description; {
sidecar.BlockMedia[0].FileSystemInformation[i].EndSector = (int)(partitions[i].End); Description = partitions[i].Description,
sidecar.BlockMedia[0].FileSystemInformation[i].Name = partitions[i].Name; EndSector = (int)(partitions[i].End),
sidecar.BlockMedia[0].FileSystemInformation[i].Sequence = (int)partitions[i].Sequence; Name = partitions[i].Name,
sidecar.BlockMedia[0].FileSystemInformation[i].StartSector = (int)partitions[i].Start; Sequence = (int)partitions[i].Sequence,
sidecar.BlockMedia[0].FileSystemInformation[i].Type = partitions[i].Type; StartSector = (int)partitions[i].Start,
Type = partitions[i].Type
};
List<FileSystemType> lstFs = new List<FileSystemType>(); List<FileSystemType> lstFs = new List<FileSystemType>();
foreach(Filesystem _plugin in plugins.PluginsList.Values) foreach(Filesystem _plugin in plugins.PluginsList.Values)
@@ -238,8 +269,7 @@ namespace DiscImageChef.Core
{ {
if(_plugin.Identify(image, partitions[i])) if(_plugin.Identify(image, partitions[i]))
{ {
string foo; _plugin.GetInformation(image, partitions[i], out string foo);
_plugin.GetInformation(image, partitions[i], out foo);
lstFs.Add(_plugin.XmlFSType); lstFs.Add(_plugin.XmlFSType);
Statistics.AddFilesystem(_plugin.XmlFSType.Type); Statistics.AddFilesystem(_plugin.XmlFSType.Type);
} }
@@ -258,9 +288,11 @@ namespace DiscImageChef.Core
} }
else else
{ {
sidecar.BlockMedia[0].FileSystemInformation[0] = new PartitionType(); sidecar.BlockMedia[0].FileSystemInformation[0] = new PartitionType
sidecar.BlockMedia[0].FileSystemInformation[0].StartSector = 0; {
sidecar.BlockMedia[0].FileSystemInformation[0].EndSector = (int)(image.GetSectors() - 1); StartSector = 0,
EndSector = (int)(image.GetSectors() - 1)
};
Partition wholePart = new Partition Partition wholePart = new Partition
{ {

View File

@@ -48,15 +48,21 @@ namespace DiscImageChef.Core
// TODO: Complete it // TODO: Complete it
static void LinearMedia(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar) static void LinearMedia(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar)
{ {
sidecar.LinearMedia = new LinearMediaType[1]; sidecar.LinearMedia = new []
sidecar.LinearMedia[0] = new LinearMediaType(); {
sidecar.LinearMedia[0].Checksums = imgChecksums.ToArray(); new LinearMediaType
sidecar.LinearMedia[0].Image = new ImageType(); {
sidecar.LinearMedia[0].Image.format = image.GetImageFormat(); Checksums = imgChecksums.ToArray(),
sidecar.LinearMedia[0].Image.offset = 0; Image = new ImageType
sidecar.LinearMedia[0].Image.offsetSpecified = true; {
sidecar.LinearMedia[0].Image.Value = Path.GetFileName(imagePath); format = image.GetImageFormat(),
sidecar.LinearMedia[0].Size = fi.Length; offset = 0,
offsetSpecified = true,
Value = Path.GetFileName(imagePath)
},
Size = fi.Length
}
};
} }
} }
} }

View File

@@ -49,16 +49,26 @@ namespace DiscImageChef.Core
{ {
static void OpticalDisc(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar) static void OpticalDisc(ImagePlugin image, System.Guid filterId, string imagePath, FileInfo fi, PluginBase plugins, List<ChecksumType> imgChecksums, ref CICMMetadataType sidecar)
{ {
sidecar.OpticalDisc = new OpticalDiscType[1]; sidecar.OpticalDisc = new[]
sidecar.OpticalDisc[0] = new OpticalDiscType(); {
sidecar.OpticalDisc[0].Checksums = imgChecksums.ToArray(); new OpticalDiscType
sidecar.OpticalDisc[0].Image = new ImageType(); {
sidecar.OpticalDisc[0].Image.format = image.GetImageFormat(); Checksums = imgChecksums.ToArray(),
sidecar.OpticalDisc[0].Image.offset = 0; Image = new ImageType
sidecar.OpticalDisc[0].Image.offsetSpecified = true; {
sidecar.OpticalDisc[0].Image.Value = Path.GetFileName(imagePath); format = image.GetImageFormat(),
sidecar.OpticalDisc[0].Size = fi.Length; offset = 0,
sidecar.OpticalDisc[0].Sequence = new SequenceType(); offsetSpecified = true,
Value = Path.GetFileName(imagePath)
},
Size = fi.Length,
Sequence = new SequenceType
{
MediaTitle = image.GetImageName()
}
}
};
if(image.GetMediaSequence() != 0 && image.GetLastDiskSequence() != 0) if(image.GetMediaSequence() != 0 && image.GetLastDiskSequence() != 0)
{ {
sidecar.OpticalDisc[0].Sequence.MediaSequence = image.GetMediaSequence(); sidecar.OpticalDisc[0].Sequence.MediaSequence = image.GetMediaSequence();
@@ -69,7 +79,6 @@ namespace DiscImageChef.Core
sidecar.OpticalDisc[0].Sequence.MediaSequence = 1; sidecar.OpticalDisc[0].Sequence.MediaSequence = 1;
sidecar.OpticalDisc[0].Sequence.TotalMedia = 1; sidecar.OpticalDisc[0].Sequence.TotalMedia = 1;
} }
sidecar.OpticalDisc[0].Sequence.MediaTitle = image.GetImageName();
MediaType dskType = image.ImageInfo.mediaType; MediaType dskType = image.ImageInfo.mediaType;
@@ -78,9 +87,11 @@ namespace DiscImageChef.Core
switch(tagType) switch(tagType)
{ {
case MediaTagType.CD_ATIP: case MediaTagType.CD_ATIP:
sidecar.OpticalDisc[0].ATIP = new DumpType(); sidecar.OpticalDisc[0].ATIP = new DumpType
sidecar.OpticalDisc[0].ATIP.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.CD_ATIP)).ToArray(); {
sidecar.OpticalDisc[0].ATIP.Size = image.ReadDiskTag(MediaTagType.CD_ATIP).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.CD_ATIP)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.CD_ATIP).Length
};
Decoders.CD.ATIP.CDATIP? atip = Decoders.CD.ATIP.Decode(image.ReadDiskTag(MediaTagType.CD_ATIP)); Decoders.CD.ATIP.CDATIP? atip = Decoders.CD.ATIP.Decode(image.ReadDiskTag(MediaTagType.CD_ATIP));
if(atip.HasValue) if(atip.HasValue)
{ {
@@ -91,17 +102,25 @@ namespace DiscImageChef.Core
} }
break; break;
case MediaTagType.DVD_BCA: case MediaTagType.DVD_BCA:
sidecar.OpticalDisc[0].BCA = new DumpType(); sidecar.OpticalDisc[0].BCA = new DumpType
sidecar.OpticalDisc[0].BCA.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_BCA)).ToArray(); {
sidecar.OpticalDisc[0].BCA.Size = image.ReadDiskTag(MediaTagType.DVD_BCA).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_BCA)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.DVD_BCA).Length
};
break; break;
case MediaTagType.BD_BCA: case MediaTagType.BD_BCA:
sidecar.OpticalDisc[0].BCA = new DumpType(); sidecar.OpticalDisc[0].BCA = new DumpType
sidecar.OpticalDisc[0].BCA.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.BD_BCA)).ToArray(); {
sidecar.OpticalDisc[0].BCA.Size = image.ReadDiskTag(MediaTagType.BD_BCA).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.BD_BCA)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.BD_BCA).Length
};
break; break;
case MediaTagType.DVD_CMI: case MediaTagType.DVD_CMI:
sidecar.OpticalDisc[0].CMI = new DumpType(); sidecar.OpticalDisc[0].CMI = new DumpType
{
Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_CMI)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.DVD_CMI).Length
};
Decoders.DVD.CSS_CPRM.LeadInCopyright? cmi = Decoders.DVD.CSS_CPRM.DecodeLeadInCopyright(image.ReadDiskTag(MediaTagType.DVD_CMI)); Decoders.DVD.CSS_CPRM.LeadInCopyright? cmi = Decoders.DVD.CSS_CPRM.DecodeLeadInCopyright(image.ReadDiskTag(MediaTagType.DVD_CMI));
if(cmi.HasValue) if(cmi.HasValue)
{ {
@@ -118,30 +137,33 @@ namespace DiscImageChef.Core
break; break;
} }
} }
sidecar.OpticalDisc[0].CMI.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_CMI)).ToArray();
sidecar.OpticalDisc[0].CMI.Size = image.ReadDiskTag(MediaTagType.DVD_CMI).Length;
break; break;
case MediaTagType.DVD_DMI: case MediaTagType.DVD_DMI:
sidecar.OpticalDisc[0].DMI = new DumpType(); sidecar.OpticalDisc[0].DMI = new DumpType
sidecar.OpticalDisc[0].DMI.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_DMI)).ToArray(); {
sidecar.OpticalDisc[0].DMI.Size = image.ReadDiskTag(MediaTagType.DVD_DMI).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_DMI)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.DVD_DMI).Length
};
if(Decoders.Xbox.DMI.IsXbox(image.ReadDiskTag(MediaTagType.DVD_DMI))) if(Decoders.Xbox.DMI.IsXbox(image.ReadDiskTag(MediaTagType.DVD_DMI)))
{ {
dskType = MediaType.XGD; dskType = MediaType.XGD;
sidecar.OpticalDisc[0].Dimensions = new DimensionsType(); sidecar.OpticalDisc[0].Dimensions = new DimensionsType { Diameter = 120 };
sidecar.OpticalDisc[0].Dimensions.Diameter = 120;
} }
else if(Decoders.Xbox.DMI.IsXbox360(image.ReadDiskTag(MediaTagType.DVD_DMI))) else if(Decoders.Xbox.DMI.IsXbox360(image.ReadDiskTag(MediaTagType.DVD_DMI)))
{ {
dskType = MediaType.XGD2; dskType = MediaType.XGD2;
sidecar.OpticalDisc[0].Dimensions = new DimensionsType(); sidecar.OpticalDisc[0].Dimensions = new DimensionsType
sidecar.OpticalDisc[0].Dimensions.Diameter = 120; {
Diameter = 120
};
} }
break; break;
case MediaTagType.DVD_PFI: case MediaTagType.DVD_PFI:
sidecar.OpticalDisc[0].PFI = new DumpType(); sidecar.OpticalDisc[0].PFI = new DumpType
sidecar.OpticalDisc[0].PFI.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_PFI)).ToArray(); {
sidecar.OpticalDisc[0].PFI.Size = image.ReadDiskTag(MediaTagType.DVD_PFI).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.DVD_PFI)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.DVD_PFI).Length
};
Decoders.DVD.PFI.PhysicalFormatInformation? pfi = Decoders.DVD.PFI.Decode(image.ReadDiskTag(MediaTagType.DVD_PFI)); Decoders.DVD.PFI.PhysicalFormatInformation? pfi = Decoders.DVD.PFI.Decode(image.ReadDiskTag(MediaTagType.DVD_PFI));
if(pfi.HasValue) if(pfi.HasValue)
{ {
@@ -213,9 +235,11 @@ namespace DiscImageChef.Core
} }
break; break;
case MediaTagType.CD_PMA: case MediaTagType.CD_PMA:
sidecar.OpticalDisc[0].PMA = new DumpType(); sidecar.OpticalDisc[0].PMA = new DumpType
sidecar.OpticalDisc[0].PMA.Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.CD_PMA)).ToArray(); {
sidecar.OpticalDisc[0].PMA.Size = image.ReadDiskTag(MediaTagType.CD_PMA).Length; Checksums = Checksum.GetChecksums(image.ReadDiskTag(MediaTagType.CD_PMA)).ToArray(),
Size = image.ReadDiskTag(MediaTagType.CD_PMA).Length
};
break; break;
} }
} }
@@ -281,16 +305,17 @@ namespace DiscImageChef.Core
} }
break; break;
} }
xmlTrk.Sequence = new TrackSequenceType(); xmlTrk.Sequence = new TrackSequenceType
xmlTrk.Sequence.Session = trk.TrackSession; {
xmlTrk.Sequence.TrackNumber = (int)trk.TrackSequence; Session = trk.TrackSession,
TrackNumber = (int)trk.TrackSequence
};
xmlTrk.StartSector = (long)trk.TrackStartSector; xmlTrk.StartSector = (long)trk.TrackStartSector;
xmlTrk.EndSector = (long)trk.TrackEndSector; xmlTrk.EndSector = (long)trk.TrackEndSector;
if(trk.Indexes != null && trk.Indexes.ContainsKey(0)) if(trk.Indexes != null && trk.Indexes.ContainsKey(0))
{ {
ulong idx0; if(trk.Indexes.TryGetValue(0, out ulong idx0))
if(trk.Indexes.TryGetValue(0, out idx0))
xmlTrk.StartSector = (long)idx0; xmlTrk.StartSector = (long)idx0;
} }
@@ -306,15 +331,18 @@ namespace DiscImageChef.Core
xmlTrk.EndMSF = DdcdLbaToMsf(xmlTrk.EndSector); xmlTrk.EndMSF = DdcdLbaToMsf(xmlTrk.EndSector);
} }
xmlTrk.Image = new ImageType(); xmlTrk.Image = new ImageType
xmlTrk.Image.Value = Path.GetFileName(trk.TrackFile); {
Value = Path.GetFileName(trk.TrackFile),
format = trk.TrackFileType
};
if(trk.TrackFileOffset > 0) if(trk.TrackFileOffset > 0)
{ {
xmlTrk.Image.offset = (long)trk.TrackFileOffset; xmlTrk.Image.offset = (long)trk.TrackFileOffset;
xmlTrk.Image.offsetSpecified = true; xmlTrk.Image.offsetSpecified = true;
} }
xmlTrk.Image.format = trk.TrackFileType;
xmlTrk.Size = (xmlTrk.EndSector - xmlTrk.StartSector + 1) * trk.TrackRawBytesPerSector; xmlTrk.Size = (xmlTrk.EndSector - xmlTrk.StartSector + 1) * trk.TrackRawBytesPerSector;
xmlTrk.BytesPerSector = trk.TrackBytesPerSector; xmlTrk.BytesPerSector = trk.TrackBytesPerSector;
@@ -370,8 +398,16 @@ namespace DiscImageChef.Core
if(trk.TrackSubchannelType != TrackSubchannelType.None) if(trk.TrackSubchannelType != TrackSubchannelType.None)
{ {
xmlTrk.SubChannel = new SubChannelType(); xmlTrk.SubChannel = new SubChannelType
xmlTrk.SubChannel.Image = new ImageType(); {
Image = new ImageType
{
Value = trk.TrackSubchannelFile
},
// TODO: Packed subchannel has different size?
Size = (xmlTrk.EndSector - xmlTrk.StartSector + 1) * 96
};
switch(trk.TrackSubchannelType) switch(trk.TrackSubchannelType)
{ {
case TrackSubchannelType.Packed: case TrackSubchannelType.Packed:
@@ -393,10 +429,6 @@ namespace DiscImageChef.Core
xmlTrk.SubChannel.Image.offset = (long)trk.TrackSubchannelOffset; xmlTrk.SubChannel.Image.offset = (long)trk.TrackSubchannelOffset;
xmlTrk.SubChannel.Image.offsetSpecified = true; xmlTrk.SubChannel.Image.offsetSpecified = true;
} }
xmlTrk.SubChannel.Image.Value = trk.TrackSubchannelFile;
// TODO: Packed subchannel has different size?
xmlTrk.SubChannel.Size = (xmlTrk.EndSector - xmlTrk.StartSector + 1) * 96;
Checksum subChkWorker = new Checksum(); Checksum subChkWorker = new Checksum();
@@ -445,14 +477,15 @@ namespace DiscImageChef.Core
xmlTrk.FileSystemInformation = new PartitionType[partitions.Count]; xmlTrk.FileSystemInformation = new PartitionType[partitions.Count];
for(int i = 0; i < partitions.Count; i++) for(int i = 0; i < partitions.Count; i++)
{ {
xmlTrk.FileSystemInformation[i] = new PartitionType(); xmlTrk.FileSystemInformation[i] = new PartitionType
xmlTrk.FileSystemInformation[i].Description = partitions[i].Description; {
xmlTrk.FileSystemInformation[i].EndSector = (int)(partitions[i].End); Description = partitions[i].Description,
xmlTrk.FileSystemInformation[i].Name = partitions[i].Name; EndSector = (int)(partitions[i].End),
xmlTrk.FileSystemInformation[i].Sequence = (int)partitions[i].Sequence; Name = partitions[i].Name,
xmlTrk.FileSystemInformation[i].StartSector = (int)partitions[i].Start; Sequence = (int)partitions[i].Sequence,
xmlTrk.FileSystemInformation[i].Type = partitions[i].Type; StartSector = (int)partitions[i].Start,
Type = partitions[i].Type
};
List<FileSystemType> lstFs = new List<FileSystemType>(); List<FileSystemType> lstFs = new List<FileSystemType>();
foreach(Filesystem _plugin in plugins.PluginsList.Values) foreach(Filesystem _plugin in plugins.PluginsList.Values)
@@ -489,10 +522,11 @@ namespace DiscImageChef.Core
} }
else else
{ {
xmlTrk.FileSystemInformation[0] = new PartitionType(); xmlTrk.FileSystemInformation[0] = new PartitionType
xmlTrk.FileSystemInformation[0].EndSector = (int)xmlTrk.EndSector; {
xmlTrk.FileSystemInformation[0].StartSector = (int)xmlTrk.StartSector; EndSector = (int)xmlTrk.EndSector,
StartSector = (int)xmlTrk.StartSector
};
List<FileSystemType> lstFs = new List<FileSystemType>(); List<FileSystemType> lstFs = new List<FileSystemType>();
Partition xmlPart = new Partition Partition xmlPart = new Partition
@@ -552,9 +586,7 @@ namespace DiscImageChef.Core
dskType = MediaType.XGD3; dskType = MediaType.XGD3;
} }
Metadata.MediaType.MediaTypeToString(dskType, out string dscType, out string dscSubType);
string dscType, dscSubType;
Metadata.MediaType.MediaTypeToString(dskType, out dscType, out dscSubType);
sidecar.OpticalDisc[0].DiscType = dscType; sidecar.OpticalDisc[0].DiscType = dscType;
sidecar.OpticalDisc[0].DiscSubType = dscSubType; sidecar.OpticalDisc[0].DiscSubType = dscSubType;
Statistics.AddMedia(dskType, false); Statistics.AddMedia(dskType, false);
@@ -564,17 +596,29 @@ namespace DiscImageChef.Core
!string.IsNullOrEmpty(image.ImageInfo.driveFirmwareRevision) || !string.IsNullOrEmpty(image.ImageInfo.driveFirmwareRevision) ||
!string.IsNullOrEmpty(image.ImageInfo.driveSerialNumber)) !string.IsNullOrEmpty(image.ImageInfo.driveSerialNumber))
{ {
sidecar.OpticalDisc[0].DumpHardwareArray = new DumpHardwareType[1]; sidecar.OpticalDisc[0].DumpHardwareArray = new[]
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents = new ExtentType[0]; {
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents[0].Start = 0; new DumpHardwareType
sidecar.OpticalDisc[0].DumpHardwareArray[0].Extents[0].End = image.ImageInfo.sectors; {
sidecar.OpticalDisc[0].DumpHardwareArray[0].Manufacturer = image.ImageInfo.driveManufacturer; Extents = new[]
sidecar.OpticalDisc[0].DumpHardwareArray[0].Model = image.ImageInfo.driveModel; {
sidecar.OpticalDisc[0].DumpHardwareArray[0].Firmware = image.ImageInfo.driveFirmwareRevision; new ExtentType
sidecar.OpticalDisc[0].DumpHardwareArray[0].Serial = image.ImageInfo.driveSerialNumber; {
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software = new SoftwareType(); Start = 0,
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software.Name = image.GetImageApplication(); End = image.ImageInfo.sectors
sidecar.OpticalDisc[0].DumpHardwareArray[0].Software.Version = image.GetImageApplicationVersion(); }
},
Manufacturer = image.ImageInfo.driveManufacturer,
Model = image.ImageInfo.driveModel,
Firmware = image.ImageInfo.driveFirmwareRevision,
Serial = image.ImageInfo.driveSerialNumber,
Software = new SoftwareType
{
Name = image.GetImageApplication(),
Version = image.GetImageApplicationVersion()
}
}
};
} }
} }
} }

View File

@@ -35,11 +35,9 @@
// Copyright (C) 2011-2015 Claunia.com // Copyright (C) 2011-2015 Claunia.com
// ****************************************************************************/ // ****************************************************************************/
// //$Id$ // //$Id$
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using DiscImageChef.CommonTypes;
using DiscImageChef.Decoders.PCMCIA;
using DiscImageChef.Filesystems;
using DiscImageChef.ImagePlugins; using DiscImageChef.ImagePlugins;
using Schemas; using Schemas;