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/>.
//
// ----------------------------------------------------------------------------
2022-02-18 10:02:53 +00:00
// Copyright © 2011-2022 Natalia Portillo
2020-04-17 21:45:50 +01:00
// ****************************************************************************/
2022-03-07 07:36:44 +00:00
namespace Aaru.Gui.ViewModels.Panels ;
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
2022-03-06 13:29:38 +00:00
public sealed class ImageInfoViewModel : ViewModelBase
2018-10-03 00:05:25 +01:00
{
2022-03-06 13:29:38 +00:00
readonly IFilter _filter ;
readonly IMediaImage _imageFormat ;
readonly string _imagePath ;
DecodeMediaTags _decodeMediaTags ;
ImageChecksum _imageChecksum ;
ImageConvert _imageConvert ;
ImageEntropy _imageEntropy ;
ImageSidecar _imageSidecar ;
ImageVerify _imageVerify ;
ViewSector _viewSector ;
public ImageInfoViewModel ( string imagePath , IFilter filter , IMediaImage imageFormat , Window view )
2018-10-03 00:05:25 +01:00
{
2022-03-06 13:29:38 +00:00
_imagePath = imagePath ;
_filter = filter ;
_imageFormat = imageFormat ;
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 ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
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" ) ) ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
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)" ;
MediaTypeText =
$"Contains a media of type {imageFormat.Info.MediaType} and XML type {imageFormat.Info.XmlMediaType}" ;
HasPartitionsText = $"{(imageFormat.Info.HasPartitions ? " Has " : " Doesn ' t have ")} partitions" ;
HasSessionsText = $"{(imageFormat.Info.HasSessions ? " Has " : " Doesn ' t have ")} sessions" ;
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}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . Creator ) )
CreatorText = $"Created by: {imageFormat.Info.Creator}" ;
if ( imageFormat . Info . CreationTime ! = DateTime . MinValue )
CreationTimeText = $"Created on {imageFormat.Info.CreationTime}" ;
if ( imageFormat . Info . LastModificationTime ! = DateTime . MinValue )
LastModificationTimeText = $"Last modified on {imageFormat.Info.LastModificationTime}" ;
if ( imageFormat . Info . MediaSequence ! = 0 & &
imageFormat . Info . LastMediaSequence ! = 0 )
MediaSequenceText =
$"Media is number {imageFormat.Info.MediaSequence} on a set of {imageFormat.Info.LastMediaSequence} medias" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaTitle ) )
MediaTitleText = $"Media title: {imageFormat.Info.MediaTitle}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaManufacturer ) )
MediaManufacturerText = $"Media manufacturer: {imageFormat.Info.MediaManufacturer}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaModel ) )
MediaModelText = $"Media model: {imageFormat.Info.MediaModel}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaSerialNumber ) )
MediaSerialNumberText = $"Media serial number: {imageFormat.Info.MediaSerialNumber}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaBarcode ) )
MediaBarcodeText = $"Media barcode: {imageFormat.Info.MediaBarcode}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . MediaPartNumber ) )
MediaPartNumberText = $"Media part number: {imageFormat.Info.MediaPartNumber}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveManufacturer ) )
DriveManufacturerText = $"Drive manufacturer: {imageFormat.Info.DriveManufacturer}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveModel ) )
DriveModelText = $"Drive model: {imageFormat.Info.DriveModel}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveSerialNumber ) )
DriveSerialNumberText = $"Drive serial number: {imageFormat.Info.DriveSerialNumber}" ;
if ( ! string . IsNullOrWhiteSpace ( imageFormat . Info . DriveFirmwareRevision ) )
DriveFirmwareRevisionText = $"Drive firmware info: {imageFormat.Info.DriveFirmwareRevision}" ;
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-04-12 02:32:03 +01:00
2022-03-06 13:29:38 +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 ( ) ) ;
2018-10-07 12:45:57 +01:00
2022-03-06 13:29:38 +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 ( ) ) ;
2018-10-07 12:45:57 +01:00
2022-03-06 13:29:38 +00:00
PeripheralDeviceTypes scsiDeviceType = PeripheralDeviceTypes . DirectAccess ;
byte [ ] scsiInquiryData = null ;
Inquiry ? scsiInquiry = null ;
Modes . DecodedMode ? scsiMode = null ;
byte [ ] scsiModeSense6 = null ;
byte [ ] scsiModeSense10 = null ;
ErrorNumber errno ;
2018-10-07 14:38:02 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . SCSI_INQUIRY ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . SCSI_INQUIRY , out scsiInquiryData ) ;
2018-10-07 14:38:02 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
{
scsiDeviceType = ( PeripheralDeviceTypes ) ( scsiInquiryData [ 0 ] & 0x1F ) ;
2018-10-07 15:49:12 +01:00
2022-03-06 13:29:38 +00:00
scsiInquiry = Inquiry . Decode ( scsiInquiryData ) ;
}
}
2018-10-07 15:49:12 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . SCSI_MODESENSE_6 ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . SCSI_MODESENSE_6 , out scsiModeSense6 ) ;
2018-10-07 15:49:12 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
scsiMode = Modes . DecodeMode6 ( scsiModeSense6 , scsiDeviceType ) ;
}
2018-10-07 15:49:12 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . SCSI_MODESENSE_10 ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . SCSI_MODESENSE_10 , out scsiModeSense10 ) ;
2018-10-07 15:49:12 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
scsiMode = Modes . DecodeMode10 ( scsiModeSense10 , scsiDeviceType ) ;
}
2021-09-18 15:01:31 +01:00
2022-03-06 13:29:38 +00:00
ScsiInfo = new ScsiInfo
{
DataContext = new ScsiInfoViewModel ( scsiInquiryData , scsiInquiry , null , scsiMode , scsiDeviceType ,
scsiModeSense6 , scsiModeSense10 , null , view )
} ;
2018-10-07 15:49:12 +01:00
2022-03-06 13:29:38 +00:00
byte [ ] ataIdentify = null ;
byte [ ] atapiIdentify = null ;
errno = ErrorNumber . NoData ;
2021-09-18 15:01:31 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . ATA_IDENTIFY ) = = true )
errno = imageFormat . ReadMediaTag ( MediaTagType . ATA_IDENTIFY , out ataIdentify ) ;
else if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . ATAPI_IDENTIFY ) = = true )
errno = imageFormat . ReadMediaTag ( MediaTagType . ATAPI_IDENTIFY , out atapiIdentify ) ;
2018-10-07 15:49:12 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
AtaInfo = new AtaInfo
2020-04-12 04:14:48 +01:00
{
2022-03-06 13:29:38 +00:00
DataContext = new AtaInfoViewModel ( ataIdentify , atapiIdentify , null , view )
2020-04-12 04:14:48 +01:00
} ;
2018-10-07 16:32:32 +01:00
2022-03-06 13:29:38 +00: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 ? . Contains ( MediaTagType . CD_TOC ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . CD_TOC , out toc ) ;
2018-10-07 16:32:32 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError & &
toc . Length > 0 )
2018-10-07 17:22:58 +01:00
{
2022-03-06 13:29:38 +00:00
ushort dataLen = Swapping . Swap ( BitConverter . ToUInt16 ( toc , 0 ) ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( dataLen + 2 ! = toc . Length )
2018-10-07 17:22:58 +01:00
{
2022-03-07 07:36:44 +00:00
var tmp = new byte [ toc . Length + 2 ] ;
2022-03-06 13:29:38 +00:00
Array . Copy ( toc , 0 , tmp , 2 , toc . Length ) ;
tmp [ 0 ] = ( byte ) ( ( toc . Length & 0xFF00 ) > > 8 ) ;
tmp [ 1 ] = ( byte ) ( toc . Length & 0xFF ) ;
toc = tmp ;
2018-10-07 17:22:58 +01:00
}
2022-03-06 13:29:38 +00:00
decodedToc = TOC . Decode ( toc ) ;
2018-10-07 17:22:58 +01:00
}
2022-03-06 13:29:38 +00:00
}
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . CD_FullTOC ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . CD_FullTOC , out fullToc ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError & &
fullToc . Length > 0 )
2018-10-07 17:22:58 +01:00
{
2022-03-06 13:29:38 +00:00
ushort dataLen = Swapping . Swap ( BitConverter . ToUInt16 ( fullToc , 0 ) ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( dataLen + 2 ! = fullToc . Length )
2018-10-07 17:22:58 +01:00
{
2022-03-07 07:36:44 +00:00
var tmp = new byte [ fullToc . Length + 2 ] ;
2022-03-06 13:29:38 +00:00
Array . Copy ( fullToc , 0 , tmp , 2 , fullToc . Length ) ;
tmp [ 0 ] = ( byte ) ( ( fullToc . Length & 0xFF00 ) > > 8 ) ;
tmp [ 1 ] = ( byte ) ( fullToc . Length & 0xFF ) ;
fullToc = tmp ;
2018-10-07 17:22:58 +01:00
}
2022-03-06 13:29:38 +00:00
decodedFullToc = FullTOC . Decode ( fullToc ) ;
2018-10-07 17:22:58 +01:00
}
2022-03-06 13:29:38 +00:00
}
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . CD_PMA ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . CD_PMA , out pma ) ;
if ( errno = = ErrorNumber . NoError & &
pma . Length > 0 )
2018-10-07 17:22:58 +01:00
{
2022-03-06 13:29:38 +00:00
ushort dataLen = Swapping . Swap ( BitConverter . ToUInt16 ( pma , 0 ) ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( dataLen + 2 ! = pma . Length )
2018-10-07 17:22:58 +01:00
{
2022-03-07 07:36:44 +00:00
var tmp = new byte [ pma . Length + 2 ] ;
2022-03-06 13:29:38 +00:00
Array . Copy ( pma , 0 , tmp , 2 , pma . Length ) ;
tmp [ 0 ] = ( byte ) ( ( pma . Length & 0xFF00 ) > > 8 ) ;
tmp [ 1 ] = ( byte ) ( pma . Length & 0xFF ) ;
pma = tmp ;
2018-10-07 17:22:58 +01:00
}
}
2022-03-06 13:29:38 +00:00
}
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . CD_ATIP ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . CD_ATIP , out atip ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
2018-10-07 17:22:58 +01:00
{
2022-03-06 13:29:38 +00:00
uint dataLen = Swapping . Swap ( BitConverter . ToUInt32 ( atip , 0 ) ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( dataLen + 4 ! = atip . Length )
2018-10-07 17:22:58 +01:00
{
2022-03-07 07:36:44 +00:00
var tmp = new byte [ atip . Length + 4 ] ;
2022-03-06 13:29:38 +00:00
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 ;
2021-09-18 15:01:31 +01:00
}
2022-03-06 13:29:38 +00:00
decodedAtip = ATIP . Decode ( atip ) ;
2018-10-07 17:22:58 +01:00
}
2022-03-06 13:29:38 +00:00
}
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . CD_TEXT ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . CD_TEXT , out cdtext ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
2018-10-07 17:22:58 +01:00
{
2022-03-06 13:29:38 +00:00
uint dataLen = Swapping . Swap ( BitConverter . ToUInt32 ( cdtext , 0 ) ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( dataLen + 4 ! = cdtext . Length )
2018-10-07 17:22:58 +01:00
{
2022-03-07 07:36:44 +00:00
var tmp = new byte [ cdtext . Length + 4 ] ;
2022-03-06 13:29:38 +00:00
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 ;
2021-09-18 15:01:31 +01:00
}
2022-03-06 13:29:38 +00:00
decodedCdText = CDTextOnLeadIn . Decode ( cdtext ) ;
2018-10-07 17:22:58 +01:00
}
2022-03-06 13:29:38 +00:00
}
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . CD_MCN ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . CD_MCN , out byte [ ] mcn ) ;
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
mediaCatalogueNumber = Encoding . UTF8 . GetString ( mcn ) ;
}
2018-10-07 17:22:58 +01:00
2022-03-06 13:29:38 +00:00
CompactDiscInfo = new CompactDiscInfo
{
DataContext = new CompactDiscInfoViewModel ( toc , atip , null , null , fullToc , pma , cdtext , decodedToc ,
decodedAtip , null , decodedFullToc , decodedCdText , null ,
mediaCatalogueNumber , null , view )
} ;
byte [ ] dvdPfi = null ;
byte [ ] dvdDmi = null ;
byte [ ] dvdCmi = null ;
byte [ ] hddvdCopyrightInformation = null ;
byte [ ] dvdBca = null ;
PFI . PhysicalFormatInformation ? decodedPfi = null ;
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVD_PFI ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . DVD_PFI , out dvdPfi ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
decodedPfi = PFI . Decode ( dvdPfi , imageFormat . Info . MediaType ) ;
}
2018-10-07 17:53:37 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVD_DMI ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVD_DMI , out dvdDmi ) ;
2021-09-18 15:01:31 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVD_CMI ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVD_CMI , out dvdCmi ) ;
2018-10-07 17:53:37 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . HDDVD_CPI ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . HDDVD_CPI , out hddvdCopyrightInformation ) ;
2018-10-07 17:53:37 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVD_BCA ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVD_BCA , out dvdBca ) ;
2018-10-07 17:53:37 +01:00
2022-03-06 13:29:38 +00:00
DvdInfo = new DvdInfo
{
DataContext = new DvdInfoViewModel ( imageFormat . Info . MediaType , dvdPfi , dvdDmi , dvdCmi ,
hddvdCopyrightInformation , dvdBca , null , decodedPfi , view )
} ;
2018-10-07 17:53:37 +01:00
2022-03-06 13:29:38 +00: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 ;
2018-10-07 17:53:37 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDRAM_DDS ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDRAM_DDS , out dvdRamDds ) ;
2020-04-12 17:32:57 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDRAM_MediumStatus ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDRAM_MediumStatus , out dvdRamCartridgeStatus ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDRAM_SpareArea ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDRAM_SpareArea , out dvdRamSpareArea ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDR_RMD ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDR_RMD , out lastBorderOutRmd ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDR_PreRecordedInfo ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDR_PreRecordedInfo , out dvdPreRecordedInfo ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDR_MediaIdentifier ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDR_MediaIdentifier , out dvdrMediaIdentifier ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDR_PFI ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDR_PFI , out dvdrPhysicalInformation ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . HDDVD_MediumStatus ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . HDDVD_MediumStatus , out hddvdrMediumStatus ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDDL_LayerCapacity ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDDL_LayerCapacity , out dvdrLayerCapacity ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDDL_MiddleZoneAddress ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDDL_MiddleZoneAddress , out dvdrDlMiddleZoneStart ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDDL_JumpIntervalSize ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDDL_JumpIntervalSize , out dvdrDlJumpIntervalSize ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVDDL_ManualLayerJumpLBA ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVDDL_ManualLayerJumpLBA , out dvdrDlManualLayerJumpStartLba ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DVD_ADIP ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DVD_ADIP , out dvdPlusAdip ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . DCB ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . DCB , out dvdPlusDcb ) ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
DvdWritableInfo = new DvdWritableInfo
{
DataContext = new DvdWritableInfoViewModel ( imageFormat . Info . MediaType , dvdRamDds , dvdRamCartridgeStatus ,
dvdRamSpareArea , lastBorderOutRmd , dvdPreRecordedInfo ,
2022-03-07 07:36:44 +00:00
dvdrMediaIdentifier , dvdrPhysicalInformation , hddvdrMediumStatus ,
null , dvdrLayerCapacity , dvdrDlMiddleZoneStart ,
dvdrDlJumpIntervalSize , dvdrDlManualLayerJumpStartLba , null ,
dvdPlusAdip , dvdPlusDcb , view )
2022-03-06 13:29:38 +00:00
} ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
byte [ ] blurayBurstCuttingArea = null ;
byte [ ] blurayCartridgeStatus = null ;
byte [ ] blurayDds = null ;
byte [ ] blurayDiscInformation = null ;
byte [ ] blurayPowResources = null ;
byte [ ] bluraySpareAreaInformation = null ;
byte [ ] blurayTrackResources = null ;
2018-10-07 18:51:19 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . BD_BCA ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . BD_BCA , out blurayBurstCuttingArea ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . BD_CartridgeStatus ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . BD_CartridgeStatus , out blurayCartridgeStatus ) ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . BD_DDS ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . BD_DDS , out blurayDds ) ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . BD_DI ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . BD_DI , out blurayDiscInformation ) ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . MMC_POWResourcesInformation ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . MMC_POWResourcesInformation , out blurayPowResources ) ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . BD_SpareArea ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . BD_SpareArea , out bluraySpareAreaInformation ) ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . MMC_TrackResourcesInformation ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . MMC_TrackResourcesInformation , out blurayTrackResources ) ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
BlurayInfo = new BlurayInfo
{
DataContext = new BlurayInfoViewModel ( blurayDiscInformation , blurayBurstCuttingArea , blurayDds ,
2022-03-07 07:36:44 +00:00
blurayCartridgeStatus , bluraySpareAreaInformation , blurayPowResources ,
blurayTrackResources , null , null , view )
2022-03-06 13:29:38 +00:00
} ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
byte [ ] xboxDmi = null ;
byte [ ] xboxSecuritySector = null ;
SS . SecuritySector ? decodedXboxSecuritySector = null ;
2018-10-07 19:56:38 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . Xbox_DMI ) = = true )
imageFormat . ReadMediaTag ( MediaTagType . Xbox_DMI , out xboxDmi ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . Xbox_SecuritySector ) = = true )
{
errno = imageFormat . ReadMediaTag ( MediaTagType . Xbox_SecuritySector , out xboxSecuritySector ) ;
2018-10-07 20:25:04 +01:00
2022-03-06 13:29:38 +00:00
if ( errno = = ErrorNumber . NoError )
decodedXboxSecuritySector = SS . Decode ( xboxSecuritySector ) ;
}
2018-10-07 20:25:04 +01:00
2022-03-06 13:29:38 +00:00
XboxInfo = new XboxInfo
{
DataContext = new XboxInfoViewModel ( null , xboxDmi , xboxSecuritySector , decodedXboxSecuritySector , view )
} ;
2021-09-18 15:01:31 +01:00
2022-03-06 13:29:38 +00:00
errno = ErrorNumber . NoData ;
byte [ ] pcmciaCis = null ;
2018-10-07 20:25:04 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . PCMCIA_CIS ) = = true )
errno = imageFormat . ReadMediaTag ( MediaTagType . PCMCIA_CIS , out pcmciaCis ) ;
if ( errno = = ErrorNumber . NoError )
PcmciaInfo = new PcmciaInfo
2020-04-12 18:59:16 +01:00
{
2022-03-06 13:29:38 +00:00
DataContext = new PcmciaInfoViewModel ( pcmciaCis , view )
2020-04-12 18:59:16 +01:00
} ;
2018-10-07 21:08:39 +01:00
2022-03-06 13:29:38 +00:00
DeviceType deviceType = DeviceType . Unknown ;
byte [ ] cid = null ;
byte [ ] csd = null ;
byte [ ] ocr = null ;
byte [ ] extendedCsd = null ;
byte [ ] scr = null ;
2018-10-07 21:08:39 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . SD_CID ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . SD_CID , out cid ) ;
deviceType = DeviceType . SecureDigital ;
}
2018-10-07 21:08:39 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . SD_CSD ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . SD_CSD , out csd ) ;
deviceType = DeviceType . SecureDigital ;
}
2018-10-07 22:13:23 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . SD_OCR ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . SD_OCR , out ocr ) ;
deviceType = DeviceType . SecureDigital ;
}
2020-04-12 17:53:16 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . SD_SCR ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . SD_SCR , out scr ) ;
deviceType = DeviceType . SecureDigital ;
}
2020-04-12 17:53:16 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . MMC_CID ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . MMC_CID , out cid ) ;
deviceType = DeviceType . MMC ;
}
2020-04-12 17:53:16 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . MMC_CSD ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . MMC_CSD , out csd ) ;
deviceType = DeviceType . MMC ;
}
2020-04-12 17:53:16 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . MMC_OCR ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . MMC_OCR , out ocr ) ;
deviceType = DeviceType . MMC ;
}
if ( imageFormat . Info . ReadableMediaTags ? . Contains ( MediaTagType . MMC_ExtendedCSD ) = = true )
{
imageFormat . ReadMediaTag ( MediaTagType . MMC_ExtendedCSD , out extendedCsd ) ;
deviceType = DeviceType . MMC ;
}
SdMmcInfo = new SdMmcInfo
{
DataContext = new SdMmcInfoViewModel ( deviceType , cid , csd , ocr , extendedCsd , scr )
} ;
2020-04-12 17:53:16 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat is IOpticalMediaImage opticalMediaImage )
{
try
2020-04-12 17:53:16 +01:00
{
2022-03-06 13:29:38 +00:00
if ( opticalMediaImage . Sessions ! = null & &
opticalMediaImage . Sessions . Count > 0 )
foreach ( Session session in opticalMediaImage . Sessions )
Sessions . Add ( session ) ;
2020-04-12 17:53:16 +01:00
}
2022-03-06 13:29:38 +00:00
catch
2020-04-12 17:53:16 +01:00
{
2022-03-06 13:29:38 +00:00
// ignored
2020-04-12 17:53:16 +01:00
}
2022-03-06 13:29:38 +00:00
try
2020-04-12 17:53:16 +01:00
{
2022-03-06 13:29:38 +00:00
if ( opticalMediaImage . Tracks ! = null & &
opticalMediaImage . Tracks . Count > 0 )
foreach ( Track track in opticalMediaImage . Tracks )
Tracks . Add ( track ) ;
2020-04-12 17:53:16 +01:00
}
2022-03-06 13:29:38 +00:00
catch
2020-04-12 17:53:16 +01:00
{
2022-03-06 13:29:38 +00:00
// ignored
2020-04-12 17:53:16 +01:00
}
2022-03-06 13:29:38 +00:00
}
2020-04-12 17:53:16 +01:00
2022-03-06 13:29:38 +00:00
if ( imageFormat . DumpHardware is null )
return ;
2020-04-12 17:53:16 +01:00
2022-03-06 13:29:38 +00:00
foreach ( DumpHardwareType dump in imageFormat . DumpHardware )
{
foreach ( ExtentType extent in dump . Extents )
DumpHardwareList . Add ( new DumpHardwareModel
2019-01-20 20:11:10 +00:00
{
2022-03-06 13:29:38 +00: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
2022-03-06 13:29:38 +00: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 ; }
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 ;
void ExecuteEntropyCommand ( )
{
if ( _imageEntropy ! = null )
{
_imageEntropy . Show ( ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
return ;
2018-10-03 00:05:25 +01:00
}
2022-03-06 13:29:38 +00:00
_imageEntropy = new ImageEntropy ( ) ;
_imageEntropy . DataContext = new ImageEntropyViewModel ( _imageFormat , _imageEntropy ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
_imageEntropy . Closed + = ( sender , args ) = > _imageEntropy = null ;
2018-10-14 19:10:30 +01:00
2022-03-06 13:29:38 +00:00
_imageEntropy . Show ( ) ;
}
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
void ExecuteVerifyCommand ( )
{
if ( _imageVerify ! = null )
{
_imageVerify . Show ( ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
return ;
2018-10-14 19:10:30 +01:00
}
2022-03-06 13:29:38 +00:00
_imageVerify = new ImageVerify ( ) ;
_imageVerify . DataContext = new ImageVerifyViewModel ( _imageFormat , _imageVerify ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
_imageVerify . Closed + = ( sender , args ) = > _imageVerify = null ;
2018-10-17 22:12:51 +01:00
2022-03-06 13:29:38 +00:00
_imageVerify . Show ( ) ;
}
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
void ExecuteChecksumCommand ( )
{
if ( _imageChecksum ! = null )
{
_imageChecksum . Show ( ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
return ;
2018-10-17 22:12:51 +01:00
}
2022-03-06 13:29:38 +00:00
_imageChecksum = new ImageChecksum ( ) ;
_imageChecksum . DataContext = new ImageChecksumViewModel ( _imageFormat , _imageChecksum ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
_imageChecksum . Closed + = ( sender , args ) = > _imageChecksum = null ;
2018-10-18 22:24:40 +01:00
2022-03-06 13:29:38 +00:00
_imageChecksum . Show ( ) ;
}
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
void ExecuteConvertCommand ( )
{
if ( _imageConvert ! = null )
{
_imageConvert . Show ( ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
return ;
2018-10-18 22:24:40 +01:00
}
2022-03-06 13:29:38 +00:00
_imageConvert = new ImageConvert ( ) ;
_imageConvert . DataContext = new ImageConvertViewModel ( _imageFormat , _imagePath , _imageConvert ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
_imageConvert . Closed + = ( sender , args ) = > _imageConvert = null ;
2018-10-23 23:59:33 +01:00
2022-03-06 13:29:38 +00:00
_imageConvert . Show ( ) ;
}
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
void ExecuteCreateSidecarCommand ( )
{
if ( _imageSidecar ! = null )
{
_imageSidecar . Show ( ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
return ;
2018-10-23 23:59:33 +01:00
}
2022-03-06 13:29:38 +00:00
_imageSidecar = new ImageSidecar ( ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
// TODO: Pass thru chosen default encoding
_imageSidecar . DataContext =
new ImageSidecarViewModel ( _imageFormat , _imagePath , _filter . Id , null , _imageSidecar ) ;
2018-10-24 19:49:04 +01:00
2022-03-06 13:29:38 +00:00
_imageSidecar . Closed + = ( sender , args ) = > _imageSidecar = null ;
2020-04-14 18:57:30 +01:00
2022-03-06 13:29:38 +00:00
_imageSidecar . Show ( ) ;
}
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
void ExecuteViewSectorsCommand ( )
{
if ( _viewSector ! = null )
{
_viewSector . Show ( ) ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
return ;
2018-10-24 19:49:04 +01:00
}
2022-03-06 13:29:38 +00:00
_viewSector = new ViewSector
2018-11-17 20:00:55 +00:00
{
2022-03-06 13:29:38 +00:00
DataContext = new ViewSectorViewModel ( _imageFormat )
} ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
_viewSector . Closed + = ( sender , args ) = > _viewSector = null ;
2018-11-17 20:00:55 +00:00
2022-03-06 13:29:38 +00:00
_viewSector . Show ( ) ;
}
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
void ExecuteDecodeMediaTagCommand ( )
{
if ( _decodeMediaTags ! = null )
{
_decodeMediaTags . Show ( ) ;
2020-04-14 19:27:07 +01:00
2022-03-06 13:29:38 +00:00
return ;
2018-11-17 20:00:55 +00:00
}
2022-03-06 13:29:38 +00:00
_decodeMediaTags = new DecodeMediaTags
2018-11-18 23:01:16 +00:00
{
2022-03-06 13:29:38 +00:00
DataContext = new DecodeMediaTagsViewModel ( _imageFormat )
} ;
2020-02-29 18:03:35 +00:00
2022-03-06 13:29:38 +00:00
_decodeMediaTags . Closed + = ( sender , args ) = > _decodeMediaTags = null ;
2018-11-18 23:01:16 +00:00
2022-03-06 13:29:38 +00:00
_decodeMediaTags . Show ( ) ;
2018-10-03 00:05:25 +01:00
}
}