2020-04-17 21:45:50 +01:00
// /***************************************************************************
// Aaru Data Preservation Suite
// ----------------------------------------------------------------------------
//
// Filename : ImageInfoViewModel.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : GUI view models.
//
// --[ Description ] ----------------------------------------------------------
//
// View model and code for the opened image information panel.
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General public License for more details.
//
// You should have received a copy of the GNU General public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2020 Natalia Portillo
// ****************************************************************************/
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-16 20:40:25 +01:00
using Aaru.Gui.ViewModels.Tabs ;
using Aaru.Gui.ViewModels.Windows ;
using Aaru.Gui.Views.Tabs ;
using Aaru.Gui.Views.Windows ;
2020-07-20 15:43:52 +01:00
using Aaru.Helpers ;
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-16 20:40:25 +01:00
namespace Aaru.Gui.ViewModels.Panels
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-16 21:29:40 +01:00
readonly IFilter _filter ;
readonly IMediaImage _imageFormat ;
readonly string _imagePath ;
readonly Window _view ;
DecodeMediaTags _decodeMediaTags ;
ImageChecksum _imageChecksum ;
ImageConvert _imageConvert ;
ImageEntropy _imageEntropy ;
ImageSidecar _imageSidecar ;
ImageVerify _imageVerify ;
ViewSector _viewSector ;
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-16 21:29:40 +01:00
ScsiInfo = new ScsiInfo
2020-04-12 04:14:48 +01:00
{
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-16 21:29:40 +01:00
AtaInfo = new AtaInfo
2020-04-12 13:44:42 +01:00
{
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-16 21:29:40 +01:00
CompactDiscInfo = new CompactDiscInfo
2020-04-12 14:19:12 +01:00
{
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-16 21:29:40 +01:00
DvdInfo = new DvdInfo
2020-04-12 17:32:57 +01:00
{
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-16 21:29:40 +01:00
DvdWritableInfo = new DvdWritableInfo
2020-04-12 15:30:35 +01:00
{
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-16 21:29:40 +01:00
BlurayInfo = new BlurayInfo
2020-04-12 16:34:20 +01:00
{
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-16 21:29:40 +01:00
XboxInfo = new XboxInfo
2020-04-12 18:59:16 +01:00
{
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-16 21:29:40 +01:00
PcmciaInfo = new PcmciaInfo
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 ;
}
2020-04-16 21:29:40 +01:00
SdMmcInfo = new SdMmcInfo
2020-04-12 17:53:16 +01:00
{
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-07-20 04:34:16 +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-16 21:29:40 +01:00
public ScsiInfo ScsiInfo { get ; }
public AtaInfo AtaInfo { get ; }
public CompactDiscInfo CompactDiscInfo { get ; }
public DvdInfo DvdInfo { get ; }
public DvdWritableInfo DvdWritableInfo { get ; }
public BlurayInfo BlurayInfo { get ; }
public XboxInfo XboxInfo { get ; }
public PcmciaInfo PcmciaInfo { get ; }
public SdMmcInfo 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-16 21:29:40 +01:00
if ( _imageEntropy ! = null )
2018-10-14 19:10:30 +01:00
{
2020-04-16 21:29:40 +01:00
_imageEntropy . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-14 19:10:30 +01:00
return ;
}
2020-04-16 21:29:40 +01:00
_imageEntropy = new ImageEntropy ( ) ;
_imageEntropy . DataContext = new ImageEntropyViewModel ( _imageFormat , _imageEntropy ) ;
2020-02-29 18:03:35 +00:00
2020-04-16 21:29:40 +01:00
_imageEntropy . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-16 21:29:40 +01:00
_imageEntropy = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-16 21:29:40 +01:00
_imageEntropy . 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-16 21:29:40 +01:00
if ( _imageVerify ! = null )
2018-10-17 22:12:51 +01:00
{
2020-04-16 21:29:40 +01:00
_imageVerify . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-17 22:12:51 +01:00
return ;
}
2020-04-16 21:29:40 +01:00
_imageVerify = new ImageVerify ( ) ;
_imageVerify . DataContext = new ImageVerifyViewModel ( _imageFormat , _imageVerify ) ;
2020-02-29 18:03:35 +00:00
2020-04-16 21:29:40 +01:00
_imageVerify . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-16 21:29:40 +01:00
_imageVerify = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-16 21:29:40 +01:00
_imageVerify . 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-16 21:29:40 +01:00
if ( _imageChecksum ! = null )
2018-10-18 22:24:40 +01:00
{
2020-04-16 21:29:40 +01:00
_imageChecksum . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-18 22:24:40 +01:00
return ;
}
2020-04-16 21:29:40 +01:00
_imageChecksum = new ImageChecksum ( ) ;
_imageChecksum . DataContext = new ImageChecksumViewModel ( _imageFormat , _imageChecksum ) ;
2020-02-29 18:03:35 +00:00
2020-04-16 21:29:40 +01:00
_imageChecksum . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-16 21:29:40 +01:00
_imageChecksum = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-16 21:29:40 +01:00
_imageChecksum . 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-16 21:29:40 +01:00
if ( _imageConvert ! = null )
2018-10-23 23:59:33 +01:00
{
2020-04-16 21:29:40 +01:00
_imageConvert . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-23 23:59:33 +01:00
return ;
}
2020-04-16 21:29:40 +01:00
_imageConvert = new ImageConvert ( ) ;
_imageConvert . DataContext = new ImageConvertViewModel ( _imageFormat , _imagePath , _imageConvert ) ;
2020-02-29 18:03:35 +00:00
2020-04-16 21:29:40 +01:00
_imageConvert . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-16 21:29:40 +01:00
_imageConvert = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-16 21:29:40 +01:00
_imageConvert . 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-16 21:29:40 +01:00
if ( _imageSidecar ! = null )
2018-10-24 19:49:04 +01:00
{
2020-04-16 21:29:40 +01:00
_imageSidecar . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-10-24 19:49:04 +01:00
return ;
}
2020-04-16 21:29:40 +01:00
_imageSidecar = new ImageSidecar ( ) ;
2020-04-14 18:57:30 +01:00
2018-10-24 19:49:04 +01:00
// TODO: Pass thru chosen default encoding
2020-04-16 21:29:40 +01:00
_imageSidecar . DataContext =
new ImageSidecarViewModel ( _imageFormat , _imagePath , _filter . Id , null , _imageSidecar ) ;
2020-02-29 18:03:35 +00:00
2020-04-16 21:29:40 +01:00
_imageSidecar . Closed + = ( sender , args ) = >
2020-02-29 18:03:35 +00:00
{
2020-04-16 21:29:40 +01:00
_imageSidecar = null ;
2020-02-29 18:03:35 +00:00
} ;
2020-04-16 21:29:40 +01:00
_imageSidecar . 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-16 21:29:40 +01:00
if ( _viewSector ! = null )
2018-11-17 20:00:55 +00:00
{
2020-04-16 21:29:40 +01:00
_viewSector . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-11-17 20:00:55 +00:00
return ;
}
2020-04-16 21:29:40 +01:00
_viewSector = new ViewSector
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-16 21:29:40 +01:00
_viewSector . Closed + = ( sender , args ) = >
2020-04-13 23:54:35 +01:00
{
2020-04-16 21:29:40 +01:00
_viewSector = null ;
2020-04-13 23:54:35 +01:00
} ;
2020-04-14 19:27:07 +01:00
2020-04-16 21:29:40 +01:00
_viewSector . 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-16 21:29:40 +01:00
if ( _decodeMediaTags ! = null )
2018-11-18 23:01:16 +00:00
{
2020-04-16 21:29:40 +01:00
_decodeMediaTags . Show ( ) ;
2020-02-29 18:03:35 +00:00
2018-11-18 23:01:16 +00:00
return ;
}
2020-04-16 21:29:40 +01:00
_decodeMediaTags = new DecodeMediaTags
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-16 21:29:40 +01:00
_decodeMediaTags . Closed + = ( sender , args ) = >
2020-04-14 17:44:46 +01:00
{
2020-04-16 21:29:40 +01:00
_decodeMediaTags = null ;
2020-04-14 17:44:46 +01:00
} ;
2020-04-14 19:27:07 +01:00
2020-04-16 21:29:40 +01:00
_decodeMediaTags . Show ( ) ;
2018-11-18 23:01:16 +00:00
}
2018-10-03 00:05:25 +01:00
}
}