2018-10-03 00:05:25 +01:00
using System ;
2020-04-12 02:32:03 +01:00
using System.Collections.ObjectModel ;
2018-10-07 14:38:02 +01:00
using System.Linq ;
2020-04-12 02:32:03 +01:00
using System.Reactive ;
2020-04-12 14:19:12 +01:00
using System.Text ;
2020-02-27 00:33:26 +00:00
using Aaru.CommonTypes.Enums ;
using Aaru.CommonTypes.Interfaces ;
using Aaru.CommonTypes.Structs ;
2020-04-12 04:14:48 +01:00
using Aaru.CommonTypes.Structs.Devices.SCSI ;
2020-04-12 14:19:12 +01:00
using Aaru.Decoders.CD ;
2020-04-12 15:04:48 +01:00
using Aaru.Decoders.DVD ;
2020-04-12 04:14:48 +01:00
using Aaru.Decoders.SCSI ;
2020-04-12 18:59:16 +01:00
using Aaru.Decoders.Xbox ;
2020-04-12 02:32:03 +01:00
using Aaru.Gui.Models ;
2020-04-12 04:14:48 +01:00
using Aaru.Gui.Tabs ;
2020-04-12 21:32:27 +01:00
using Aaru.Gui.Views ;
2020-04-12 02:32:03 +01:00
using Avalonia ;
2020-04-12 04:14:48 +01:00
using Avalonia.Controls ;
2020-04-12 02:32:03 +01:00
using Avalonia.Media.Imaging ;
using Avalonia.Platform ;
using ReactiveUI ;
2018-10-07 22:57:48 +01:00
using Schemas ;
2020-04-12 04:14:48 +01:00
using Inquiry = Aaru . CommonTypes . Structs . Devices . SCSI . Inquiry ;
2020-04-12 14:19:12 +01:00
using Session = Aaru . CommonTypes . Structs . Session ;
2018-10-03 00:05:25 +01:00
2020-04-12 02:32:03 +01:00
namespace Aaru.Gui.ViewModels
2018-10-03 00:05:25 +01:00
{
2020-04-12 04:14:48 +01:00
public class ImageInfoViewModel : ViewModelBase
2018-10-03 00:05:25 +01:00
{
2020-04-14 18:57:30 +01:00
readonly IFilter _filter ;
2020-04-14 17:44:46 +01:00
readonly IMediaImage _imageFormat ;
readonly string _imagePath ;
readonly Window _view ;
DecodeMediaTagsWindow _decodeMediaTagsWindow ;
ImageChecksumWindow _imageChecksumWindow ;
ImageConvertWindow _imageConvertWindow ;
ImageEntropyWindow _imageEntropyWindow ;
2020-04-14 18:57:30 +01:00
ImageSidecarWindow _imageSidecarWindow ;
2020-04-14 17:44:46 +01:00
ImageVerifyWindow _imageVerifyWindow ;
ViewSectorWindow _viewSectorWindow ;
2020-02-29 18:03:35 +00:00
2020-04-12 04:14:48 +01:00
public ImageInfoViewModel ( string imagePath , IFilter filter , IMediaImage imageFormat , Window view )
2020-02-29 18:03:35 +00:00
2020-04-12 02:32:03 +01:00
{
_imagePath = imagePath ;
_filter = filter ;
_imageFormat = imageFormat ;
2020-04-12 04:14:48 +01:00
_view = view ;
2020-04-12 02:32:03 +01:00
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 =
2018-10-03 00:05:25 +01:00
$"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
2020-04-12 02:32:03 +01:00
MediaTypeText =
2018-10-03 00:05:25 +01:00
$"Contains a media of type {imageFormat.Info.MediaType} and XML type {imageFormat.Info.XmlMediaType}" ;
2020-02-29 18:03:35 +00:00
2020-04-12 02:32:03 +01: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 ) )
2020-04-12 02:32:03 +01:00
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 ) )
2020-04-12 02:32:03 +01:00
CreatorText = $"Created by: {imageFormat.Info.Creator}" ;
2018-10-07 12:45:57 +01:00
if ( imageFormat . Info . CreationTime ! = DateTime . MinValue )
2020-04-12 02:32:03 +01:00
CreationTimeText = $"Created on {imageFormat.Info.CreationTime}" ;
2018-10-07 12:45:57 +01:00
if ( imageFormat . Info . LastModificationTime ! = DateTime . MinValue )
2020-04-12 02:32:03 +01:00
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 )
2020-04-12 02:32:03 +01:00
MediaSequenceText =
2018-10-03 00:05:25 +01:00
$"Media is number {imageFormat.Info.MediaSequence} on a set of {imageFormat.Info.LastMediaSequence} medias" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaTitle ) )
2020-04-12 02:32:03 +01:00
MediaTitleText = $"Media title: {imageFormat.Info.MediaTitle}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaManufacturer ) )
2020-04-12 02:32:03 +01:00
MediaManufacturerText = $"Media manufacturer: {imageFormat.Info.MediaManufacturer}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaModel ) )
2020-04-12 02:32:03 +01:00
MediaModelText = $"Media model: {imageFormat.Info.MediaModel}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaSerialNumber ) )
2020-04-12 02:32:03 +01:00
MediaSerialNumberText = $"Media serial number: {imageFormat.Info.MediaSerialNumber}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaBarcode ) )
2020-04-12 02:32:03 +01:00
MediaBarcodeText = $"Media barcode: {imageFormat.Info.MediaBarcode}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaPartNumber ) )
2020-04-12 02:32:03 +01:00
MediaPartNumberText = $"Media part number: {imageFormat.Info.MediaPartNumber}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveManufacturer ) )
2020-04-12 02:32:03 +01:00
DriveManufacturerText = $"Drive manufacturer: {imageFormat.Info.DriveManufacturer}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveModel ) )
2020-04-12 02:32:03 +01:00
DriveModelText = $"Drive model: {imageFormat.Info.DriveModel}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveSerialNumber ) )
2020-04-12 02:32:03 +01:00
DriveSerialNumberText = $"Drive serial number: {imageFormat.Info.DriveSerialNumber}" ;
2018-10-07 12:45:57 +01:00
2018-10-03 00:05:25 +01:00
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveFirmwareRevision ) )
2020-04-12 02:32:03 +01:00
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 & &
2019-05-02 19:41:49 +01:00
imageFormat . Info . SectorsPerTrack > 0 & &
imageFormat . Info . XmlMediaType ! = XmlMediaType . OpticalDisc & &
( ! ( imageFormat is ITapeImage tapeImage ) | | ! tapeImage . IsTape ) )
2020-04-12 02:32:03 +01:00
MediaGeometryText =
2018-10-03 00:05:25 +01:00
$"Media geometry: {imageFormat.Info.Cylinders} cylinders, {imageFormat.Info.Heads} heads, {imageFormat.Info.SectorsPerTrack} sectors per track" ;
2018-10-07 14:38:02 +01:00
2020-02-29 18:03:35 +00:00
if ( imageFormat . Info . ReadableMediaTags ! = null & &
imageFormat . Info . ReadableMediaTags . Count > 0 )
2018-10-07 14:38:02 +01:00
foreach ( MediaTagType tag in imageFormat . Info . ReadableMediaTags . OrderBy ( t = > t ) )
2020-04-12 02:32:03 +01:00
MediaTagsList . Add ( tag . ToString ( ) ) ;
2018-10-07 14:38:02 +01:00
2020-02-29 18:03:35 +00:00
if ( imageFormat . Info . ReadableSectorTags ! = null & &
imageFormat . Info . ReadableSectorTags . Count > 0 )
2018-10-07 14:38:02 +01:00
foreach ( SectorTagType tag in imageFormat . Info . ReadableSectorTags . OrderBy ( t = > t ) )
2020-04-12 02:32:03 +01:00
SectorTagsList . Add ( tag . ToString ( ) ) ;
2018-10-07 15:49:12 +01:00
PeripheralDeviceTypes scsiDeviceType = PeripheralDeviceTypes . DirectAccess ;
byte [ ] scsiInquiryData = null ;
2020-02-29 18:03:35 +00:00
Inquiry ? scsiInquiry = null ;
2018-10-07 16:32:32 +01:00
Modes . DecodedMode ? scsiMode = null ;
2018-10-07 15:49:12 +01:00
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 ) ;
2018-10-07 15:49:12 +01:00
}
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 ) ;
}
2020-04-12 04:14:48 +01:00
ScsiInfo = new ScsiInfoTab
{
DataContext = new ScsiInfoViewModel ( scsiInquiryData , scsiInquiry , null , scsiMode , scsiDeviceType ,
scsiModeSense6 , scsiModeSense10 , null , _view )
} ;
2018-10-07 16:32:32 +01:00
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 ) ;
2020-04-12 13:44:42 +01:00
AtaInfo = new AtaInfoTab
{
DataContext = new AtaInfoViewModel ( ataIdentify , atapiIdentify , null , _view )
} ;
2018-10-07 17:22:58 +01:00
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
2018-10-07 17:22:58 +01: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
2018-10-07 17:22:58 +01: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
2018-10-07 17:22:58 +01: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
2018-10-07 17:22:58 +01: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
2018-10-07 17:22:58 +01: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 ) ;
}
2020-04-12 14:19:12 +01:00
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
2018-10-07 17:53:37 +01:00
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-04-12 17:32:57 +01:00
DvdInfo = new DvdInfoTab
{
DataContext = new DvdInfoViewModel ( imageFormat . Info . MediaType , dvdPfi , dvdDmi , dvdCmi ,
hddvdCopyrightInformation , dvdBca , null , decodedPfi , _view )
} ;
2018-10-07 18:51:19 +01:00
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-04-12 15:30:35 +01:00
DvdWritableInfo = new DvdWritableInfoTab
{
DataContext = new DvdWritableInfoViewModel ( imageFormat . Info . MediaType , dvdRamDds , dvdRamCartridgeStatus ,
dvdRamSpareArea , lastBorderOutRmd , dvdPreRecordedInfo ,
dvdrMediaIdentifier , dvdrPhysicalInformation ,
hddvdrMediumStatus , null , dvdrLayerCapacity ,
dvdrDlMiddleZoneStart , dvdrDlJumpIntervalSize ,
dvdrDlManualLayerJumpStartLba , null , dvdPlusAdip , dvdPlusDcb ,
_view )
} ;
2020-02-29 18:03:35 +00:00
2018-10-07 19:56:38 +01:00
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-04-12 16:34:20 +01:00
BlurayInfo = new BlurayInfoTab
{
DataContext = new BlurayInfoViewModel ( blurayDiscInformation , blurayBurstCuttingArea , blurayDds ,
blurayCartridgeStatus , bluraySpareAreaInformation ,
blurayPowResources , blurayTrackResources , null , null , _view )
} ;
2020-02-29 18:03:35 +00:00
2018-10-07 20:25:04 +01:00
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-04-12 18:59:16 +01:00
XboxInfo = new XboxInfoTab
{
DataContext = new XboxInfoViewModel ( null , xboxDmi , xboxSecuritySector , decodedXboxSecuritySector , _view )
} ;
2018-10-07 21:08:39 +01:00
byte [ ] pcmciaCis = null ;
if ( imageFormat . Info . ReadableMediaTags ! = null & &
imageFormat . Info . ReadableMediaTags . Contains ( MediaTagType . PCMCIA_CIS ) )
pcmciaCis = imageFormat . ReadDiskTag ( MediaTagType . PCMCIA_CIS ) ;
2020-04-12 17:32:57 +01:00
PcmciaInfo = new PcmciaInfoTab
2018-10-07 22:13:23 +01:00
{
2020-04-12 17:32:57 +01:00
DataContext = new PcmciaInfoViewModel ( pcmciaCis , _view )
} ;
2018-10-07 22:13:23 +01:00
2020-04-12 17:53:16 +01:00
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 ;
}
SdMmcInfo = new SdMmcInfoTab
{
DataContext = new SdMmcInfoViewModel ( deviceType , cid , csd , ocr , extendedCsd , scr )
} ;
2019-01-20 20:11:10 +00:00
if ( imageFormat is IOpticalMediaImage opticalMediaImage )
2018-10-07 22:36:42 +01:00
{
2019-01-20 20:11:10 +00: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 )
2019-01-20 20:11:10 +00:00
foreach ( Session session in opticalMediaImage . Sessions )
2020-04-12 02:32:03 +01:00
Sessions . Add ( session ) ;
2019-01-20 20:11:10 +00:00
}
catch
{
// ignored
2018-10-07 22:36:42 +01:00
}
2018-10-07 22:44:54 +01:00
2019-01-20 20:11:10 +00: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 )
2019-01-20 20:11:10 +00:00
foreach ( Track track in opticalMediaImage . Tracks )
2020-04-12 02:32:03 +01:00
Tracks . Add ( track ) ;
2019-01-20 20:11:10 +00:00
}
catch
{
// ignored
2018-10-07 22:44:54 +01:00
}
}
2018-10-07 22:57:48 +01:00
2020-04-12 02:32:03 +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 )
2020-04-12 02:32:03 +01:00
DumpHardwareList . Add ( new DumpHardwareModel
2018-10-07 22:57:48 +01:00
{
2020-04-12 02:32:03 +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
} ) ;
}
2018-10-03 00:05:25 +01:00
}
2020-04-12 13:44:42 +01:00
public ScsiInfoTab ScsiInfo { get ; }
public AtaInfoTab AtaInfo { get ; }
2020-04-12 14:19:12 +01:00
public CompactDiscInfoTab CompactDiscInfo { get ; }
2020-04-12 15:04:48 +01:00
public DvdInfoTab DvdInfo { get ; }
2020-04-12 15:30:35 +01:00
public DvdWritableInfoTab DvdWritableInfo { get ; }
2020-04-12 16:34:20 +01:00
public BlurayInfoTab BlurayInfo { get ; }
2020-04-12 18:59:16 +01:00
public XboxInfoTab XboxInfo { get ; }
2020-04-12 17:32:57 +01:00
public PcmciaInfoTab PcmciaInfo { get ; }
2020-04-12 17:53:16 +01:00
public SdMmcInfoTab SdMmcInfo { get ; }
2020-04-12 02:32:03 +01:00
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
{
2020-04-12 22:29:24 +01:00
if ( _imageEntropyWindow ! = null )
2018-10-14 19:10:30 +01:00
{
2020-04-12 22:29:24 +01:00
_imageEntropyWindow . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-14 19:10:30 +01:00
return ;
}
2020-04-12 22:29:24 +01:00
_imageEntropyWindow = new ImageEntropyWindow ( ) ;
_imageEntropyWindow . DataContext = new ImageEntropyViewModel ( _imageFormat , _imageEntropyWindow ) ;
2020-02-29 18:03:35 +00:00
2020-04-12 22:29:24 +01:00
_imageEntropyWindow . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-12 22:29:24 +01:00
_imageEntropyWindow = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-12 22:29:24 +01:00
_imageEntropyWindow . Show ( ) ;
2018-10-14 19:10:30 +01:00
}
2020-04-12 02:32:03 +01:00
protected void ExecuteVerifyCommand ( )
2018-10-17 22:12:51 +01:00
{
2020-04-13 01:19:55 +01:00
if ( _imageVerifyWindow ! = null )
2018-10-17 22:12:51 +01:00
{
2020-04-13 01:19:55 +01:00
_imageVerifyWindow . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-17 22:12:51 +01:00
return ;
}
2020-04-13 01:19:55 +01:00
_imageVerifyWindow = new ImageVerifyWindow ( ) ;
_imageVerifyWindow . DataContext = new ImageVerifyViewModel ( _imageFormat , _imageVerifyWindow ) ;
2020-02-29 18:03:35 +00:00
2020-04-13 01:19:55 +01:00
_imageVerifyWindow . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-13 01:19:55 +01:00
_imageVerifyWindow = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-13 01:19:55 +01:00
_imageVerifyWindow . Show ( ) ;
2018-10-17 22:12:51 +01:00
}
2020-04-12 02:32:03 +01:00
protected void ExecuteChecksumCommand ( )
2018-10-18 22:24:40 +01:00
{
2020-04-12 21:32:27 +01:00
if ( _imageChecksumWindow ! = null )
2018-10-18 22:24:40 +01:00
{
2020-04-12 21:32:27 +01:00
_imageChecksumWindow . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-18 22:24:40 +01:00
return ;
}
2020-04-12 21:32:27 +01:00
_imageChecksumWindow = new ImageChecksumWindow ( ) ;
_imageChecksumWindow . DataContext = new ImageChecksumViewModel ( _imageFormat , _imageChecksumWindow ) ;
2020-02-29 18:03:35 +00:00
2020-04-12 21:32:27 +01:00
_imageChecksumWindow . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-12 21:32:27 +01:00
_imageChecksumWindow = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-12 21:32:27 +01:00
_imageChecksumWindow . Show ( ) ;
2018-10-18 22:24:40 +01:00
}
2020-04-12 02:32:03 +01:00
protected void ExecuteConvertCommand ( )
2018-10-23 23:59:33 +01:00
{
2020-04-13 04:40:35 +01:00
if ( _imageConvertWindow ! = null )
2018-10-23 23:59:33 +01:00
{
2020-04-13 04:40:35 +01:00
_imageConvertWindow . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-23 23:59:33 +01:00
return ;
}
2020-04-13 04:40:35 +01:00
_imageConvertWindow = new ImageConvertWindow ( ) ;
_imageConvertWindow . DataContext = new ImageConvertViewModel ( _imageFormat , _imagePath , _imageConvertWindow ) ;
2020-02-29 18:03:35 +00:00
2020-04-13 04:40:35 +01:00
_imageConvertWindow . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-13 04:40:35 +01:00
_imageConvertWindow = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-13 04:40:35 +01:00
_imageConvertWindow . Show ( ) ;
2018-10-23 23:59:33 +01:00
}
2020-04-12 02:32:03 +01:00
protected void ExecuteCreateSidecarCommand ( )
2018-10-24 19:49:04 +01:00
{
2020-04-14 18:57:30 +01:00
if ( _imageSidecarWindow ! = null )
2018-10-24 19:49:04 +01:00
{
2020-04-14 18:57:30 +01:00
_imageSidecarWindow . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-24 19:49:04 +01:00
return ;
}
2020-04-14 18:57:30 +01:00
_imageSidecarWindow = new ImageSidecarWindow ( ) ;
2018-10-24 19:49:04 +01:00
// TODO: Pass thru chosen default encoding
2020-04-14 18:57:30 +01:00
_imageSidecarWindow . DataContext =
new ImageSidecarViewModel ( _imageFormat , _imagePath , _filter . Id , null , _imageSidecarWindow ) ;
2020-02-29 18:03:35 +00:00
2020-04-14 18:57:30 +01:00
_imageSidecarWindow . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-14 18:57:30 +01:00
_imageSidecarWindow = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-14 18:57:30 +01:00
_imageSidecarWindow . Show ( ) ;
2018-10-24 19:49:04 +01:00
}
2020-04-12 02:32:03 +01:00
protected void ExecuteViewSectorsCommand ( )
2018-11-17 20:00:55 +00:00
{
2020-04-13 23:54:35 +01:00
if ( _viewSectorWindow ! = null )
2018-11-17 20:00:55 +00:00
{
2020-04-13 23:54:35 +01:00
_viewSectorWindow . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-11-17 20:00:55 +00:00
return ;
}
2020-04-13 23:54:35 +01:00
_viewSectorWindow = new ViewSectorWindow
2020-02-29 18:03:35 +00:00
{
2020-04-13 23:54:35 +01:00
DataContext = new ViewSectorViewModel ( _imageFormat )
2020-02-29 18:03:35 +00:00
} ;
2020-04-13 23:54:35 +01:00
_viewSectorWindow . Closed + = ( sender , args ) = >
{
_viewSectorWindow = null ;
} ;
2020-04-14 19:27:07 +01:00
_viewSectorWindow . Show ( ) ;
2018-11-17 20:00:55 +00:00
}
2020-04-12 02:32:03 +01:00
protected void ExecuteDecodeMediaTagCommand ( )
2018-11-18 23:01:16 +00:00
{
2020-04-14 17:44:46 +01:00
if ( _decodeMediaTagsWindow ! = null )
2018-11-18 23:01:16 +00:00
{
2020-04-14 17:44:46 +01:00
_decodeMediaTagsWindow . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-11-18 23:01:16 +00:00
return ;
}
2020-04-14 17:44:46 +01:00
_decodeMediaTagsWindow = new DecodeMediaTagsWindow
2020-02-29 18:03:35 +00:00
{
2020-04-14 17:44:46 +01:00
DataContext = new DecodeMediaTagsViewModel ( _imageFormat )
2020-02-29 18:03:35 +00:00
} ;
2020-04-14 17:44:46 +01:00
_decodeMediaTagsWindow . Closed + = ( sender , args ) = >
{
_decodeMediaTagsWindow = null ;
} ;
2020-04-14 19:27:07 +01:00
_decodeMediaTagsWindow . Show ( ) ;
2018-11-18 23:01:16 +00:00
}
2018-10-03 00:05:25 +01:00
}
}