mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Implement media tag decoder on GUI.
This commit is contained in:
2
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
2
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
@@ -1620,6 +1620,8 @@
|
||||
<e p="Forms" t="Include">
|
||||
<e p="frmConsole.xeto" t="Include" />
|
||||
<e p="frmConsole.xeto.cs" t="Include" />
|
||||
<e p="frmDecodeMediaTags.xeto" t="Include" />
|
||||
<e p="frmDecodeMediaTags.xeto.cs" t="Include" />
|
||||
<e p="frmDump.xeto" t="Include" />
|
||||
<e p="frmDump.xeto.cs" t="Include" />
|
||||
<e p="frmImageChecksum.xeto" t="Include" />
|
||||
|
||||
51
DiscImageChef.Gui/Forms/frmDecodeMediaTags.xeto
Normal file
51
DiscImageChef.Gui/Forms/frmDecodeMediaTags.xeto
Normal file
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!--
|
||||
// /***************************************************************************
|
||||
// The Disc Image Chef
|
||||
// ============================================================================
|
||||
//
|
||||
// Filename : frmDecodeMediaTags.xeto
|
||||
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||
//
|
||||
// Component : Form to show decode media tags of images.
|
||||
//
|
||||
// ==[ Description ] ==========================================================
|
||||
//
|
||||
// Defines the structure for the decode media tags GUI window.
|
||||
//
|
||||
// ==[ 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-2018 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
-->
|
||||
<Form xmlns="http://schema.picoe.ca/eto.forms" Title="Decode media tags" ClientSize="600, 450" Padding="10">
|
||||
<StackLayout Orientation="Vertical" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
|
||||
<StackLayout Orientation="Horizontal" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
|
||||
<Label Text="Tag:" ID="lblTag"/>
|
||||
<ComboBox ID="cmbTag" ReadOnly="True" SelectedIndexChanged="OnCmbTagSelectedIndexChanged"/>
|
||||
</StackLayout>
|
||||
<StackLayoutItem Expand="True">
|
||||
<TabControl>
|
||||
<TabPage Text="HexView" ID="tabPrintHex">
|
||||
<TextArea ID="txtPrintHex"/>
|
||||
</TabPage>
|
||||
<TabPage Text="Decoded" ID="tabDecoded">
|
||||
<TextArea ID="txtDecoded"/>
|
||||
</TabPage>
|
||||
</TabControl>
|
||||
</StackLayoutItem>
|
||||
</StackLayout>
|
||||
</Form>
|
||||
206
DiscImageChef.Gui/Forms/frmDecodeMediaTags.xeto.cs
Normal file
206
DiscImageChef.Gui/Forms/frmDecodeMediaTags.xeto.cs
Normal file
@@ -0,0 +1,206 @@
|
||||
// /***************************************************************************
|
||||
// The Disc Image Chef
|
||||
// ----------------------------------------------------------------------------
|
||||
//
|
||||
// Filename : frmDecodeMediaTags.xeto.cs
|
||||
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||
//
|
||||
// Component : Form to show decode media tags of images.
|
||||
//
|
||||
// --[ Description ] ----------------------------------------------------------
|
||||
//
|
||||
// Implements media tag decode form.
|
||||
//
|
||||
// --[ 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-2018 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text;
|
||||
using DiscImageChef.CommonTypes.Enums;
|
||||
using DiscImageChef.CommonTypes.Interfaces;
|
||||
using DiscImageChef.Decoders.ATA;
|
||||
using DiscImageChef.Decoders.Bluray;
|
||||
using DiscImageChef.Decoders.CD;
|
||||
using DiscImageChef.Decoders.DVD;
|
||||
using DiscImageChef.Decoders.SCSI;
|
||||
using DiscImageChef.Decoders.SCSI.MMC;
|
||||
using DiscImageChef.Decoders.Xbox;
|
||||
using Eto.Forms;
|
||||
using Eto.Serialization.Xaml;
|
||||
using BCA = DiscImageChef.Decoders.Bluray.BCA;
|
||||
using Cartridge = DiscImageChef.Decoders.Bluray.Cartridge;
|
||||
using DDS = DiscImageChef.Decoders.DVD.DDS;
|
||||
using DMI = DiscImageChef.Decoders.Xbox.DMI;
|
||||
using Spare = DiscImageChef.Decoders.DVD.Spare;
|
||||
|
||||
namespace DiscImageChef.Gui.Forms
|
||||
{
|
||||
// TODO: Decode long sector components
|
||||
// TODO: Panel with string representation of contents
|
||||
public class frmDecodeMediaTags : Form
|
||||
{
|
||||
const int HEX_COLUMNS = 32;
|
||||
IMediaImage inputFormat;
|
||||
ObservableCollection<MediaTagWithData> lstTags;
|
||||
|
||||
public frmDecodeMediaTags(IMediaImage inputFormat)
|
||||
{
|
||||
this.inputFormat = inputFormat;
|
||||
XamlReader.Load(this);
|
||||
|
||||
lstTags = new ObservableCollection<MediaTagWithData>();
|
||||
cmbTag.ItemTextBinding = Binding.Property((MediaTagWithData p) => p.Tag.ToString());
|
||||
cmbTag.ItemKeyBinding = Binding.Property((MediaTagWithData p) => p.Tag.ToString());
|
||||
cmbTag.DataStore = lstTags;
|
||||
tabDecoded.Visible = false;
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
{
|
||||
base.OnLoad(e);
|
||||
|
||||
foreach(MediaTagType tag in inputFormat.Info.ReadableMediaTags)
|
||||
try
|
||||
{
|
||||
byte[] data = inputFormat.ReadDiskTag(tag);
|
||||
lstTags.Add(new MediaTagWithData {Tag = tag, Data = data});
|
||||
}
|
||||
catch
|
||||
{
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: More graphically aware decoders
|
||||
void OnCmbTagSelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if(!(cmbTag.SelectedValue is MediaTagWithData tagWithData)) return;
|
||||
|
||||
// TODO: Decoders should be able to handle tags with/without length header
|
||||
txtPrintHex.Text = PrintHex.ByteArrayToHexArrayString(tagWithData.Data, HEX_COLUMNS);
|
||||
tabDecoded.Visible = true;
|
||||
switch(tagWithData.Tag)
|
||||
{
|
||||
case MediaTagType.CD_TOC:
|
||||
txtDecoded.Text = TOC.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.CD_SessionInfo:
|
||||
txtDecoded.Text = Session.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.CD_FullTOC:
|
||||
txtDecoded.Text = FullTOC.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.CD_PMA:
|
||||
txtDecoded.Text = PMA.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.CD_ATIP:
|
||||
txtDecoded.Text = ATIP.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.CD_TEXT:
|
||||
txtDecoded.Text = CDTextOnLeadIn.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.CD_MCN:
|
||||
txtDecoded.Text = Encoding.ASCII.GetString(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.DVD_PFI:
|
||||
txtDecoded.Text = PFI.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.DVD_CMI:
|
||||
txtDecoded.Text = CSS_CPRM.PrettifyLeadInCopyright(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.DVDRAM_DDS:
|
||||
txtDecoded.Text = DDS.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.DVDRAM_SpareArea:
|
||||
txtDecoded.Text = Spare.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.DVDR_PFI:
|
||||
txtDecoded.Text = PFI.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.HDDVD_MediumStatus:
|
||||
txtDecoded.Text = PFI.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.BD_DI:
|
||||
txtDecoded.Text = DI.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.BD_BCA:
|
||||
txtDecoded.Text = BCA.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.BD_DDS:
|
||||
txtDecoded.Text = Decoders.Bluray.DDS.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.BD_CartridgeStatus:
|
||||
txtDecoded.Text = Cartridge.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.BD_SpareArea:
|
||||
txtDecoded.Text = Decoders.Bluray.Spare.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.MMC_WriteProtection:
|
||||
txtDecoded.Text = WriteProtect.PrettifyWriteProtectionStatus(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.MMC_DiscInformation:
|
||||
txtDecoded.Text = DiscInformation.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.SCSI_INQUIRY:
|
||||
txtDecoded.Text = Inquiry.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.SCSI_MODEPAGE_2A:
|
||||
txtDecoded.Text = Modes.PrettifyModePage_2A(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.ATA_IDENTIFY:
|
||||
case MediaTagType.ATAPI_IDENTIFY:
|
||||
txtDecoded.Text = Identify.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.Xbox_SecuritySector:
|
||||
txtDecoded.Text = SS.Prettify(tagWithData.Data);
|
||||
break;
|
||||
case MediaTagType.SCSI_MODESENSE_6:
|
||||
txtDecoded.Text = Modes.PrettifyModeHeader6(tagWithData.Data, PeripheralDeviceTypes.DirectAccess);
|
||||
break;
|
||||
case MediaTagType.SCSI_MODESENSE_10:
|
||||
txtDecoded.Text = Modes.PrettifyModeHeader10(tagWithData.Data, PeripheralDeviceTypes.DirectAccess);
|
||||
break;
|
||||
case MediaTagType.Xbox_DMI:
|
||||
txtDecoded.Text = DMI.IsXbox360(tagWithData.Data)
|
||||
? DMI.PrettifyXbox360(tagWithData.Data)
|
||||
: DMI.PrettifyXbox(tagWithData.Data);
|
||||
break;
|
||||
default:
|
||||
tabDecoded.Visible = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
class MediaTagWithData
|
||||
{
|
||||
public MediaTagType Tag { get; set; }
|
||||
public byte[] Data { get; set; }
|
||||
}
|
||||
|
||||
#region XAML IDs
|
||||
Label lblTag;
|
||||
ComboBox cmbTag;
|
||||
TabPage tabPrintHex;
|
||||
TextArea txtPrintHex;
|
||||
TabPage tabDecoded;
|
||||
TextArea txtDecoded;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -187,6 +187,12 @@ namespace DiscImageChef.Gui.Forms
|
||||
menuItem = new ButtonMenuItem {Text = "View sectors"};
|
||||
menuItem.Click += (a, b) => { new frmPrintHex(image).Show(); };
|
||||
treeImagesMenu.Items.Add(menuItem);
|
||||
|
||||
if(!image.Info.ReadableMediaTags.Any()) return;
|
||||
|
||||
menuItem = new ButtonMenuItem {Text = "Decode media tags"};
|
||||
menuItem.Click += (a, b) => { new frmDecodeMediaTags(image).Show(); };
|
||||
treeImagesMenu.Items.Add(menuItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
<Button ID="btnConvert" Text="Convert to..." Click="OnBtnConvert"/>
|
||||
<Button ID="btnCreateSidecar" Text="Create CICM XML sidecar..." Click="OnBtnCreateSidecar"/>
|
||||
<Button ID="btnViewSectors" Text="View sectors" Click="OnBtnViewSectors"/>
|
||||
<Button ID="btnDecodeMediaTags" Text="Decode media tags" Click="OnBtnDecodeMediaTags"/>
|
||||
</StackLayout>
|
||||
</StackLayoutItem>
|
||||
</StackLayout>
|
||||
|
||||
@@ -55,15 +55,16 @@ namespace DiscImageChef.Gui.Panels
|
||||
{
|
||||
public class pnlImageInfo : Panel
|
||||
{
|
||||
IFilter filter;
|
||||
frmImageChecksum frmImageChecksum;
|
||||
frmImageConvert frmImageConvert;
|
||||
frmImageEntropy frmImageEntropy;
|
||||
frmImageSidecar frmImageSidecar;
|
||||
frmImageVerify frmImageVerify;
|
||||
frmPrintHex frmPrintHex;
|
||||
IMediaImage imageFormat;
|
||||
string imagePath;
|
||||
IFilter filter;
|
||||
frmDecodeMediaTags frmDecodeMediaTags;
|
||||
frmImageChecksum frmImageChecksum;
|
||||
frmImageConvert frmImageConvert;
|
||||
frmImageEntropy frmImageEntropy;
|
||||
frmImageSidecar frmImageSidecar;
|
||||
frmImageVerify frmImageVerify;
|
||||
frmPrintHex frmPrintHex;
|
||||
IMediaImage imageFormat;
|
||||
string imagePath;
|
||||
|
||||
public pnlImageInfo(string imagePath, IFilter filter, IMediaImage imageFormat)
|
||||
{
|
||||
@@ -873,6 +874,19 @@ namespace DiscImageChef.Gui.Panels
|
||||
frmPrintHex.Show();
|
||||
}
|
||||
|
||||
protected void OnBtnDecodeMediaTags(object sender, EventArgs e)
|
||||
{
|
||||
if(frmDecodeMediaTags != null)
|
||||
{
|
||||
frmDecodeMediaTags.Show();
|
||||
return;
|
||||
}
|
||||
|
||||
frmDecodeMediaTags = new frmDecodeMediaTags(imageFormat);
|
||||
frmDecodeMediaTags.Closed += (s, ea) => { frmDecodeMediaTags = null; };
|
||||
frmDecodeMediaTags.Show();
|
||||
}
|
||||
|
||||
#region XAML controls
|
||||
#pragma warning disable 169
|
||||
#pragma warning disable 649
|
||||
@@ -923,6 +937,7 @@ namespace DiscImageChef.Gui.Panels
|
||||
Button btnChecksum;
|
||||
Button btnConvert;
|
||||
Button btnViewSectors;
|
||||
Button btnDecodeMediaTags;
|
||||
#pragma warning restore 169
|
||||
#pragma warning restore 649
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user