Files
Aaru/Aaru.Gui/ViewModels/ImageInfoViewModel.cs

851 lines
39 KiB
C#
Raw Normal View History

using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive;
using System.Text;
2020-02-27 00:33:26 +00:00
using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Interfaces;
using Aaru.CommonTypes.Structs;
using Aaru.CommonTypes.Structs.Devices.SCSI;
using Aaru.Decoders.CD;
using Aaru.Decoders.SCSI;
using Aaru.Gui.Models;
using Aaru.Gui.Tabs;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using ReactiveUI;
2018-10-07 22:57:48 +01:00
using Schemas;
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
using Session = Aaru.CommonTypes.Structs.Session;
namespace Aaru.Gui.ViewModels
{
public class ImageInfoViewModel : ViewModelBase
{
readonly IMediaImage _imageFormat;
readonly Window _view;
IFilter _filter;
string _imagePath;
2020-02-29 18:03:35 +00:00
public ImageInfoViewModel(string imagePath, IFilter filter, IMediaImage imageFormat, Window view)
2020-02-29 18:03:35 +00:00
{
_imagePath = imagePath;
_filter = filter;
_imageFormat = imageFormat;
_view = view;
IAssetLoader assets = AvaloniaLocator.Current.GetService<IAssetLoader>();
MediaTagsList = new ObservableCollection<string>();
SectorTagsList = new ObservableCollection<string>();
Sessions = new ObservableCollection<Session>();
Tracks = new ObservableCollection<Track>();
DumpHardwareList = new ObservableCollection<DumpHardwareModel>();
EntropyCommand = ReactiveCommand.Create(ExecuteEntropyCommand);
VerifyCommand = ReactiveCommand.Create(ExecuteVerifyCommand);
ChecksumCommand = ReactiveCommand.Create(ExecuteChecksumCommand);
ConvertCommand = ReactiveCommand.Create(ExecuteConvertCommand);
CreateSidecarCommand = ReactiveCommand.Create(ExecuteCreateSidecarCommand);
ViewSectorsCommand = ReactiveCommand.Create(ExecuteViewSectorsCommand);
DecodeMediaTagCommand = ReactiveCommand.Create(ExecuteDecodeMediaTagCommand);
var genericHddIcon =
new Bitmap(assets.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/drive-harddisk.png")));
var genericOpticalIcon =
new Bitmap(assets.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/drive-optical.png")));
var genericFolderIcon =
new Bitmap(assets.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/inode-directory.png")));
var mediaResource = new Uri($"avares://Aaru.Gui/Assets/Logos/Media/{imageFormat.Info.MediaType}.png");
MediaLogo = assets.Exists(mediaResource)
? new Bitmap(assets.Open(mediaResource))
: imageFormat.Info.XmlMediaType == XmlMediaType.BlockMedia
? genericHddIcon
: imageFormat.Info.XmlMediaType == XmlMediaType.OpticalDisc
? genericOpticalIcon
: genericFolderIcon;
ImagePathText = $"Path: {imagePath}";
FilterText = $"Filter: {filter.Name}";
ImageIdentifiedText = $"Image format identified by {imageFormat.Name} ({imageFormat.Id}).";
ImageFormatText = !string.IsNullOrWhiteSpace(imageFormat.Info.Version)
? $"Format: {imageFormat.Format} version {imageFormat.Info.Version}"
: $"Format: {imageFormat.Format}";
ImageSizeText = $"Image without headers is {imageFormat.Info.ImageSize} bytes long";
SectorsText =
$"Contains a media of {imageFormat.Info.Sectors} sectors with a maximum sector size of {imageFormat.Info.SectorSize} bytes (if all sectors are of the same size this would be {imageFormat.Info.Sectors * imageFormat.Info.SectorSize} bytes)";
2020-02-29 18:03:35 +00:00
MediaTypeText =
$"Contains a media of type {imageFormat.Info.MediaType} and XML type {imageFormat.Info.XmlMediaType}";
2020-02-29 18:03:35 +00:00
HasPartitionsText = $"{(imageFormat.Info.HasPartitions ? "Has" : "Doesn't have")} partitions";
HasSessionsText = $"{(imageFormat.Info.HasSessions ? "Has" : "Doesn't have")} sessions";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.Application))
ApplicationText = !string.IsNullOrWhiteSpace(imageFormat.Info.ApplicationVersion)
? $"Was created with {imageFormat.Info.Application} version {imageFormat.Info.ApplicationVersion}"
: $"Was created with {imageFormat.Info.Application}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.Creator))
CreatorText = $"Created by: {imageFormat.Info.Creator}";
2018-10-07 12:45:57 +01:00
if(imageFormat.Info.CreationTime != DateTime.MinValue)
CreationTimeText = $"Created on {imageFormat.Info.CreationTime}";
2018-10-07 12:45:57 +01:00
if(imageFormat.Info.LastModificationTime != DateTime.MinValue)
LastModificationTimeText = $"Last modified on {imageFormat.Info.LastModificationTime}";
2018-10-07 12:45:57 +01:00
2020-02-29 18:03:35 +00:00
if(imageFormat.Info.MediaSequence != 0 &&
imageFormat.Info.LastMediaSequence != 0)
MediaSequenceText =
$"Media is number {imageFormat.Info.MediaSequence} on a set of {imageFormat.Info.LastMediaSequence} medias";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaTitle))
MediaTitleText = $"Media title: {imageFormat.Info.MediaTitle}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaManufacturer))
MediaManufacturerText = $"Media manufacturer: {imageFormat.Info.MediaManufacturer}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaModel))
MediaModelText = $"Media model: {imageFormat.Info.MediaModel}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaSerialNumber))
MediaSerialNumberText = $"Media serial number: {imageFormat.Info.MediaSerialNumber}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaBarcode))
MediaBarcodeText = $"Media barcode: {imageFormat.Info.MediaBarcode}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.MediaPartNumber))
MediaPartNumberText = $"Media part number: {imageFormat.Info.MediaPartNumber}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveManufacturer))
DriveManufacturerText = $"Drive manufacturer: {imageFormat.Info.DriveManufacturer}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveModel))
DriveModelText = $"Drive model: {imageFormat.Info.DriveModel}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveSerialNumber))
DriveSerialNumberText = $"Drive serial number: {imageFormat.Info.DriveSerialNumber}";
2018-10-07 12:45:57 +01:00
if(!string.IsNullOrWhiteSpace(imageFormat.Info.DriveFirmwareRevision))
DriveFirmwareRevisionText = $"Drive firmware info: {imageFormat.Info.DriveFirmwareRevision}";
2018-10-07 12:45:57 +01:00
2020-02-29 18:03:35 +00:00
if(imageFormat.Info.Cylinders > 0 &&
imageFormat.Info.Heads > 0 &&
imageFormat.Info.SectorsPerTrack > 0 &&
imageFormat.Info.XmlMediaType != XmlMediaType.OpticalDisc &&
(!(imageFormat is ITapeImage tapeImage) || !tapeImage.IsTape))
MediaGeometryText =
$"Media geometry: {imageFormat.Info.Cylinders} cylinders, {imageFormat.Info.Heads} heads, {imageFormat.Info.SectorsPerTrack} sectors per track";
2020-02-29 18:03:35 +00:00
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Count > 0)
foreach(MediaTagType tag in imageFormat.Info.ReadableMediaTags.OrderBy(t => t))
MediaTagsList.Add(tag.ToString());
2020-02-29 18:03:35 +00:00
if(imageFormat.Info.ReadableSectorTags != null &&
imageFormat.Info.ReadableSectorTags.Count > 0)
foreach(SectorTagType tag in imageFormat.Info.ReadableSectorTags.OrderBy(t => t))
SectorTagsList.Add(tag.ToString());
PeripheralDeviceTypes scsiDeviceType = PeripheralDeviceTypes.DirectAccess;
byte[] scsiInquiryData = null;
2020-02-29 18:03:35 +00:00
Inquiry? scsiInquiry = null;
Modes.DecodedMode? scsiMode = null;
byte[] scsiModeSense6 = null;
byte[] scsiModeSense10 = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SCSI_INQUIRY))
{
scsiInquiryData = imageFormat.ReadDiskTag(MediaTagType.SCSI_INQUIRY);
scsiDeviceType = (PeripheralDeviceTypes)(scsiInquiryData[0] & 0x1F);
2020-02-29 18:03:35 +00:00
scsiInquiry = Inquiry.Decode(scsiInquiryData);
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SCSI_MODESENSE_6))
{
scsiModeSense6 = imageFormat.ReadDiskTag(MediaTagType.SCSI_MODESENSE_6);
scsiMode = Modes.DecodeMode6(scsiModeSense6, scsiDeviceType);
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SCSI_MODESENSE_10))
{
scsiModeSense10 = imageFormat.ReadDiskTag(MediaTagType.SCSI_MODESENSE_10);
scsiMode = Modes.DecodeMode10(scsiModeSense10, scsiDeviceType);
}
ScsiInfo = new ScsiInfoTab
{
DataContext = new ScsiInfoViewModel(scsiInquiryData, scsiInquiry, null, scsiMode, scsiDeviceType,
scsiModeSense6, scsiModeSense10, null, _view)
};
byte[] ataIdentify = null;
byte[] atapiIdentify = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.ATA_IDENTIFY))
ataIdentify = imageFormat.ReadDiskTag(MediaTagType.ATA_IDENTIFY);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.ATAPI_IDENTIFY))
atapiIdentify = imageFormat.ReadDiskTag(MediaTagType.ATAPI_IDENTIFY);
AtaInfo = new AtaInfoTab
{
DataContext = new AtaInfoViewModel(ataIdentify, atapiIdentify, null, _view)
};
byte[] toc = null;
TOC.CDTOC? decodedToc = null;
byte[] fullToc = null;
FullTOC.CDFullTOC? decodedFullToc = null;
byte[] pma = null;
byte[] atip = null;
ATIP.CDATIP? decodedAtip = null;
byte[] cdtext = null;
CDTextOnLeadIn.CDText? decodedCdText = null;
string mediaCatalogueNumber = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_TOC))
{
toc = imageFormat.ReadDiskTag(MediaTagType.CD_TOC);
if(toc.Length > 0)
{
ushort dataLen = Swapping.Swap(BitConverter.ToUInt16(toc, 0));
2020-02-29 18:03:35 +00:00
if(dataLen + 2 != toc.Length)
{
byte[] tmp = new byte[toc.Length + 2];
Array.Copy(toc, 0, tmp, 2, toc.Length);
tmp[0] = (byte)((toc.Length & 0xFF00) >> 8);
tmp[1] = (byte)(toc.Length & 0xFF);
toc = tmp;
}
decodedToc = TOC.Decode(toc);
}
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_FullTOC))
{
fullToc = imageFormat.ReadDiskTag(MediaTagType.CD_FullTOC);
if(fullToc.Length > 0)
{
ushort dataLen = Swapping.Swap(BitConverter.ToUInt16(fullToc, 0));
2020-02-29 18:03:35 +00:00
if(dataLen + 2 != fullToc.Length)
{
byte[] tmp = new byte[fullToc.Length + 2];
Array.Copy(fullToc, 0, tmp, 2, fullToc.Length);
tmp[0] = (byte)((fullToc.Length & 0xFF00) >> 8);
tmp[1] = (byte)(fullToc.Length & 0xFF);
fullToc = tmp;
}
decodedFullToc = FullTOC.Decode(fullToc);
}
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_PMA))
{
pma = imageFormat.ReadDiskTag(MediaTagType.CD_PMA);
if(pma.Length > 0)
{
ushort dataLen = Swapping.Swap(BitConverter.ToUInt16(pma, 0));
2020-02-29 18:03:35 +00:00
if(dataLen + 2 != pma.Length)
{
byte[] tmp = new byte[pma.Length + 2];
Array.Copy(pma, 0, tmp, 2, pma.Length);
tmp[0] = (byte)((pma.Length & 0xFF00) >> 8);
tmp[1] = (byte)(pma.Length & 0xFF);
pma = tmp;
}
}
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_ATIP))
{
atip = imageFormat.ReadDiskTag(MediaTagType.CD_ATIP);
uint dataLen = Swapping.Swap(BitConverter.ToUInt32(atip, 0));
2020-02-29 18:03:35 +00:00
if(dataLen + 4 != atip.Length)
{
byte[] tmp = new byte[atip.Length + 4];
Array.Copy(atip, 0, tmp, 4, atip.Length);
tmp[0] = (byte)((atip.Length & 0xFF000000) >> 24);
tmp[1] = (byte)((atip.Length & 0xFF0000) >> 16);
tmp[2] = (byte)((atip.Length & 0xFF00) >> 8);
tmp[3] = (byte)(atip.Length & 0xFF);
atip = tmp;
}
decodedAtip = ATIP.Decode(atip);
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_TEXT))
{
cdtext = imageFormat.ReadDiskTag(MediaTagType.CD_TEXT);
uint dataLen = Swapping.Swap(BitConverter.ToUInt32(cdtext, 0));
2020-02-29 18:03:35 +00:00
if(dataLen + 4 != cdtext.Length)
{
byte[] tmp = new byte[cdtext.Length + 4];
Array.Copy(cdtext, 0, tmp, 4, cdtext.Length);
tmp[0] = (byte)((cdtext.Length & 0xFF000000) >> 24);
tmp[1] = (byte)((cdtext.Length & 0xFF0000) >> 16);
tmp[2] = (byte)((cdtext.Length & 0xFF00) >> 8);
tmp[3] = (byte)(cdtext.Length & 0xFF);
cdtext = tmp;
}
decodedCdText = CDTextOnLeadIn.Decode(cdtext);
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.CD_MCN))
{
byte[] mcn = imageFormat.ReadDiskTag(MediaTagType.CD_MCN);
mediaCatalogueNumber = Encoding.UTF8.GetString(mcn);
}
CompactDiscInfo = new CompactDiscInfoTab
{
DataContext = new CompactDiscInfoViewModel(toc, atip, null, null, fullToc, pma, cdtext, decodedToc,
decodedAtip, null, decodedFullToc, decodedCdText, null,
mediaCatalogueNumber, null, _view)
};
2020-02-29 18:03:35 +00:00
/* TODO: tabDvdInfo
byte[] dvdPfi = null;
byte[] dvdDmi = null;
byte[] dvdCmi = null;
byte[] hddvdCopyrightInformation = null;
byte[] dvdBca = null;
PFI.PhysicalFormatInformation? decodedPfi = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_PFI))
{
dvdPfi = imageFormat.ReadDiskTag(MediaTagType.DVD_PFI);
decodedPfi = PFI.Decode(dvdPfi);
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_DMI))
dvdDmi = imageFormat.ReadDiskTag(MediaTagType.DVD_DMI);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_CMI))
dvdCmi = imageFormat.ReadDiskTag(MediaTagType.DVD_CMI);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.HDDVD_CPI))
hddvdCopyrightInformation = imageFormat.ReadDiskTag(MediaTagType.HDDVD_CPI);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_BCA))
dvdBca = imageFormat.ReadDiskTag(MediaTagType.DVD_BCA);
2020-02-29 18:03:35 +00:00
var tabDvdInfo = new tabDvdInfo();
tabDvdInfo.LoadData(imageFormat.Info.MediaType, dvdPfi, dvdDmi, dvdCmi, hddvdCopyrightInformation, dvdBca,
null, decodedPfi);
2020-02-29 18:03:35 +00:00
tabInfos.Pages.Add(tabDvdInfo);
*/
/* TODO: tabDvdWritableinfo
byte[] dvdRamDds = null;
byte[] dvdRamCartridgeStatus = null;
byte[] dvdRamSpareArea = null;
byte[] lastBorderOutRmd = null;
byte[] dvdPreRecordedInfo = null;
byte[] dvdrMediaIdentifier = null;
byte[] dvdrPhysicalInformation = null;
byte[] hddvdrMediumStatus = null;
byte[] dvdrLayerCapacity = null;
byte[] dvdrDlMiddleZoneStart = null;
byte[] dvdrDlJumpIntervalSize = null;
byte[] dvdrDlManualLayerJumpStartLba = null;
byte[] dvdPlusAdip = null;
byte[] dvdPlusDcb = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_DDS))
dvdRamDds = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_DDS);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_MediumStatus))
dvdRamCartridgeStatus = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_MediumStatus);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDRAM_SpareArea))
dvdRamSpareArea = imageFormat.ReadDiskTag(MediaTagType.DVDRAM_SpareArea);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_RMD))
lastBorderOutRmd = imageFormat.ReadDiskTag(MediaTagType.DVDR_RMD);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_PreRecordedInfo))
dvdPreRecordedInfo = imageFormat.ReadDiskTag(MediaTagType.DVDR_PreRecordedInfo);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_MediaIdentifier))
dvdrMediaIdentifier = imageFormat.ReadDiskTag(MediaTagType.DVDR_MediaIdentifier);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDR_PFI))
dvdrPhysicalInformation = imageFormat.ReadDiskTag(MediaTagType.DVDR_PFI);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.HDDVD_MediumStatus))
hddvdrMediumStatus = imageFormat.ReadDiskTag(MediaTagType.HDDVD_MediumStatus);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_LayerCapacity))
dvdrLayerCapacity = imageFormat.ReadDiskTag(MediaTagType.DVDDL_LayerCapacity);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_MiddleZoneAddress))
dvdrDlMiddleZoneStart = imageFormat.ReadDiskTag(MediaTagType.DVDDL_MiddleZoneAddress);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_JumpIntervalSize))
dvdrDlJumpIntervalSize = imageFormat.ReadDiskTag(MediaTagType.DVDDL_JumpIntervalSize);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVDDL_ManualLayerJumpLBA))
dvdrDlManualLayerJumpStartLba = imageFormat.ReadDiskTag(MediaTagType.DVDDL_ManualLayerJumpLBA);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DVD_ADIP))
dvdPlusAdip = imageFormat.ReadDiskTag(MediaTagType.DVD_ADIP);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.DCB))
dvdPlusDcb = imageFormat.ReadDiskTag(MediaTagType.DCB);
2020-02-29 18:03:35 +00:00
var tabDvdWritableInfo = new tabDvdWritableInfo();
tabDvdWritableInfo.LoadData(imageFormat.Info.MediaType, dvdRamDds, dvdRamCartridgeStatus, dvdRamSpareArea,
lastBorderOutRmd, dvdPreRecordedInfo, dvdrMediaIdentifier,
dvdrPhysicalInformation, hddvdrMediumStatus, null, dvdrLayerCapacity,
dvdrDlMiddleZoneStart, dvdrDlJumpIntervalSize, dvdrDlManualLayerJumpStartLba,
null, dvdPlusAdip, dvdPlusDcb);
2020-02-29 18:03:35 +00:00
tabInfos.Pages.Add(tabDvdWritableInfo);
*/
/* TODO: tabBlurayInfo
byte[] blurayBurstCuttingArea = null;
byte[] blurayCartridgeStatus = null;
byte[] blurayDds = null;
byte[] blurayDiscInformation = null;
byte[] blurayPowResources = null;
byte[] bluraySpareAreaInformation = null;
byte[] blurayTrackResources = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_BCA))
blurayBurstCuttingArea = imageFormat.ReadDiskTag(MediaTagType.BD_BCA);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_CartridgeStatus))
blurayCartridgeStatus = imageFormat.ReadDiskTag(MediaTagType.BD_CartridgeStatus);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_DDS))
blurayDds = imageFormat.ReadDiskTag(MediaTagType.BD_DDS);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_DI))
blurayDiscInformation = imageFormat.ReadDiskTag(MediaTagType.BD_DI);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_POWResourcesInformation))
blurayPowResources = imageFormat.ReadDiskTag(MediaTagType.MMC_POWResourcesInformation);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.BD_SpareArea))
bluraySpareAreaInformation = imageFormat.ReadDiskTag(MediaTagType.BD_SpareArea);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_TrackResourcesInformation))
bluraySpareAreaInformation = imageFormat.ReadDiskTag(MediaTagType.MMC_TrackResourcesInformation);
2020-02-29 18:03:35 +00:00
var tabBlurayInfo = new tabBlurayInfo();
tabBlurayInfo.LoadData(blurayDiscInformation, blurayBurstCuttingArea, blurayDds, blurayCartridgeStatus,
bluraySpareAreaInformation, blurayPowResources, blurayTrackResources, null, null);
2020-02-29 18:03:35 +00:00
tabInfos.Pages.Add(tabBlurayInfo);
*/
/* TODO: tabXboxInfo
byte[] xboxDmi = null;
byte[] xboxSecuritySector = null;
SS.SecuritySector? decodedXboxSecuritySector = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.Xbox_DMI))
xboxDmi = imageFormat.ReadDiskTag(MediaTagType.Xbox_DMI);
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.Xbox_SecuritySector))
{
xboxSecuritySector = imageFormat.ReadDiskTag(MediaTagType.Xbox_SecuritySector);
decodedXboxSecuritySector = SS.Decode(xboxSecuritySector);
}
2020-02-29 18:03:35 +00:00
var tabXboxInfo = new tabXboxInfo();
tabXboxInfo.LoadData(null, xboxDmi, xboxSecuritySector, decodedXboxSecuritySector);
tabInfos.Pages.Add(tabXboxInfo);
*/
/* TODO: tabPcmciaInfo
byte[] pcmciaCis = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.PCMCIA_CIS))
pcmciaCis = imageFormat.ReadDiskTag(MediaTagType.PCMCIA_CIS);
2020-02-29 18:03:35 +00:00
var tabPcmciaInfo = new tabPcmciaInfo();
tabPcmciaInfo.LoadData(pcmciaCis);
tabInfos.Pages.Add(tabPcmciaInfo);
*/
/* TODO: tabSdMmcInfo
DeviceType deviceType = DeviceType.Unknown;
byte[] cid = null;
byte[] csd = null;
byte[] ocr = null;
byte[] extendedCsd = null;
byte[] scr = null;
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_CID))
{
cid = imageFormat.ReadDiskTag(MediaTagType.SD_CID);
deviceType = DeviceType.SecureDigital;
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_CSD))
{
csd = imageFormat.ReadDiskTag(MediaTagType.SD_CSD);
deviceType = DeviceType.SecureDigital;
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_OCR))
{
ocr = imageFormat.ReadDiskTag(MediaTagType.SD_OCR);
deviceType = DeviceType.SecureDigital;
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.SD_SCR))
{
scr = imageFormat.ReadDiskTag(MediaTagType.SD_SCR);
deviceType = DeviceType.SecureDigital;
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_CID))
{
cid = imageFormat.ReadDiskTag(MediaTagType.MMC_CID);
deviceType = DeviceType.MMC;
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_CSD))
{
csd = imageFormat.ReadDiskTag(MediaTagType.MMC_CSD);
deviceType = DeviceType.MMC;
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_OCR))
{
ocr = imageFormat.ReadDiskTag(MediaTagType.MMC_OCR);
deviceType = DeviceType.MMC;
}
if(imageFormat.Info.ReadableMediaTags != null &&
imageFormat.Info.ReadableMediaTags.Contains(MediaTagType.MMC_ExtendedCSD))
{
extendedCsd = imageFormat.ReadDiskTag(MediaTagType.MMC_ExtendedCSD);
deviceType = DeviceType.MMC;
}
2020-02-29 18:03:35 +00:00
var tabSdMmcInfo = new tabSdMmcInfo();
tabSdMmcInfo.LoadData(deviceType, cid, csd, ocr, extendedCsd, scr);
tabInfos.Pages.Add(tabSdMmcInfo);
*/
if(imageFormat is IOpticalMediaImage opticalMediaImage)
2018-10-07 22:36:42 +01:00
{
try
2018-10-07 22:36:42 +01:00
{
2020-02-29 18:03:35 +00:00
if(opticalMediaImage.Sessions != null &&
opticalMediaImage.Sessions.Count > 0)
foreach(Session session in opticalMediaImage.Sessions)
Sessions.Add(session);
}
catch
{
// ignored
2018-10-07 22:36:42 +01:00
}
2018-10-07 22:44:54 +01:00
try
2018-10-07 22:44:54 +01:00
{
2020-02-29 18:03:35 +00:00
if(opticalMediaImage.Tracks != null &&
opticalMediaImage.Tracks.Count > 0)
foreach(Track track in opticalMediaImage.Tracks)
Tracks.Add(track);
}
catch
{
// ignored
2018-10-07 22:44:54 +01:00
}
}
2018-10-07 22:57:48 +01:00
if(imageFormat.DumpHardware is null)
2020-02-29 18:03:35 +00:00
return;
2018-10-07 22:57:48 +01:00
foreach(DumpHardwareType dump in imageFormat.DumpHardware)
{
foreach(ExtentType extent in dump.Extents)
DumpHardwareList.Add(new DumpHardwareModel
2018-10-07 22:57:48 +01:00
{
Manufacturer = dump.Manufacturer, Model = dump.Model, Serial = dump.Serial,
SoftwareName = dump.Software.Name, SoftwareVersion = dump.Software.Version,
OperatingSystem = dump.Software.OperatingSystem, Start = extent.Start, End = extent.End
2018-10-07 22:57:48 +01:00
});
}
}
public ScsiInfoTab ScsiInfo { get; }
public AtaInfoTab AtaInfo { get; }
public CompactDiscInfoTab CompactDiscInfo { get; }
public Bitmap MediaLogo { get; }
public string ImagePathText { get; }
public string FilterText { get; }
public string ImageIdentifiedText { get; }
public string MediaTypeText { get; set; }
public string SectorsText { get; set; }
public string HasPartitionsText { get; set; }
public string HasSessionsText { get; set; }
public string ApplicationText { get; set; }
public string CreatorText { get; set; }
public string CreationTimeText { get; set; }
public string LastModificationTimeText { get; set; }
public string MediaSequenceText { get; set; }
public string MediaTitleText { get; set; }
public string MediaManufacturerText { get; set; }
public string MediaModelText { get; set; }
public string MediaSerialNumberText { get; set; }
public string MediaBarcodeText { get; set; }
public string MediaPartNumberText { get; set; }
public string CommentsText => _imageFormat.Info.Comments;
public string DriveManufacturerText { get; set; }
public string DriveModelText { get; set; }
public string DriveSerialNumberText { get; set; }
public string DriveFirmwareRevisionText { get; set; }
public string MediaGeometryText { get; set; }
public ObservableCollection<string> MediaTagsList { get; }
public ObservableCollection<string> SectorTagsList { get; }
public string ImageSizeText { get; set; }
public string ImageFormatText { get; set; }
public ObservableCollection<Session> Sessions { get; }
public ObservableCollection<Track> Tracks { get; }
public ObservableCollection<DumpHardwareModel> DumpHardwareList { get; }
public ReactiveCommand<Unit, Unit> EntropyCommand { get; }
public ReactiveCommand<Unit, Unit> VerifyCommand { get; }
public ReactiveCommand<Unit, Unit> ChecksumCommand { get; }
public ReactiveCommand<Unit, Unit> ConvertCommand { get; }
public ReactiveCommand<Unit, Unit> CreateSidecarCommand { get; }
public ReactiveCommand<Unit, Unit> ViewSectorsCommand { get; }
public ReactiveCommand<Unit, Unit> DecodeMediaTagCommand { get; }
public bool DriveInformationVisible => DriveManufacturerText != null || DriveModelText != null ||
DriveSerialNumberText != null || DriveFirmwareRevisionText != null ||
MediaGeometryText != null;
public bool MediaInformationVisible => MediaSequenceText != null || MediaTitleText != null ||
MediaManufacturerText != null || MediaModelText != null ||
MediaSerialNumberText != null || MediaBarcodeText != null ||
MediaPartNumberText != null;
protected void ExecuteEntropyCommand()
2018-10-14 19:10:30 +01:00
{
/* TODO: frmImageEntropy
2018-10-14 19:10:30 +01:00
if(frmImageEntropy != null)
{
frmImageEntropy.Show();
2020-02-29 18:03:35 +00:00
2018-10-14 19:10:30 +01:00
return;
}
2020-02-29 18:03:35 +00:00
frmImageEntropy = new frmImageEntropy(imageFormat);
frmImageEntropy.Closed += (s, ea) =>
{
frmImageEntropy = null;
};
2018-10-14 19:10:30 +01:00
frmImageEntropy.Show();
*/
2018-10-14 19:10:30 +01:00
}
protected void ExecuteVerifyCommand()
2018-10-17 22:12:51 +01:00
{
/* TODO: frmImageVerify
2018-10-17 22:12:51 +01:00
if(frmImageVerify != null)
{
frmImageVerify.Show();
2020-02-29 18:03:35 +00:00
2018-10-17 22:12:51 +01:00
return;
}
2020-02-29 18:03:35 +00:00
frmImageVerify = new frmImageVerify(imageFormat);
frmImageVerify.Closed += (s, ea) =>
{
frmImageVerify = null;
};
2018-10-17 22:12:51 +01:00
frmImageVerify.Show();
*/
2018-10-17 22:12:51 +01:00
}
protected void ExecuteChecksumCommand()
2018-10-18 22:24:40 +01:00
{
/* TODO: frmImageChecksum
2018-10-18 22:24:40 +01:00
if(frmImageChecksum != null)
{
frmImageChecksum.Show();
2020-02-29 18:03:35 +00:00
2018-10-18 22:24:40 +01:00
return;
}
2020-02-29 18:03:35 +00:00
frmImageChecksum = new frmImageChecksum(imageFormat);
frmImageChecksum.Closed += (s, ea) =>
{
frmImageChecksum = null;
};
2018-10-18 22:24:40 +01:00
frmImageChecksum.Show();
*/
2018-10-18 22:24:40 +01:00
}
protected void ExecuteConvertCommand()
2018-10-23 23:59:33 +01:00
{
/* TODO: frmImageConvert
2018-10-23 23:59:33 +01:00
if(frmImageConvert != null)
{
frmImageConvert.Show();
2020-02-29 18:03:35 +00:00
2018-10-23 23:59:33 +01:00
return;
}
2020-02-29 18:03:35 +00:00
frmImageConvert = new frmImageConvert(imageFormat, imagePath);
frmImageConvert.Closed += (s, ea) =>
{
frmImageConvert = null;
};
2018-10-23 23:59:33 +01:00
frmImageConvert.Show();
*/
2018-10-23 23:59:33 +01:00
}
protected void ExecuteCreateSidecarCommand()
{
/* TODO: frmImageSidecar
if(frmImageSidecar != null)
{
frmImageSidecar.Show();
2020-02-29 18:03:35 +00:00
return;
}
// TODO: Pass thru chosen default encoding
2020-02-29 18:03:35 +00:00
frmImageSidecar = new frmImageSidecar(imageFormat, imagePath, filter.Id, null);
frmImageSidecar.Closed += (s, ea) =>
{
frmImageSidecar = null;
};
frmImageSidecar.Show();
*/
}
protected void ExecuteViewSectorsCommand()
{
/* TODO: frmPrintHex
if(frmPrintHex != null)
{
frmPrintHex.Show();
2020-02-29 18:03:35 +00:00
return;
}
2020-02-29 18:03:35 +00:00
frmPrintHex = new frmPrintHex(imageFormat);
frmPrintHex.Closed += (s, ea) =>
{
frmPrintHex = null;
};
frmPrintHex.Show();
*/
}
protected void ExecuteDecodeMediaTagCommand()
2018-11-18 23:01:16 +00:00
{
/* TODO: frmDecodeMediaTags
2018-11-18 23:01:16 +00:00
if(frmDecodeMediaTags != null)
{
frmDecodeMediaTags.Show();
2020-02-29 18:03:35 +00:00
2018-11-18 23:01:16 +00:00
return;
}
2020-02-29 18:03:35 +00:00
frmDecodeMediaTags = new frmDecodeMediaTags(imageFormat);
frmDecodeMediaTags.Closed += (s, ea) =>
{
frmDecodeMediaTags = null;
};
2018-11-18 23:01:16 +00:00
frmDecodeMediaTags.Show();
*/
2018-11-18 23:01:16 +00:00
}
}
}