mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Migrate xbox info from Eto.Forms to Avalonia.
This commit is contained in:
5
.idea/.idea.Aaru/.idea/contentModel.xml
generated
5
.idea/.idea.Aaru/.idea/contentModel.xml
generated
@@ -1292,8 +1292,8 @@
|
|||||||
<e p="ScsiInfoTab.xaml.cs" t="Include" />
|
<e p="ScsiInfoTab.xaml.cs" t="Include" />
|
||||||
<e p="SdMmcInfo.xaml" t="Include" />
|
<e p="SdMmcInfo.xaml" t="Include" />
|
||||||
<e p="SdMmcInfo.xaml.cs" t="Include" />
|
<e p="SdMmcInfo.xaml.cs" t="Include" />
|
||||||
<e p="tabXboxInfo.xeto" t="Include" />
|
<e p="XboxInfoTab.xaml" t="Include" />
|
||||||
<e p="tabXboxInfo.xeto.cs" t="Include" />
|
<e p="XboxInfoTab.xaml.cs" t="Include" />
|
||||||
</e>
|
</e>
|
||||||
<e p="ViewLocator.cs" t="Include" />
|
<e p="ViewLocator.cs" t="Include" />
|
||||||
<e p="ViewModels" t="Include">
|
<e p="ViewModels" t="Include">
|
||||||
@@ -1316,6 +1316,7 @@
|
|||||||
<e p="SplashWindowViewModel.cs" t="Include" />
|
<e p="SplashWindowViewModel.cs" t="Include" />
|
||||||
<e p="StatisticsDialogViewModel.cs" t="Include" />
|
<e p="StatisticsDialogViewModel.cs" t="Include" />
|
||||||
<e p="ViewModelBase.cs" t="Include" />
|
<e p="ViewModelBase.cs" t="Include" />
|
||||||
|
<e p="XboxInfoViewModel.cs" t="Include" />
|
||||||
</e>
|
</e>
|
||||||
<e p="Views" t="Include">
|
<e p="Views" t="Include">
|
||||||
<e p="AboutDialog.xaml" t="Include" />
|
<e p="AboutDialog.xaml" t="Include" />
|
||||||
|
|||||||
@@ -162,6 +162,12 @@
|
|||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
<ContentControl Content="{Binding SdMmcInfo}" />
|
<ContentControl Content="{Binding SdMmcInfo}" />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding !!XboxInfo}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<TextBlock Text="Xbox" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<ContentControl Content="{Binding XboxInfo}" />
|
||||||
|
</TabItem>
|
||||||
</TabControl>
|
</TabControl>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="5">
|
<StackPanel Orientation="Horizontal" Spacing="5">
|
||||||
<Button Command="{Binding EntropyCommand}">
|
<Button Command="{Binding EntropyCommand}">
|
||||||
|
|||||||
@@ -142,12 +142,14 @@ namespace Aaru.Gui.Panels
|
|||||||
|
|
||||||
tabInfos.Pages.Add(tabDvdInfo);
|
tabInfos.Pages.Add(tabDvdInfo);
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
var tabXboxInfo = new tabXboxInfo();
|
var tabXboxInfo = new tabXboxInfo();
|
||||||
|
|
||||||
tabXboxInfo.LoadData(scsiInfo.XgdInfo, scsiInfo.DvdDmi, scsiInfo.XboxSecuritySector,
|
tabXboxInfo.LoadData(scsiInfo.XgdInfo, scsiInfo.DvdDmi, scsiInfo.XboxSecuritySector,
|
||||||
scsiInfo.DecodedXboxSecuritySector);
|
scsiInfo.DecodedXboxSecuritySector);
|
||||||
|
|
||||||
tabInfos.Pages.Add(tabXboxInfo);
|
tabInfos.Pages.Add(tabXboxInfo);
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
var tabDvdWritableInfo = new tabDvdWritableInfo();
|
var tabDvdWritableInfo = new tabDvdWritableInfo();
|
||||||
|
|
||||||
|
|||||||
44
Aaru.Gui/Tabs/XboxInfoTab.xaml
Normal file
44
Aaru.Gui/Tabs/XboxInfoTab.xaml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<UserControl xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:vm="clr-namespace:Aaru.Gui.ViewModels" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
|
x:Class="Aaru.Gui.Tabs.XboxInfoTab">
|
||||||
|
<Design.DataContext>
|
||||||
|
<vm:XboxInfoViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<StackPanel>
|
||||||
|
<StackPanel IsVisible="{Binding XboxInformationVisible}">
|
||||||
|
<StackPanel Orientation="Horizontal" IsVisible="{Binding !!XboxL0VideoText}">
|
||||||
|
<TextBlock Text="Video layer 0 size" /> <TextBox IsReadOnly="True" Text="{Binding XboxL0VideoText}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal" IsVisible="{Binding !!XboxL1VideoText}">
|
||||||
|
<TextBlock Text="Video layer 0 size" /> <TextBox IsReadOnly="True" Text="{Binding XboxL1VideoText}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal" IsVisible="{Binding !!XboxMiddleZoneText}">
|
||||||
|
<TextBlock Text="Video layer 0 size" /> <TextBox IsReadOnly="True" Text="{Binding XboxMiddleZoneText}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal" IsVisible="{Binding !!XboxGameSizeText}">
|
||||||
|
<TextBlock Text="Video layer 0 size" /> <TextBox IsReadOnly="True" Text="{Binding XboxGameSizeText}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal" IsVisible="{Binding !!XboxTotalSizeText}">
|
||||||
|
<TextBlock Text="Video layer 0 size" /> <TextBox IsReadOnly="True" Text="{Binding XboxTotalSizeText}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal" IsVisible="{Binding !!XboxRealBreakText}">
|
||||||
|
<TextBlock Text="Video layer 0 size" /> <TextBox IsReadOnly="True" Text="{Binding XboxRealBreakText}" />
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel>
|
||||||
|
<StackPanel IsVisible="{Binding !!XboxDmiText}">
|
||||||
|
<TextBlock Text="Disc Manufacturing Information" />
|
||||||
|
<TextBox IsReadOnly="True" Text="{Binding XboxDmiText}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel IsVisible="{Binding !!XboxSsText}">
|
||||||
|
<TextBlock Text="Security Sector" /> <TextBox IsReadOnly="True" Text="{Binding XboxSsText}" />
|
||||||
|
</StackPanel>
|
||||||
|
<Button HorizontalAlignment="Right" IsVisible="{Binding SaveXboxSsVisible}"
|
||||||
|
Command="{Binding SaveXboxSsCommand}">
|
||||||
|
<TextBlock Text="Save Xbox Security Sector" />
|
||||||
|
</Button>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</UserControl>
|
||||||
12
Aaru.Gui/Tabs/XboxInfoTab.xaml.cs
Normal file
12
Aaru.Gui/Tabs/XboxInfoTab.xaml.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
|
|
||||||
|
namespace Aaru.Gui.Tabs
|
||||||
|
{
|
||||||
|
public class XboxInfoTab : UserControl
|
||||||
|
{
|
||||||
|
public XboxInfoTab() => InitializeComponent();
|
||||||
|
|
||||||
|
void InitializeComponent() => AvaloniaXamlLoader.Load(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?><!--
|
|
||||||
// /***************************************************************************
|
|
||||||
// The Disc Image Chef
|
|
||||||
// ============================================================================
|
|
||||||
//
|
|
||||||
// Filename : tabXboxInfo.xeto
|
|
||||||
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
||||||
//
|
|
||||||
// Component : Media information.
|
|
||||||
//
|
|
||||||
// ==[ Description ] ==========================================================
|
|
||||||
//
|
|
||||||
// Defines the structure for the Xbox media information.
|
|
||||||
//
|
|
||||||
// ==[ 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
|
|
||||||
// ****************************************************************************/
|
|
||||||
-->
|
|
||||||
<TabPage Text="Xbox" Visible="False" xmlns="http://schema.picoe.ca/eto.forms"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
|
||||||
<StackLayout Orientation="Vertical">
|
|
||||||
<StackLayout Orientation="Vertical" ID="stkXboxInformation" Visible="False">
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch">
|
|
||||||
<StackLayout Orientation="Horizontal">
|
|
||||||
<Label ID="lblXboxL0Video" Text="Video layer 0 size"/>
|
|
||||||
<TextBox ID="txtXboxL0Video" ReadOnly="True"/>
|
|
||||||
</StackLayout>
|
|
||||||
</StackLayoutItem>
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch">
|
|
||||||
<StackLayout Orientation="Horizontal">
|
|
||||||
<Label ID="lblXboxL1Video" Text="Video layer 1 size"/>
|
|
||||||
<TextBox ID="txtXboxL1Video" ReadOnly="True"/>
|
|
||||||
</StackLayout>
|
|
||||||
</StackLayoutItem>
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch">
|
|
||||||
<StackLayout Orientation="Horizontal">
|
|
||||||
<Label ID="lblXboxMiddleZone" Text="Middle zone size"/>
|
|
||||||
<TextBox ID="txtXboxMiddleZone" ReadOnly="True"/>
|
|
||||||
</StackLayout>
|
|
||||||
</StackLayoutItem>
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch">
|
|
||||||
<StackLayout Orientation="Horizontal">
|
|
||||||
<Label ID="lblXboxGameSize" Text="Game data size"/>
|
|
||||||
<TextBox ID="txtXboxGameSize" ReadOnly="True"/>
|
|
||||||
</StackLayout>
|
|
||||||
</StackLayoutItem>
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch">
|
|
||||||
<StackLayout Orientation="Horizontal">
|
|
||||||
<Label ID="lblXboxTotalSize" Text="Total size"/>
|
|
||||||
<TextBox ID="txtXboxTotalSize" ReadOnly="True"/>
|
|
||||||
</StackLayout>
|
|
||||||
</StackLayoutItem>
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch">
|
|
||||||
<StackLayout Orientation="Horizontal">
|
|
||||||
<Label ID="lblXboxRealBreak" Text="Real layer break"/>
|
|
||||||
<TextBox ID="txtXboxRealBreak" ReadOnly="True"/>
|
|
||||||
</StackLayout>
|
|
||||||
</StackLayoutItem>
|
|
||||||
</StackLayout>
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch" Expand="True" VerticalAlignment="Stretch">
|
|
||||||
<GroupBox ID="grpXboxDmi" Text="Disc Manufacturing Information" Visible="False">
|
|
||||||
<TextArea ID="txtXboxDmi" ReadOnly="True"/>
|
|
||||||
</GroupBox>
|
|
||||||
</StackLayoutItem>
|
|
||||||
<StackLayoutItem HorizontalAlignment="Stretch" Expand="True" VerticalAlignment="Stretch">
|
|
||||||
<GroupBox ID="grpXboxSs" Text="Security Sector" Visible="False">
|
|
||||||
<TextArea ID="txtXboxSs" ReadOnly="True"/>
|
|
||||||
</GroupBox>
|
|
||||||
</StackLayoutItem>
|
|
||||||
<Button ID="btnSaveXboxSs" Click="OnBtnSaveXboxSsClick" Text="Save Xbox Security Sector" Visible="False"/>
|
|
||||||
</StackLayout>
|
|
||||||
</TabPage>
|
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
// /***************************************************************************
|
|
||||||
// Aaru Data Preservation Suite
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Filename : tabXboxInfo.xeto.cs
|
|
||||||
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
||||||
//
|
|
||||||
// Component : Media information.
|
|
||||||
//
|
|
||||||
// --[ Description ] ----------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Implements the Xbox media information.
|
|
||||||
//
|
|
||||||
// --[ 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
|
|
||||||
// ****************************************************************************/
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using Aaru.Core.Media.Info;
|
|
||||||
using Aaru.Decoders.Xbox;
|
|
||||||
using Eto.Forms;
|
|
||||||
using Eto.Serialization.Xaml;
|
|
||||||
|
|
||||||
namespace Aaru.Gui.Tabs
|
|
||||||
{
|
|
||||||
public class tabXboxInfo : TabPage
|
|
||||||
{
|
|
||||||
byte[] xboxSecuritySector;
|
|
||||||
|
|
||||||
public tabXboxInfo() => XamlReader.Load(this);
|
|
||||||
|
|
||||||
internal void LoadData(XgdInfo xgdInfo, byte[] dmi, byte[] securitySector,
|
|
||||||
SS.SecuritySector? decodedSecuritySector)
|
|
||||||
{
|
|
||||||
xboxSecuritySector = securitySector;
|
|
||||||
|
|
||||||
if(xgdInfo != null)
|
|
||||||
{
|
|
||||||
stkXboxInformation.Visible = true;
|
|
||||||
txtXboxL0Video.Text = $"{xgdInfo.L0Video} sectors";
|
|
||||||
txtXboxL1Video.Text = $"{xgdInfo.L1Video} sectors";
|
|
||||||
txtXboxMiddleZone.Text = $"{xgdInfo.MiddleZone} sectors";
|
|
||||||
txtXboxGameSize.Text = $"{xgdInfo.GameSize} sectors";
|
|
||||||
txtXboxTotalSize.Text = $"{xgdInfo.TotalSize} sectors";
|
|
||||||
txtXboxRealBreak.Text = xgdInfo.LayerBreak.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(dmi != null)
|
|
||||||
{
|
|
||||||
if(DMI.IsXbox(dmi))
|
|
||||||
{
|
|
||||||
grpXboxDmi.Visible = true;
|
|
||||||
txtXboxDmi.Text = DMI.PrettifyXbox(dmi);
|
|
||||||
}
|
|
||||||
else if(DMI.IsXbox360(dmi))
|
|
||||||
{
|
|
||||||
grpXboxDmi.Visible = true;
|
|
||||||
txtXboxDmi.Text = DMI.PrettifyXbox360(dmi);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(decodedSecuritySector.HasValue)
|
|
||||||
{
|
|
||||||
grpXboxSs.Visible = true;
|
|
||||||
txtXboxSs.Text = SS.Prettify(decodedSecuritySector);
|
|
||||||
}
|
|
||||||
|
|
||||||
btnSaveXboxSs.Visible = securitySector != null;
|
|
||||||
|
|
||||||
Visible = stkXboxInformation.Visible || grpXboxDmi.Visible || grpXboxSs.Visible || btnSaveXboxSs.Visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SaveElement(byte[] data)
|
|
||||||
{
|
|
||||||
var dlgSaveBinary = new SaveFileDialog();
|
|
||||||
|
|
||||||
dlgSaveBinary.Filters.Add(new FileFilter
|
|
||||||
{
|
|
||||||
Extensions = new[]
|
|
||||||
{
|
|
||||||
"*.bin"
|
|
||||||
},
|
|
||||||
Name = "Binary"
|
|
||||||
});
|
|
||||||
|
|
||||||
DialogResult result = dlgSaveBinary.ShowDialog(this);
|
|
||||||
|
|
||||||
if(result != DialogResult.Ok)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var saveFs = new FileStream(dlgSaveBinary.FileName, FileMode.Create);
|
|
||||||
saveFs.Write(data, 0, data.Length);
|
|
||||||
|
|
||||||
saveFs.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void OnBtnSaveXboxSsClick(object sender, EventArgs e) => SaveElement(xboxSecuritySector);
|
|
||||||
|
|
||||||
#region XAML controls
|
|
||||||
#pragma warning disable 169
|
|
||||||
#pragma warning disable 649
|
|
||||||
StackLayout stkXboxInformation;
|
|
||||||
Label lblXboxL0Video;
|
|
||||||
TextBox txtXboxL0Video;
|
|
||||||
Label lblXboxL1Video;
|
|
||||||
TextBox txtXboxL1Video;
|
|
||||||
Label lblXboxMiddleZone;
|
|
||||||
TextBox txtXboxMiddleZone;
|
|
||||||
Label lblXboxGameSize;
|
|
||||||
TextBox txtXboxGameSize;
|
|
||||||
Label lblXboxTotalSize;
|
|
||||||
TextBox txtXboxTotalSize;
|
|
||||||
Label lblXboxRealBreak;
|
|
||||||
TextBox txtXboxRealBreak;
|
|
||||||
GroupBox grpXboxDmi;
|
|
||||||
TextArea txtXboxDmi;
|
|
||||||
GroupBox grpXboxSs;
|
|
||||||
TextArea txtXboxSs;
|
|
||||||
Button btnSaveXboxSs;
|
|
||||||
#pragma warning restore 169
|
|
||||||
#pragma warning restore 649
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -10,6 +10,7 @@ using Aaru.CommonTypes.Structs.Devices.SCSI;
|
|||||||
using Aaru.Decoders.CD;
|
using Aaru.Decoders.CD;
|
||||||
using Aaru.Decoders.DVD;
|
using Aaru.Decoders.DVD;
|
||||||
using Aaru.Decoders.SCSI;
|
using Aaru.Decoders.SCSI;
|
||||||
|
using Aaru.Decoders.Xbox;
|
||||||
using Aaru.Gui.Models;
|
using Aaru.Gui.Models;
|
||||||
using Aaru.Gui.Tabs;
|
using Aaru.Gui.Tabs;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
@@ -502,8 +503,6 @@ namespace Aaru.Gui.ViewModels
|
|||||||
blurayPowResources, blurayTrackResources, null, null, _view)
|
blurayPowResources, blurayTrackResources, null, null, _view)
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TODO: tabXboxInfo
|
|
||||||
|
|
||||||
byte[] xboxDmi = null;
|
byte[] xboxDmi = null;
|
||||||
byte[] xboxSecuritySector = null;
|
byte[] xboxSecuritySector = null;
|
||||||
SS.SecuritySector? decodedXboxSecuritySector = null;
|
SS.SecuritySector? decodedXboxSecuritySector = null;
|
||||||
@@ -519,10 +518,10 @@ namespace Aaru.Gui.ViewModels
|
|||||||
decodedXboxSecuritySector = SS.Decode(xboxSecuritySector);
|
decodedXboxSecuritySector = SS.Decode(xboxSecuritySector);
|
||||||
}
|
}
|
||||||
|
|
||||||
var tabXboxInfo = new tabXboxInfo();
|
XboxInfo = new XboxInfoTab
|
||||||
tabXboxInfo.LoadData(null, xboxDmi, xboxSecuritySector, decodedXboxSecuritySector);
|
{
|
||||||
tabInfos.Pages.Add(tabXboxInfo);
|
DataContext = new XboxInfoViewModel(null, xboxDmi, xboxSecuritySector, decodedXboxSecuritySector, _view)
|
||||||
*/
|
};
|
||||||
|
|
||||||
byte[] pcmciaCis = null;
|
byte[] pcmciaCis = null;
|
||||||
|
|
||||||
@@ -651,6 +650,7 @@ namespace Aaru.Gui.ViewModels
|
|||||||
public DvdInfoTab DvdInfo { get; }
|
public DvdInfoTab DvdInfo { get; }
|
||||||
public DvdWritableInfoTab DvdWritableInfo { get; }
|
public DvdWritableInfoTab DvdWritableInfo { get; }
|
||||||
public BlurayInfoTab BlurayInfo { get; }
|
public BlurayInfoTab BlurayInfo { get; }
|
||||||
|
public XboxInfoTab XboxInfo { get; }
|
||||||
public PcmciaInfoTab PcmciaInfo { get; }
|
public PcmciaInfoTab PcmciaInfo { get; }
|
||||||
public SdMmcInfoTab SdMmcInfo { get; }
|
public SdMmcInfoTab SdMmcInfo { get; }
|
||||||
public Bitmap MediaLogo { get; }
|
public Bitmap MediaLogo { get; }
|
||||||
|
|||||||
85
Aaru.Gui/ViewModels/XboxInfoViewModel.cs
Normal file
85
Aaru.Gui/ViewModels/XboxInfoViewModel.cs
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reactive;
|
||||||
|
using Aaru.Core.Media.Info;
|
||||||
|
using Aaru.Decoders.Xbox;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using ReactiveUI;
|
||||||
|
|
||||||
|
namespace Aaru.Gui.ViewModels
|
||||||
|
{
|
||||||
|
public class XboxInfoViewModel
|
||||||
|
{
|
||||||
|
Window _view;
|
||||||
|
readonly byte[] xboxSecuritySector;
|
||||||
|
|
||||||
|
public XboxInfoViewModel(XgdInfo xgdInfo, byte[] dmi, byte[] securitySector,
|
||||||
|
SS.SecuritySector? decodedSecuritySector, Window view)
|
||||||
|
{
|
||||||
|
xboxSecuritySector = securitySector;
|
||||||
|
SaveXboxSsCommand = ReactiveCommand.Create(ExecuteSaveXboxSsCommand);
|
||||||
|
|
||||||
|
if(xgdInfo != null)
|
||||||
|
{
|
||||||
|
XboxInformationVisible = true;
|
||||||
|
XboxL0VideoText = $"{xgdInfo.L0Video} sectors";
|
||||||
|
XboxL1VideoText = $"{xgdInfo.L1Video} sectors";
|
||||||
|
XboxMiddleZoneText = $"{xgdInfo.MiddleZone} sectors";
|
||||||
|
XboxGameSizeText = $"{xgdInfo.GameSize} sectors";
|
||||||
|
XboxTotalSizeText = $"{xgdInfo.TotalSize} sectors";
|
||||||
|
XboxRealBreakText = xgdInfo.LayerBreak.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(dmi != null)
|
||||||
|
{
|
||||||
|
if(DMI.IsXbox(dmi))
|
||||||
|
XboxDmiText = DMI.PrettifyXbox(dmi);
|
||||||
|
else if(DMI.IsXbox360(dmi))
|
||||||
|
XboxDmiText = DMI.PrettifyXbox360(dmi);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(decodedSecuritySector.HasValue)
|
||||||
|
XboxSsText = SS.Prettify(decodedSecuritySector);
|
||||||
|
|
||||||
|
SaveXboxSsVisible = securitySector != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReactiveCommand<Unit, Unit> SaveXboxSsCommand { get; }
|
||||||
|
public bool XboxInformationVisible { get; }
|
||||||
|
public bool SaveXboxSsVisible { get; }
|
||||||
|
public string XboxL0VideoText { get; }
|
||||||
|
public string XboxL1VideoText { get; }
|
||||||
|
public string XboxMiddleZoneText { get; }
|
||||||
|
public string XboxGameSizeText { get; }
|
||||||
|
public string XboxTotalSizeText { get; }
|
||||||
|
public string XboxRealBreakText { get; }
|
||||||
|
public string XboxDmiText { get; }
|
||||||
|
public string XboxSsText { get; }
|
||||||
|
|
||||||
|
async void SaveElement(byte[] data)
|
||||||
|
{
|
||||||
|
var dlgSaveBinary = new SaveFileDialog();
|
||||||
|
|
||||||
|
dlgSaveBinary.Filters.Add(new FileDialogFilter
|
||||||
|
{
|
||||||
|
Extensions = new List<string>(new[]
|
||||||
|
{
|
||||||
|
"*.bin"
|
||||||
|
}),
|
||||||
|
Name = "Binary"
|
||||||
|
});
|
||||||
|
|
||||||
|
string result = await dlgSaveBinary.ShowAsync(_view);
|
||||||
|
|
||||||
|
if(result is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var saveFs = new FileStream(result, FileMode.Create);
|
||||||
|
saveFs.Write(data, 0, data.Length);
|
||||||
|
|
||||||
|
saveFs.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ExecuteSaveXboxSsCommand() => SaveElement(xboxSecuritySector);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user