mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Migrate GUI to CommunityToolkit.Mvvm.
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
<PackageReference Include="Avalonia.Diagnostics"/>
|
||||
<PackageReference Include="Avalonia.Themes.Fluent"/>
|
||||
<PackageReference Include="Claunia.Encoding"/>
|
||||
<PackageReference Include="CommunityToolkit.Mvvm"/>
|
||||
<PackageReference Include="Humanizer.Core"/>
|
||||
<PackageReference Include="JetBrains.Annotations"/>
|
||||
<PackageReference Include="MessageBox.Avalonia"/>
|
||||
@@ -32,7 +33,6 @@
|
||||
<PackageReference Include="System.Text.Encoding.CodePages"/>
|
||||
<PackageReference Include="Avalonia"/>
|
||||
<PackageReference Include="Avalonia.Desktop"/>
|
||||
<PackageReference Include="Avalonia.ReactiveUI"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Aaru.Core\Aaru.Core.csproj"/>
|
||||
|
||||
@@ -91,7 +91,7 @@ public sealed class App : Application
|
||||
})
|
||||
return;
|
||||
|
||||
mainWindowViewModel.ExecuteAboutCommand();
|
||||
mainWindowViewModel.About();
|
||||
}
|
||||
|
||||
void OnQuitClicked(object sender, EventArgs args)
|
||||
@@ -105,7 +105,7 @@ public sealed class App : Application
|
||||
})
|
||||
return;
|
||||
|
||||
mainWindowViewModel.ExecuteExitCommand();
|
||||
mainWindowViewModel.Exit();
|
||||
}
|
||||
|
||||
void OnPreferencesClicked(object sender, EventArgs args)
|
||||
@@ -119,6 +119,6 @@ public sealed class App : Application
|
||||
})
|
||||
return;
|
||||
|
||||
mainWindowViewModel.ExecuteSettingsCommand();
|
||||
mainWindowViewModel.SettingsAsync();
|
||||
}
|
||||
}
|
||||
@@ -29,8 +29,6 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using Avalonia;
|
||||
using Avalonia.Dialogs;
|
||||
using Avalonia.ReactiveUI;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui;
|
||||
@@ -78,6 +76,5 @@ public static class Main
|
||||
}
|
||||
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
public static AppBuilder BuildAvaloniaApp() =>
|
||||
AppBuilder.Configure<App>().UsePlatformDetect().UseReactiveUI().UseManagedSystemDialogs();
|
||||
public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<App>().UsePlatformDetect();
|
||||
}
|
||||
@@ -34,22 +34,24 @@ using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Gui.Models;
|
||||
using Aaru.Gui.Views.Dialogs;
|
||||
using Aaru.Localization;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Dialogs;
|
||||
|
||||
public sealed class AboutViewModel : ViewModelBase
|
||||
public sealed partial class AboutViewModel : ViewModelBase
|
||||
{
|
||||
readonly About _view;
|
||||
string _versionText;
|
||||
[ObservableProperty]
|
||||
string _versionText;
|
||||
|
||||
public AboutViewModel(About view)
|
||||
{
|
||||
@@ -59,13 +61,13 @@ public sealed class AboutViewModel : ViewModelBase
|
||||
(Attribute.GetCustomAttribute(typeof(App).Assembly, typeof(AssemblyInformationalVersionAttribute)) as
|
||||
AssemblyInformationalVersionAttribute)?.InformationalVersion;
|
||||
|
||||
WebsiteCommand = ReactiveCommand.Create(ExecuteWebsiteCommand);
|
||||
LicenseCommand = ReactiveCommand.Create(ExecuteLicenseCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
WebsiteCommand = new RelayCommand(OpenWebsite);
|
||||
LicenseCommand = new AsyncRelayCommand(LicenseAsync);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
|
||||
Assemblies = [];
|
||||
|
||||
Task.Run(() =>
|
||||
_ = Task.Run(() =>
|
||||
{
|
||||
foreach(Assembly assembly in AppDomain.CurrentDomain.GetAssemblies().OrderBy(a => a.FullName))
|
||||
{
|
||||
@@ -125,18 +127,12 @@ public sealed class AboutViewModel : ViewModelBase
|
||||
[NotNull]
|
||||
public string Authors => UI.Text_Authors;
|
||||
|
||||
public ReactiveCommand<Unit, Unit> WebsiteCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> LicenseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ICommand WebsiteCommand { get; }
|
||||
public ICommand LicenseCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ObservableCollection<AssemblyModel> Assemblies { get; }
|
||||
|
||||
public string VersionText
|
||||
{
|
||||
get => _versionText;
|
||||
set => this.RaiseAndSetIfChanged(ref _versionText, value);
|
||||
}
|
||||
|
||||
static void ExecuteWebsiteCommand()
|
||||
static void OpenWebsite()
|
||||
{
|
||||
var process = new Process
|
||||
{
|
||||
@@ -163,12 +159,13 @@ public sealed class AboutViewModel : ViewModelBase
|
||||
process.Start();
|
||||
}
|
||||
|
||||
void ExecuteLicenseCommand()
|
||||
Task LicenseAsync()
|
||||
{
|
||||
var dialog = new LicenseDialog();
|
||||
dialog.DataContext = new LicenseViewModel(dialog);
|
||||
dialog.ShowDialog(_view);
|
||||
|
||||
return dialog.ShowDialog(_view);
|
||||
}
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
}
|
||||
@@ -34,17 +34,17 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.Interop;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Console = Aaru.Gui.Views.Dialogs.Console;
|
||||
using PlatformID = Aaru.CommonTypes.Interop.PlatformID;
|
||||
using Version = Aaru.CommonTypes.Interop.Version;
|
||||
@@ -59,15 +59,15 @@ public sealed class ConsoleViewModel : ViewModelBase
|
||||
public ConsoleViewModel(Console view)
|
||||
{
|
||||
_view = view;
|
||||
SaveCommand = ReactiveCommand.Create(ExecuteSaveCommand);
|
||||
ClearCommand = ReactiveCommand.Create(ExecuteClearCommand);
|
||||
SaveCommand = new AsyncRelayCommand(SaveAsync);
|
||||
ClearCommand = new RelayCommand(Clear);
|
||||
}
|
||||
|
||||
[NotNull]
|
||||
public string Title => UI.Title_Console;
|
||||
|
||||
public ReactiveCommand<Unit, Unit> ClearCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCommand { get; }
|
||||
public ICommand ClearCommand { get; }
|
||||
public ICommand SaveCommand { get; }
|
||||
public ObservableCollection<LogEntry> Entries => ConsoleHandler.Entries;
|
||||
|
||||
[NotNull]
|
||||
@@ -90,11 +90,11 @@ public sealed class ConsoleViewModel : ViewModelBase
|
||||
set
|
||||
{
|
||||
ConsoleHandler.Debug = value;
|
||||
this.RaiseAndSetIfChanged(ref _debugChecked, value);
|
||||
SetProperty(ref _debugChecked, value);
|
||||
}
|
||||
}
|
||||
|
||||
async Task ExecuteSaveCommand()
|
||||
async Task SaveAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -165,11 +165,11 @@ public sealed class ConsoleViewModel : ViewModelBase
|
||||
Icon.Error)
|
||||
.ShowWindowDialogAsync(_view);
|
||||
|
||||
AaruLogging.Exception(exception, UI
|
||||
.Exception_0_trying_to_save_logfile_details_has_been_sent_to_console,
|
||||
AaruLogging.Exception(exception,
|
||||
UI.Exception_0_trying_to_save_logfile_details_has_been_sent_to_console,
|
||||
exception.Message);
|
||||
}
|
||||
}
|
||||
|
||||
static void ExecuteClearCommand() => ConsoleHandler.Entries.Clear();
|
||||
static void Clear() => ConsoleHandler.Entries.Clear();
|
||||
}
|
||||
@@ -32,14 +32,14 @@
|
||||
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Gui.Models;
|
||||
using Aaru.Gui.Views.Dialogs;
|
||||
using Aaru.Localization;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Dialogs;
|
||||
|
||||
@@ -51,9 +51,9 @@ public sealed class EncodingsViewModel : ViewModelBase
|
||||
{
|
||||
_view = view;
|
||||
Encodings = [];
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
|
||||
Task.Run(() =>
|
||||
_ = Task.Run(() =>
|
||||
{
|
||||
var encodings = Encoding.GetEncodings()
|
||||
.Select(info => new EncodingModel
|
||||
@@ -83,8 +83,8 @@ public sealed class EncodingsViewModel : ViewModelBase
|
||||
public string CodeLabel => UI.Title_Code_for_encoding;
|
||||
public string NameLabel => UI.Title_Name;
|
||||
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ObservableCollection<EncodingModel> Encodings { get; }
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
}
|
||||
@@ -31,12 +31,12 @@
|
||||
// ****************************************************************************/
|
||||
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Reflection;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Gui.Views.Dialogs;
|
||||
using Aaru.Localization;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Dialogs;
|
||||
|
||||
@@ -48,7 +48,7 @@ public sealed class LicenseViewModel : ViewModelBase
|
||||
public LicenseViewModel(LicenseDialog view)
|
||||
{
|
||||
_view = view;
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
|
||||
// TODO: Localize
|
||||
using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Aaru.Gui.LICENSE");
|
||||
@@ -66,8 +66,8 @@ public sealed class LicenseViewModel : ViewModelBase
|
||||
[NotNull]
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
|
||||
public string LicenseText { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public string LicenseText { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
}
|
||||
@@ -31,15 +31,15 @@
|
||||
// ****************************************************************************/
|
||||
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Reactive;
|
||||
using System.Reflection;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Gui.Models;
|
||||
using Aaru.Gui.Views.Dialogs;
|
||||
using Aaru.Localization;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Dialogs;
|
||||
|
||||
@@ -58,7 +58,7 @@ public sealed class PluginsViewModel : ViewModelBase
|
||||
WritableImages = [];
|
||||
FloppyImages = [];
|
||||
WritableFloppyImages = [];
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
|
||||
// TODO: Takes too much time
|
||||
foreach(IFilter filter in PluginRegister.Singleton.Filters.Values)
|
||||
@@ -201,7 +201,7 @@ public sealed class PluginsViewModel : ViewModelBase
|
||||
public string VersionLabel => UI.Title_Version;
|
||||
public string AuthorLabel => UI.Title_Author;
|
||||
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ObservableCollection<PluginModel> Filters { get; }
|
||||
public ObservableCollection<PluginModel> PartitionSchemes { get; }
|
||||
public ObservableCollection<PluginModel> Filesystems { get; }
|
||||
@@ -211,5 +211,5 @@ public sealed class PluginsViewModel : ViewModelBase
|
||||
public ObservableCollection<PluginModel> FloppyImages { get; }
|
||||
public ObservableCollection<PluginModel> WritableFloppyImages { get; }
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
}
|
||||
@@ -30,33 +30,49 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System.Reactive;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Gui.Views.Dialogs;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Settings;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Dialogs;
|
||||
|
||||
public sealed class SettingsViewModel : ViewModelBase
|
||||
public sealed partial class SettingsViewModel : ViewModelBase
|
||||
{
|
||||
readonly SettingsDialog _view;
|
||||
bool _commandStatsChecked;
|
||||
bool _deviceStatsChecked;
|
||||
bool _filesystemStatsChecked;
|
||||
bool _filterStatsChecked;
|
||||
bool _gdprVisible;
|
||||
bool _mediaImageStatsChecked;
|
||||
bool _mediaScanStatsChecked;
|
||||
bool _mediaStatsChecked;
|
||||
bool _partitionStatsChecked;
|
||||
bool _saveReportsGloballyChecked;
|
||||
bool _saveStatsChecked;
|
||||
bool _shareReportsChecked;
|
||||
bool _shareStatsChecked;
|
||||
int _tabControlSelectedIndex;
|
||||
bool _verifyStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _commandStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _deviceStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _filesystemStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _filterStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _gdprVisible;
|
||||
[ObservableProperty]
|
||||
bool _mediaImageStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _mediaScanStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _mediaStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _partitionStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _saveReportsGloballyChecked;
|
||||
[ObservableProperty]
|
||||
bool _saveStatsChecked;
|
||||
[ObservableProperty]
|
||||
bool _shareReportsChecked;
|
||||
[ObservableProperty]
|
||||
bool _shareStatsChecked;
|
||||
[ObservableProperty]
|
||||
int _tabControlSelectedIndex;
|
||||
[ObservableProperty]
|
||||
bool _verifyStatsChecked;
|
||||
|
||||
public SettingsViewModel(SettingsDialog view, bool gdprChange)
|
||||
{
|
||||
@@ -82,8 +98,8 @@ public sealed class SettingsViewModel : ViewModelBase
|
||||
else
|
||||
SaveStatsChecked = false;
|
||||
|
||||
CancelCommand = ReactiveCommand.Create(ExecuteCancelCommand);
|
||||
SaveCommand = ReactiveCommand.Create(ExecuteSaveCommand);
|
||||
CancelCommand = new RelayCommand(Cancel);
|
||||
SaveCommand = new RelayCommand(Save);
|
||||
|
||||
if(!_gdprVisible) _tabControlSelectedIndex = 1;
|
||||
}
|
||||
@@ -164,100 +180,10 @@ public sealed class SettingsViewModel : ViewModelBase
|
||||
[NotNull]
|
||||
public string VerifyStatsText => UI.Gather_statistics_about_media_image_verifications_Q;
|
||||
|
||||
public ReactiveCommand<Unit, Unit> CancelCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> SaveCommand { get; }
|
||||
public ICommand CancelCommand { get; }
|
||||
public ICommand SaveCommand { get; }
|
||||
|
||||
public bool GdprVisible
|
||||
{
|
||||
get => _gdprVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _gdprVisible, value);
|
||||
}
|
||||
|
||||
public bool SaveReportsGloballyChecked
|
||||
{
|
||||
get => _saveReportsGloballyChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveReportsGloballyChecked, value);
|
||||
}
|
||||
|
||||
public bool ShareReportsChecked
|
||||
{
|
||||
get => _shareReportsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _shareReportsChecked, value);
|
||||
}
|
||||
|
||||
public bool SaveStatsChecked
|
||||
{
|
||||
get => _saveStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool ShareStatsChecked
|
||||
{
|
||||
get => _shareStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _shareStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool CommandStatsChecked
|
||||
{
|
||||
get => _commandStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _commandStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool DeviceStatsChecked
|
||||
{
|
||||
get => _deviceStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _deviceStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool FilesystemStatsChecked
|
||||
{
|
||||
get => _filesystemStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _filesystemStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool FilterStatsChecked
|
||||
{
|
||||
get => _filterStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _filterStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool MediaImageStatsChecked
|
||||
{
|
||||
get => _mediaImageStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaImageStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool MediaScanStatsChecked
|
||||
{
|
||||
get => _mediaScanStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaScanStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool PartitionStatsChecked
|
||||
{
|
||||
get => _partitionStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _partitionStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool MediaStatsChecked
|
||||
{
|
||||
get => _mediaStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaStatsChecked, value);
|
||||
}
|
||||
|
||||
public bool VerifyStatsChecked
|
||||
{
|
||||
get => _verifyStatsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifyStatsChecked, value);
|
||||
}
|
||||
|
||||
public int TabControlSelectedIndex
|
||||
{
|
||||
get => _tabControlSelectedIndex;
|
||||
set => this.RaiseAndSetIfChanged(ref _tabControlSelectedIndex, value);
|
||||
}
|
||||
|
||||
void ExecuteSaveCommand()
|
||||
void Save()
|
||||
{
|
||||
Settings.Settings.Current.SaveReportsGlobally = SaveReportsGloballyChecked;
|
||||
Settings.Settings.Current.ShareReports = ShareReportsChecked;
|
||||
@@ -286,5 +212,5 @@ public sealed class SettingsViewModel : ViewModelBase
|
||||
_view.Close();
|
||||
}
|
||||
|
||||
void ExecuteCancelCommand() => _view.Close();
|
||||
void Cancel() => _view.Close();
|
||||
}
|
||||
@@ -32,14 +32,14 @@
|
||||
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Database;
|
||||
using Aaru.Database.Models;
|
||||
using Aaru.Gui.Models;
|
||||
using Aaru.Gui.Views.Dialogs;
|
||||
using Aaru.Localization;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
using NameCountModel = Aaru.Gui.Models.NameCountModel;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Dialogs;
|
||||
@@ -96,7 +96,7 @@ public sealed class StatisticsViewModel : ViewModelBase
|
||||
Filesystems = [];
|
||||
Devices = [];
|
||||
Medias = [];
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
|
||||
|
||||
if(ctx.Commands.Any())
|
||||
@@ -481,235 +481,235 @@ public sealed class StatisticsViewModel : ViewModelBase
|
||||
public string FsInfoText
|
||||
{
|
||||
get => _fsinfoText;
|
||||
set => this.RaiseAndSetIfChanged(ref _fsinfoText, value);
|
||||
set => SetProperty(ref _fsinfoText, value);
|
||||
}
|
||||
|
||||
public bool FsInfoVisible
|
||||
{
|
||||
get => _fsinfoVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _fsinfoVisible, value);
|
||||
set => SetProperty(ref _fsinfoVisible, value);
|
||||
}
|
||||
|
||||
public string ChecksumText
|
||||
{
|
||||
get => _checksumText;
|
||||
set => this.RaiseAndSetIfChanged(ref _checksumText, value);
|
||||
set => SetProperty(ref _checksumText, value);
|
||||
}
|
||||
|
||||
public bool ChecksumVisible
|
||||
{
|
||||
get => _checksumVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _checksumVisible, value);
|
||||
set => SetProperty(ref _checksumVisible, value);
|
||||
}
|
||||
|
||||
public string CompareText
|
||||
{
|
||||
get => _compareText;
|
||||
set => this.RaiseAndSetIfChanged(ref _compareText, value);
|
||||
set => SetProperty(ref _compareText, value);
|
||||
}
|
||||
|
||||
public bool CompareVisible
|
||||
{
|
||||
get => _compareVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _compareVisible, value);
|
||||
set => SetProperty(ref _compareVisible, value);
|
||||
}
|
||||
|
||||
public string ConvertImageText
|
||||
{
|
||||
get => _convertImageText;
|
||||
set => this.RaiseAndSetIfChanged(ref _convertImageText, value);
|
||||
set => SetProperty(ref _convertImageText, value);
|
||||
}
|
||||
|
||||
public bool ConvertImageVisible
|
||||
{
|
||||
get => _convertImageVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _convertImageVisible, value);
|
||||
set => SetProperty(ref _convertImageVisible, value);
|
||||
}
|
||||
|
||||
public string CreateSidecarText
|
||||
{
|
||||
get => _createSidecarText;
|
||||
set => this.RaiseAndSetIfChanged(ref _createSidecarText, value);
|
||||
set => SetProperty(ref _createSidecarText, value);
|
||||
}
|
||||
|
||||
public bool CreateSidecarVisible
|
||||
{
|
||||
get => _createSidecarVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _createSidecarVisible, value);
|
||||
set => SetProperty(ref _createSidecarVisible, value);
|
||||
}
|
||||
|
||||
public string DecodeText
|
||||
{
|
||||
get => _decodeText;
|
||||
set => this.RaiseAndSetIfChanged(ref _decodeText, value);
|
||||
set => SetProperty(ref _decodeText, value);
|
||||
}
|
||||
|
||||
public bool DecodeVisible
|
||||
{
|
||||
get => _decodeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _decodeVisible, value);
|
||||
set => SetProperty(ref _decodeVisible, value);
|
||||
}
|
||||
|
||||
public string DeviceInfoText
|
||||
{
|
||||
get => _deviceInfoText;
|
||||
set => this.RaiseAndSetIfChanged(ref _deviceInfoText, value);
|
||||
set => SetProperty(ref _deviceInfoText, value);
|
||||
}
|
||||
|
||||
public bool DeviceInfoVisible
|
||||
{
|
||||
get => _deviceInfoVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _deviceInfoVisible, value);
|
||||
set => SetProperty(ref _deviceInfoVisible, value);
|
||||
}
|
||||
|
||||
public string DeviceReportText
|
||||
{
|
||||
get => _deviceReportText;
|
||||
set => this.RaiseAndSetIfChanged(ref _deviceReportText, value);
|
||||
set => SetProperty(ref _deviceReportText, value);
|
||||
}
|
||||
|
||||
public bool DeviceReportVisible
|
||||
{
|
||||
get => _deviceReportVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _deviceReportVisible, value);
|
||||
set => SetProperty(ref _deviceReportVisible, value);
|
||||
}
|
||||
|
||||
public string DumpMediaText
|
||||
{
|
||||
get => _dumpMediaText;
|
||||
set => this.RaiseAndSetIfChanged(ref _dumpMediaText, value);
|
||||
set => SetProperty(ref _dumpMediaText, value);
|
||||
}
|
||||
|
||||
public bool DumpMediaVisible
|
||||
{
|
||||
get => _dumpMediaVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _dumpMediaVisible, value);
|
||||
set => SetProperty(ref _dumpMediaVisible, value);
|
||||
}
|
||||
|
||||
public string EntropyText
|
||||
{
|
||||
get => _entropyText;
|
||||
set => this.RaiseAndSetIfChanged(ref _entropyText, value);
|
||||
set => SetProperty(ref _entropyText, value);
|
||||
}
|
||||
|
||||
public bool EntropyVisible
|
||||
{
|
||||
get => _entropyVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _entropyVisible, value);
|
||||
set => SetProperty(ref _entropyVisible, value);
|
||||
}
|
||||
|
||||
public string FormatsCommandText
|
||||
{
|
||||
get => _formatsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _formatsText, value);
|
||||
set => SetProperty(ref _formatsText, value);
|
||||
}
|
||||
|
||||
public bool FormatsCommandVisible
|
||||
{
|
||||
get => _formatsCommandVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _formatsCommandVisible, value);
|
||||
set => SetProperty(ref _formatsCommandVisible, value);
|
||||
}
|
||||
|
||||
public string ImageInfoText
|
||||
{
|
||||
get => _imageInfoText;
|
||||
set => this.RaiseAndSetIfChanged(ref _imageInfoText, value);
|
||||
set => SetProperty(ref _imageInfoText, value);
|
||||
}
|
||||
|
||||
public bool ImageInfoVisible
|
||||
{
|
||||
get => _imageInfoVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _imageInfoVisible, value);
|
||||
set => SetProperty(ref _imageInfoVisible, value);
|
||||
}
|
||||
|
||||
public string MediaInfoText
|
||||
{
|
||||
get => _mediaInfoText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaInfoText, value);
|
||||
set => SetProperty(ref _mediaInfoText, value);
|
||||
}
|
||||
|
||||
public bool MediaInfoVisible
|
||||
{
|
||||
get => _mediaInfoVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaInfoVisible, value);
|
||||
set => SetProperty(ref _mediaInfoVisible, value);
|
||||
}
|
||||
|
||||
public string MediaScanText
|
||||
{
|
||||
get => _mediaScanText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaScanText, value);
|
||||
set => SetProperty(ref _mediaScanText, value);
|
||||
}
|
||||
|
||||
public bool MediaScanVisible
|
||||
{
|
||||
get => _mediaScanVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaScanVisible, value);
|
||||
set => SetProperty(ref _mediaScanVisible, value);
|
||||
}
|
||||
|
||||
public string PrintHexText
|
||||
{
|
||||
get => _printHexText;
|
||||
set => this.RaiseAndSetIfChanged(ref _printHexText, value);
|
||||
set => SetProperty(ref _printHexText, value);
|
||||
}
|
||||
|
||||
public bool PrintHexVisible
|
||||
{
|
||||
get => _printHexVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _printHexVisible, value);
|
||||
set => SetProperty(ref _printHexVisible, value);
|
||||
}
|
||||
|
||||
public string VerifyText
|
||||
{
|
||||
get => _verifyText;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifyText, value);
|
||||
set => SetProperty(ref _verifyText, value);
|
||||
}
|
||||
|
||||
public bool VerifyVisible
|
||||
{
|
||||
get => _verifyVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifyVisible, value);
|
||||
set => SetProperty(ref _verifyVisible, value);
|
||||
}
|
||||
|
||||
public bool CommandsVisible
|
||||
{
|
||||
get => _commandsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _commandsVisible, value);
|
||||
set => SetProperty(ref _commandsVisible, value);
|
||||
}
|
||||
|
||||
public bool FiltersVisible
|
||||
{
|
||||
get => _filtersVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _filtersVisible, value);
|
||||
set => SetProperty(ref _filtersVisible, value);
|
||||
}
|
||||
|
||||
public bool PartitionsVisible
|
||||
{
|
||||
get => _partitionsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _partitionsVisible, value);
|
||||
set => SetProperty(ref _partitionsVisible, value);
|
||||
}
|
||||
|
||||
public bool FormatsVisible
|
||||
{
|
||||
get => _formatsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _formatsVisible, value);
|
||||
set => SetProperty(ref _formatsVisible, value);
|
||||
}
|
||||
|
||||
public bool FilesystemsVisible
|
||||
{
|
||||
get => _filesystemsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _filesystemsVisible, value);
|
||||
set => SetProperty(ref _filesystemsVisible, value);
|
||||
}
|
||||
|
||||
public bool DevicesVisible
|
||||
{
|
||||
get => _devicesVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _devicesVisible, value);
|
||||
set => SetProperty(ref _devicesVisible, value);
|
||||
}
|
||||
|
||||
public bool MediasVisible
|
||||
{
|
||||
get => _mediasVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediasVisible, value);
|
||||
set => SetProperty(ref _mediasVisible, value);
|
||||
}
|
||||
|
||||
[NotNull]
|
||||
@@ -772,7 +772,7 @@ public sealed class StatisticsViewModel : ViewModelBase
|
||||
[NotNull]
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ObservableCollection<NameCountModel> Filters { get; }
|
||||
public ObservableCollection<NameCountModel> Formats { get; }
|
||||
public ObservableCollection<NameCountModel> Partitions { get; }
|
||||
@@ -780,5 +780,5 @@ public sealed class StatisticsViewModel : ViewModelBase
|
||||
public ObservableCollection<DeviceStatsModel> Devices { get; }
|
||||
public ObservableCollection<MediaStatsModel> Medias { get; }
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
}
|
||||
@@ -33,8 +33,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Decoders.SCSI.SSC;
|
||||
using Aaru.Devices;
|
||||
using Aaru.Gui.ViewModels.Tabs;
|
||||
@@ -42,110 +42,200 @@ using Aaru.Gui.Views.Tabs;
|
||||
using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Humanizer;
|
||||
using Humanizer.Localisation;
|
||||
using ReactiveUI;
|
||||
using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Panels;
|
||||
|
||||
public sealed class DeviceInfoViewModel : ViewModelBase
|
||||
public sealed partial class DeviceInfoViewModel : ViewModelBase
|
||||
{
|
||||
readonly DeviceInfo _devInfo;
|
||||
readonly Window _view;
|
||||
AtaInfo _ataInfo;
|
||||
string _blockLimits;
|
||||
string _blockSizeGranularity;
|
||||
string _cid;
|
||||
string _csd;
|
||||
string _densities;
|
||||
string _deviceType;
|
||||
string _extendedCsd;
|
||||
string _firewireGuid;
|
||||
string _firewireManufacturer;
|
||||
string _firewireModel;
|
||||
string _firewireModelId;
|
||||
string _firewireVendorId;
|
||||
bool _firewireVisible;
|
||||
bool _kreon;
|
||||
bool _kreonChallengeResponse;
|
||||
bool _kreonChallengeResponse360;
|
||||
bool _kreonDecryptSs;
|
||||
bool _kreonDecryptSs360;
|
||||
bool _kreonErrorSkipping;
|
||||
bool _kreonLock;
|
||||
bool _kreonWxripperUnlock;
|
||||
bool _kreonWxripperUnlock360;
|
||||
bool _kreonXtremeUnlock;
|
||||
bool _kreonXtremeUnlock360;
|
||||
string _manufacturer;
|
||||
string _maxBlockSize;
|
||||
string _mediumDensity;
|
||||
string _mediumTypes;
|
||||
string _minBlockSize;
|
||||
string _model;
|
||||
string _ocr;
|
||||
PcmciaInfo _pcmciaInfo;
|
||||
bool _plextorBitSetting;
|
||||
bool _plextorBitSettingDl;
|
||||
string _plextorCdReadTime;
|
||||
string _plextorCdWriteTime;
|
||||
string _plextorDiscs;
|
||||
string _plextorDvd;
|
||||
bool _plextorDvdPlusWriteTest;
|
||||
string _plextorDvdReadTime;
|
||||
bool _plextorDvdTimesVisible;
|
||||
string _plextorDvdWriteTime;
|
||||
bool _plextorEepromVisible;
|
||||
bool _plextorGigaRec;
|
||||
bool _plextorHidesRecordables;
|
||||
bool _plextorHidesSessions;
|
||||
bool _plextorHiding;
|
||||
bool _plextorPoweRec;
|
||||
bool _plextorPoweRecEnabled;
|
||||
string _plextorPoweRecLast;
|
||||
bool _plextorPoweRecLastVisible;
|
||||
string _plextorPoweRecMax;
|
||||
bool _plextorPoweRecMaxVisible;
|
||||
string _plextorPoweRecRecommended;
|
||||
bool _plextorPoweRecRecommendedVisible;
|
||||
string _plextorPoweRecSelected;
|
||||
bool _plextorPoweRecSelectedVisible;
|
||||
bool _plextorSecuRec;
|
||||
bool _plextorSilentMode;
|
||||
string _plextorSilentModeAccessTime;
|
||||
string _plextorSilentModeCdReadSpeedLimit;
|
||||
string _plextorSilentModeCdWriteSpeedLimit;
|
||||
string _plextorSilentModeDvdReadSpeedLimit;
|
||||
bool _plextorSilentModeDvdReadSpeedLimitVisible;
|
||||
bool _plextorSilentModeEnabled;
|
||||
bool _plextorSpeedEnabled;
|
||||
bool _plextorSpeedRead;
|
||||
bool _plextorVariRec;
|
||||
bool _plextorVariRecDvd;
|
||||
bool _plextorVisible;
|
||||
bool _removable;
|
||||
string _revision;
|
||||
bool _saveUsbDescriptorsEnabled;
|
||||
string _scr;
|
||||
ScsiInfo _scsiInfo;
|
||||
string _scsiType;
|
||||
string _sdMm;
|
||||
SdMmcInfo _sdMmcInfo;
|
||||
string _secureDigital;
|
||||
string _serial;
|
||||
bool _ssc;
|
||||
string _usbConnected;
|
||||
string _usbManufacturer;
|
||||
string _usbProduct;
|
||||
string _usbProductId;
|
||||
string _usbSerial;
|
||||
string _usbVendorId;
|
||||
bool _usbVisible;
|
||||
[ObservableProperty]
|
||||
AtaInfo _ataInfo;
|
||||
[ObservableProperty]
|
||||
string _blockLimits;
|
||||
[ObservableProperty]
|
||||
string _blockSizeGranularity;
|
||||
[ObservableProperty]
|
||||
string _cid;
|
||||
[ObservableProperty]
|
||||
string _csd;
|
||||
[ObservableProperty]
|
||||
string _densities;
|
||||
[ObservableProperty]
|
||||
string _deviceType;
|
||||
[ObservableProperty]
|
||||
string _extendedCsd;
|
||||
[ObservableProperty]
|
||||
string _firewireGuid;
|
||||
[ObservableProperty]
|
||||
string _firewireManufacturer;
|
||||
[ObservableProperty]
|
||||
string _firewireModel;
|
||||
[ObservableProperty]
|
||||
string _firewireModelId;
|
||||
[ObservableProperty]
|
||||
string _firewireVendorId;
|
||||
[ObservableProperty]
|
||||
bool _firewireVisible;
|
||||
[ObservableProperty]
|
||||
bool _kreon;
|
||||
[ObservableProperty]
|
||||
bool _kreonChallengeResponse;
|
||||
[ObservableProperty]
|
||||
bool _kreonChallengeResponse360;
|
||||
[ObservableProperty]
|
||||
bool _kreonDecryptSs;
|
||||
[ObservableProperty]
|
||||
bool _kreonDecryptSs360;
|
||||
[ObservableProperty]
|
||||
bool _kreonErrorSkipping;
|
||||
[ObservableProperty]
|
||||
bool _kreonLock;
|
||||
[ObservableProperty]
|
||||
bool _kreonWxripperUnlock;
|
||||
[ObservableProperty]
|
||||
bool _kreonWxripperUnlock360;
|
||||
[ObservableProperty]
|
||||
bool _kreonXtremeUnlock;
|
||||
[ObservableProperty]
|
||||
bool _kreonXtremeUnlock360;
|
||||
[ObservableProperty]
|
||||
string _manufacturer;
|
||||
[ObservableProperty]
|
||||
string _maxBlockSize;
|
||||
[ObservableProperty]
|
||||
string _mediumDensity;
|
||||
[ObservableProperty]
|
||||
string _mediumTypes;
|
||||
[ObservableProperty]
|
||||
string _minBlockSize;
|
||||
[ObservableProperty]
|
||||
string _model;
|
||||
[ObservableProperty]
|
||||
string _ocr;
|
||||
[ObservableProperty]
|
||||
PcmciaInfo _pcmciaInfo;
|
||||
[ObservableProperty]
|
||||
bool _plextorBitSetting;
|
||||
[ObservableProperty]
|
||||
bool _plextorBitSettingDl;
|
||||
[ObservableProperty]
|
||||
string _plextorCdReadTime;
|
||||
[ObservableProperty]
|
||||
string _plextorCdWriteTime;
|
||||
[ObservableProperty]
|
||||
string _plextorDiscs;
|
||||
[ObservableProperty]
|
||||
string _plextorDvd;
|
||||
[ObservableProperty]
|
||||
bool _plextorDvdPlusWriteTest;
|
||||
[ObservableProperty]
|
||||
string _plextorDvdReadTime;
|
||||
[ObservableProperty]
|
||||
bool _plextorDvdTimesVisible;
|
||||
[ObservableProperty]
|
||||
string _plextorDvdWriteTime;
|
||||
[ObservableProperty]
|
||||
bool _plextorEepromVisible;
|
||||
[ObservableProperty]
|
||||
bool _plextorGigaRec;
|
||||
[ObservableProperty]
|
||||
bool _plextorHidesRecordables;
|
||||
[ObservableProperty]
|
||||
bool _plextorHidesSessions;
|
||||
[ObservableProperty]
|
||||
bool _plextorHiding;
|
||||
[ObservableProperty]
|
||||
bool _plextorPoweRec;
|
||||
[ObservableProperty]
|
||||
bool _plextorPoweRecEnabled;
|
||||
[ObservableProperty]
|
||||
string _plextorPoweRecLast;
|
||||
[ObservableProperty]
|
||||
bool _plextorPoweRecLastVisible;
|
||||
[ObservableProperty]
|
||||
string _plextorPoweRecMax;
|
||||
[ObservableProperty]
|
||||
bool _plextorPoweRecMaxVisible;
|
||||
[ObservableProperty]
|
||||
string _plextorPoweRecRecommended;
|
||||
[ObservableProperty]
|
||||
bool _plextorPoweRecRecommendedVisible;
|
||||
[ObservableProperty]
|
||||
string _plextorPoweRecSelected;
|
||||
[ObservableProperty]
|
||||
bool _plextorPoweRecSelectedVisible;
|
||||
[ObservableProperty]
|
||||
bool _plextorSecuRec;
|
||||
[ObservableProperty]
|
||||
bool _plextorSilentMode;
|
||||
[ObservableProperty]
|
||||
string _plextorSilentModeAccessTime;
|
||||
[ObservableProperty]
|
||||
string _plextorSilentModeCdReadSpeedLimit;
|
||||
[ObservableProperty]
|
||||
string _plextorSilentModeCdWriteSpeedLimit;
|
||||
[ObservableProperty]
|
||||
string _plextorSilentModeDvdReadSpeedLimit;
|
||||
[ObservableProperty]
|
||||
bool _plextorSilentModeDvdReadSpeedLimitVisible;
|
||||
[ObservableProperty]
|
||||
bool _plextorSilentModeEnabled;
|
||||
[ObservableProperty]
|
||||
bool _plextorSpeedEnabled;
|
||||
[ObservableProperty]
|
||||
bool _plextorSpeedRead;
|
||||
[ObservableProperty]
|
||||
bool _plextorVariRec;
|
||||
[ObservableProperty]
|
||||
bool _plextorVariRecDvd;
|
||||
[ObservableProperty]
|
||||
bool _plextorVisible;
|
||||
[ObservableProperty]
|
||||
bool _removable;
|
||||
[ObservableProperty]
|
||||
string _revision;
|
||||
[ObservableProperty]
|
||||
bool _saveUsbDescriptorsEnabled;
|
||||
[ObservableProperty]
|
||||
string _scr;
|
||||
[ObservableProperty]
|
||||
ScsiInfo _scsiInfo;
|
||||
[ObservableProperty]
|
||||
string _scsiType;
|
||||
[ObservableProperty]
|
||||
string _sdMm;
|
||||
[ObservableProperty]
|
||||
SdMmcInfo _sdMmcInfo;
|
||||
[ObservableProperty]
|
||||
string _secureDigital;
|
||||
[ObservableProperty]
|
||||
string _serial;
|
||||
[ObservableProperty]
|
||||
bool _ssc;
|
||||
[ObservableProperty]
|
||||
string _usbConnected;
|
||||
[ObservableProperty]
|
||||
string _usbManufacturer;
|
||||
[ObservableProperty]
|
||||
string _usbProduct;
|
||||
[ObservableProperty]
|
||||
string _usbProductId;
|
||||
[ObservableProperty]
|
||||
string _usbSerial;
|
||||
[ObservableProperty]
|
||||
string _usbVendorId;
|
||||
[ObservableProperty]
|
||||
bool _usbVisible;
|
||||
|
||||
public DeviceInfoViewModel(DeviceInfo devInfo, Window view)
|
||||
{
|
||||
SaveUsbDescriptorsCommand = ReactiveCommand.Create(ExecuteSaveUsbDescriptorsCommand);
|
||||
SaveUsbDescriptorsCommand = new AsyncRelayCommand(SaveUsbDescriptorsAsync);
|
||||
_view = view;
|
||||
_devInfo = devInfo;
|
||||
|
||||
@@ -412,541 +502,7 @@ public sealed class DeviceInfoViewModel : ViewModelBase
|
||||
};
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Task> SaveUsbDescriptorsCommand { get; }
|
||||
|
||||
public string DeviceType
|
||||
{
|
||||
get => _deviceType;
|
||||
set => this.RaiseAndSetIfChanged(ref _deviceType, value);
|
||||
}
|
||||
|
||||
public string Manufacturer
|
||||
{
|
||||
get => _manufacturer;
|
||||
set => this.RaiseAndSetIfChanged(ref _manufacturer, value);
|
||||
}
|
||||
|
||||
public string Model
|
||||
{
|
||||
get => _model;
|
||||
set => this.RaiseAndSetIfChanged(ref _model, value);
|
||||
}
|
||||
|
||||
public string Revision
|
||||
{
|
||||
get => _revision;
|
||||
set => this.RaiseAndSetIfChanged(ref _revision, value);
|
||||
}
|
||||
|
||||
public string Serial
|
||||
{
|
||||
get => _serial;
|
||||
set => this.RaiseAndSetIfChanged(ref _serial, value);
|
||||
}
|
||||
|
||||
public string ScsiType
|
||||
{
|
||||
get => _scsiType;
|
||||
set => this.RaiseAndSetIfChanged(ref _scsiType, value);
|
||||
}
|
||||
|
||||
public bool Removable
|
||||
{
|
||||
get => _removable;
|
||||
set => this.RaiseAndSetIfChanged(ref _removable, value);
|
||||
}
|
||||
|
||||
public string UsbConnected
|
||||
{
|
||||
get => _usbConnected;
|
||||
set => this.RaiseAndSetIfChanged(ref _usbConnected, value);
|
||||
}
|
||||
|
||||
public bool UsbVisible
|
||||
{
|
||||
get => _usbVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _usbVisible, value);
|
||||
}
|
||||
|
||||
public string UsbVendorId
|
||||
{
|
||||
get => _usbVendorId;
|
||||
set => this.RaiseAndSetIfChanged(ref _usbVendorId, value);
|
||||
}
|
||||
|
||||
public string UsbProductId
|
||||
{
|
||||
get => _usbProductId;
|
||||
set => this.RaiseAndSetIfChanged(ref _usbProductId, value);
|
||||
}
|
||||
|
||||
public string UsbManufacturer
|
||||
{
|
||||
get => _usbManufacturer;
|
||||
set => this.RaiseAndSetIfChanged(ref _usbManufacturer, value);
|
||||
}
|
||||
|
||||
public string UsbProduct
|
||||
{
|
||||
get => _usbProduct;
|
||||
set => this.RaiseAndSetIfChanged(ref _usbProduct, value);
|
||||
}
|
||||
|
||||
public string UsbSerial
|
||||
{
|
||||
get => _usbSerial;
|
||||
set => this.RaiseAndSetIfChanged(ref _usbSerial, value);
|
||||
}
|
||||
|
||||
public bool SaveUsbDescriptorsEnabled
|
||||
{
|
||||
get => _saveUsbDescriptorsEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveUsbDescriptorsEnabled, value);
|
||||
}
|
||||
|
||||
public bool FirewireVisible
|
||||
{
|
||||
get => _firewireVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _firewireVisible, value);
|
||||
}
|
||||
|
||||
public string FirewireVendorId
|
||||
{
|
||||
get => _firewireVendorId;
|
||||
set => this.RaiseAndSetIfChanged(ref _firewireVendorId, value);
|
||||
}
|
||||
|
||||
public string FirewireModelId
|
||||
{
|
||||
get => _firewireModelId;
|
||||
set => this.RaiseAndSetIfChanged(ref _firewireModelId, value);
|
||||
}
|
||||
|
||||
public string FirewireManufacturer
|
||||
{
|
||||
get => _firewireManufacturer;
|
||||
set => this.RaiseAndSetIfChanged(ref _firewireManufacturer, value);
|
||||
}
|
||||
|
||||
public string FirewireModel
|
||||
{
|
||||
get => _firewireModel;
|
||||
set => this.RaiseAndSetIfChanged(ref _firewireModel, value);
|
||||
}
|
||||
|
||||
public string FirewireGuid
|
||||
{
|
||||
get => _firewireGuid;
|
||||
set => this.RaiseAndSetIfChanged(ref _firewireGuid, value);
|
||||
}
|
||||
|
||||
public bool PlextorVisible
|
||||
{
|
||||
get => _plextorVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorVisible, value);
|
||||
}
|
||||
|
||||
public bool PlextorEepromVisible
|
||||
{
|
||||
get => _plextorEepromVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorEepromVisible, value);
|
||||
}
|
||||
|
||||
public string PlextorDiscs
|
||||
{
|
||||
get => _plextorDiscs;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorDiscs, value);
|
||||
}
|
||||
|
||||
public string PlextorCdReadTime
|
||||
{
|
||||
get => _plextorCdReadTime;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorCdReadTime, value);
|
||||
}
|
||||
|
||||
public string PlextorCdWriteTime
|
||||
{
|
||||
get => _plextorCdWriteTime;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorCdWriteTime, value);
|
||||
}
|
||||
|
||||
public bool PlextorDvdTimesVisible
|
||||
{
|
||||
get => _plextorDvdTimesVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorDvdTimesVisible, value);
|
||||
}
|
||||
|
||||
public string PlextorDvdReadTime
|
||||
{
|
||||
get => _plextorDvdReadTime;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorDvdReadTime, value);
|
||||
}
|
||||
|
||||
public string PlextorDvdWriteTime
|
||||
{
|
||||
get => _plextorDvdWriteTime;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorDvdWriteTime, value);
|
||||
}
|
||||
|
||||
public bool PlextorPoweRec
|
||||
{
|
||||
get => _plextorPoweRec;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRec, value);
|
||||
}
|
||||
|
||||
public bool PlextorPoweRecEnabled
|
||||
{
|
||||
get => _plextorPoweRecEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecEnabled, value);
|
||||
}
|
||||
|
||||
public bool PlextorPoweRecRecommendedVisible
|
||||
{
|
||||
get => _plextorPoweRecRecommendedVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecRecommendedVisible, value);
|
||||
}
|
||||
|
||||
public string PlextorPoweRecRecommended
|
||||
{
|
||||
get => _plextorPoweRecRecommended;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecRecommended, value);
|
||||
}
|
||||
|
||||
public bool PlextorPoweRecSelectedVisible
|
||||
{
|
||||
get => _plextorPoweRecSelectedVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecSelectedVisible, value);
|
||||
}
|
||||
|
||||
public string PlextorPoweRecSelected
|
||||
{
|
||||
get => _plextorPoweRecSelected;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecSelected, value);
|
||||
}
|
||||
|
||||
public bool PlextorPoweRecMaxVisible
|
||||
{
|
||||
get => _plextorPoweRecMaxVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecMaxVisible, value);
|
||||
}
|
||||
|
||||
public string PlextorPoweRecMax
|
||||
{
|
||||
get => _plextorPoweRecMax;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecMax, value);
|
||||
}
|
||||
|
||||
public bool PlextorPoweRecLastVisible
|
||||
{
|
||||
get => _plextorPoweRecLastVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecLastVisible, value);
|
||||
}
|
||||
|
||||
public string PlextorPoweRecLast
|
||||
{
|
||||
get => _plextorPoweRecLast;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorPoweRecLast, value);
|
||||
}
|
||||
|
||||
public bool PlextorSilentMode
|
||||
{
|
||||
get => _plextorSilentMode;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSilentMode, value);
|
||||
}
|
||||
|
||||
public bool PlextorSilentModeEnabled
|
||||
{
|
||||
get => _plextorSilentModeEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSilentModeEnabled, value);
|
||||
}
|
||||
|
||||
public string PlextorSilentModeAccessTime
|
||||
{
|
||||
get => _plextorSilentModeAccessTime;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSilentModeAccessTime, value);
|
||||
}
|
||||
|
||||
public string PlextorSilentModeCdReadSpeedLimit
|
||||
{
|
||||
get => _plextorSilentModeCdReadSpeedLimit;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSilentModeCdReadSpeedLimit, value);
|
||||
}
|
||||
|
||||
public string PlextorSilentModeCdWriteSpeedLimit
|
||||
{
|
||||
get => _plextorSilentModeCdWriteSpeedLimit;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSilentModeCdWriteSpeedLimit, value);
|
||||
}
|
||||
|
||||
public bool PlextorSilentModeDvdReadSpeedLimitVisible
|
||||
{
|
||||
get => _plextorSilentModeDvdReadSpeedLimitVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSilentModeDvdReadSpeedLimitVisible, value);
|
||||
}
|
||||
|
||||
public string PlextorSilentModeDvdReadSpeedLimit
|
||||
{
|
||||
get => _plextorSilentModeDvdReadSpeedLimit;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSilentModeDvdReadSpeedLimit, value);
|
||||
}
|
||||
|
||||
public bool PlextorGigaRec
|
||||
{
|
||||
get => _plextorGigaRec;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorGigaRec, value);
|
||||
}
|
||||
|
||||
public bool PlextorSecuRec
|
||||
{
|
||||
get => _plextorSecuRec;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSecuRec, value);
|
||||
}
|
||||
|
||||
public bool PlextorSpeedRead
|
||||
{
|
||||
get => _plextorSpeedRead;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSpeedRead, value);
|
||||
}
|
||||
|
||||
public bool PlextorSpeedEnabled
|
||||
{
|
||||
get => _plextorSpeedEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorSpeedEnabled, value);
|
||||
}
|
||||
|
||||
public bool PlextorHiding
|
||||
{
|
||||
get => _plextorHiding;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorHiding, value);
|
||||
}
|
||||
|
||||
public bool PlextorHidesRecordables
|
||||
{
|
||||
get => _plextorHidesRecordables;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorHidesRecordables, value);
|
||||
}
|
||||
|
||||
public bool PlextorHidesSessions
|
||||
{
|
||||
get => _plextorHidesSessions;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorHidesSessions, value);
|
||||
}
|
||||
|
||||
public bool PlextorVariRec
|
||||
{
|
||||
get => _plextorVariRec;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorVariRec, value);
|
||||
}
|
||||
|
||||
public string PlextorDvd
|
||||
{
|
||||
get => _plextorDvd;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorDvd, value);
|
||||
}
|
||||
|
||||
public bool PlextorVariRecDvd
|
||||
{
|
||||
get => _plextorVariRecDvd;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorVariRecDvd, value);
|
||||
}
|
||||
|
||||
public bool PlextorBitSetting
|
||||
{
|
||||
get => _plextorBitSetting;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorBitSetting, value);
|
||||
}
|
||||
|
||||
public bool PlextorBitSettingDl
|
||||
{
|
||||
get => _plextorBitSettingDl;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorBitSettingDl, value);
|
||||
}
|
||||
|
||||
public bool PlextorDvdPlusWriteTest
|
||||
{
|
||||
get => _plextorDvdPlusWriteTest;
|
||||
set => this.RaiseAndSetIfChanged(ref _plextorDvdPlusWriteTest, value);
|
||||
}
|
||||
|
||||
public bool Kreon
|
||||
{
|
||||
get => _kreon;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreon, value);
|
||||
}
|
||||
|
||||
public bool KreonChallengeResponse
|
||||
{
|
||||
get => _kreonChallengeResponse;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonChallengeResponse, value);
|
||||
}
|
||||
|
||||
public bool KreonDecryptSs
|
||||
{
|
||||
get => _kreonDecryptSs;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonDecryptSs, value);
|
||||
}
|
||||
|
||||
public bool KreonXtremeUnlock
|
||||
{
|
||||
get => _kreonXtremeUnlock;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonXtremeUnlock, value);
|
||||
}
|
||||
|
||||
public bool KreonWxripperUnlock
|
||||
{
|
||||
get => _kreonWxripperUnlock;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonWxripperUnlock, value);
|
||||
}
|
||||
|
||||
public bool KreonChallengeResponse360
|
||||
{
|
||||
get => _kreonChallengeResponse360;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonChallengeResponse360, value);
|
||||
}
|
||||
|
||||
public bool KreonDecryptSs360
|
||||
{
|
||||
get => _kreonDecryptSs360;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonDecryptSs360, value);
|
||||
}
|
||||
|
||||
public bool KreonXtremeUnlock360
|
||||
{
|
||||
get => _kreonXtremeUnlock360;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonXtremeUnlock360, value);
|
||||
}
|
||||
|
||||
public bool KreonWxripperUnlock360
|
||||
{
|
||||
get => _kreonWxripperUnlock360;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonWxripperUnlock360, value);
|
||||
}
|
||||
|
||||
public bool KreonLock
|
||||
{
|
||||
get => _kreonLock;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonLock, value);
|
||||
}
|
||||
|
||||
public bool KreonErrorSkipping
|
||||
{
|
||||
get => _kreonErrorSkipping;
|
||||
set => this.RaiseAndSetIfChanged(ref _kreonErrorSkipping, value);
|
||||
}
|
||||
|
||||
public bool Ssc
|
||||
{
|
||||
get => _ssc;
|
||||
set => this.RaiseAndSetIfChanged(ref _ssc, value);
|
||||
}
|
||||
|
||||
public string BlockLimits
|
||||
{
|
||||
get => _blockLimits;
|
||||
set => this.RaiseAndSetIfChanged(ref _blockLimits, value);
|
||||
}
|
||||
|
||||
public string MinBlockSize
|
||||
{
|
||||
get => _minBlockSize;
|
||||
set => this.RaiseAndSetIfChanged(ref _minBlockSize, value);
|
||||
}
|
||||
|
||||
public string MaxBlockSize
|
||||
{
|
||||
get => _maxBlockSize;
|
||||
set => this.RaiseAndSetIfChanged(ref _maxBlockSize, value);
|
||||
}
|
||||
|
||||
public string BlockSizeGranularity
|
||||
{
|
||||
get => _blockSizeGranularity;
|
||||
set => this.RaiseAndSetIfChanged(ref _blockSizeGranularity, value);
|
||||
}
|
||||
|
||||
public string Densities
|
||||
{
|
||||
get => _densities;
|
||||
set => this.RaiseAndSetIfChanged(ref _densities, value);
|
||||
}
|
||||
|
||||
public string MediumTypes
|
||||
{
|
||||
get => _mediumTypes;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediumTypes, value);
|
||||
}
|
||||
|
||||
public string MediumDensity
|
||||
{
|
||||
get => _mediumDensity;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediumDensity, value);
|
||||
}
|
||||
|
||||
public string SecureDigital
|
||||
{
|
||||
get => _secureDigital;
|
||||
set => this.RaiseAndSetIfChanged(ref _secureDigital, value);
|
||||
}
|
||||
|
||||
public string SdMm
|
||||
{
|
||||
get => _sdMm;
|
||||
set => this.RaiseAndSetIfChanged(ref _sdMm, value);
|
||||
}
|
||||
|
||||
public string Cid
|
||||
{
|
||||
get => _cid;
|
||||
set => this.RaiseAndSetIfChanged(ref _cid, value);
|
||||
}
|
||||
|
||||
public string Csd
|
||||
{
|
||||
get => _csd;
|
||||
set => this.RaiseAndSetIfChanged(ref _csd, value);
|
||||
}
|
||||
|
||||
public string Ocr
|
||||
{
|
||||
get => _ocr;
|
||||
set => this.RaiseAndSetIfChanged(ref _ocr, value);
|
||||
}
|
||||
|
||||
public string ExtendedCsd
|
||||
{
|
||||
get => _extendedCsd;
|
||||
set => this.RaiseAndSetIfChanged(ref _extendedCsd, value);
|
||||
}
|
||||
|
||||
public string Scr
|
||||
{
|
||||
get => _scr;
|
||||
set => this.RaiseAndSetIfChanged(ref _scr, value);
|
||||
}
|
||||
|
||||
public PcmciaInfo PcmciaInfo
|
||||
{
|
||||
get => _pcmciaInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _pcmciaInfo, value);
|
||||
}
|
||||
|
||||
public ScsiInfo ScsiInfo
|
||||
{
|
||||
get => _scsiInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _scsiInfo, value);
|
||||
}
|
||||
|
||||
public AtaInfo AtaInfo
|
||||
{
|
||||
get => _ataInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _ataInfo, value);
|
||||
}
|
||||
|
||||
public SdMmcInfo SdMmcInfo
|
||||
{
|
||||
get => _sdMmcInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _sdMmcInfo, value);
|
||||
}
|
||||
public ICommand SaveUsbDescriptorsCommand { get; }
|
||||
|
||||
public string DeviceInformationLabel => UI.Title_Device_information;
|
||||
public string GeneralLabel => UI.Title_General;
|
||||
@@ -1018,7 +574,7 @@ public sealed class DeviceInfoViewModel : ViewModelBase
|
||||
public string SCSILabel => UI.Title_SCSI;
|
||||
public string Sd_MMCLabel => UI.Title_SD_MMC;
|
||||
|
||||
async Task ExecuteSaveUsbDescriptorsCommand()
|
||||
async Task SaveUsbDescriptorsAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Text;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.AaruMetadata;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
@@ -53,9 +53,9 @@ using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Platform;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Humanizer;
|
||||
using Humanizer.Bytes;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
|
||||
using Session = Aaru.CommonTypes.Structs.Session;
|
||||
@@ -87,13 +87,13 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
Sessions = [];
|
||||
Tracks = [];
|
||||
DumpHardwareList = [];
|
||||
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);
|
||||
EntropyCommand = new RelayCommand(Entropy);
|
||||
VerifyCommand = new RelayCommand(Verify);
|
||||
ChecksumCommand = new RelayCommand(Checksum);
|
||||
ConvertCommand = new RelayCommand(Convert);
|
||||
CreateSidecarCommand = new RelayCommand(CreateSidecar);
|
||||
ViewSectorsCommand = new RelayCommand(ViewSectors);
|
||||
DecodeMediaTagCommand = new RelayCommand(DecodeMediaTag);
|
||||
|
||||
var genericHddIcon =
|
||||
new Bitmap(AssetLoader.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/drive-harddisk.png")));
|
||||
@@ -780,13 +780,13 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
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 ICommand EntropyCommand { get; }
|
||||
public ICommand VerifyCommand { get; }
|
||||
public ICommand ChecksumCommand { get; }
|
||||
public ICommand ConvertCommand { get; }
|
||||
public ICommand CreateSidecarCommand { get; }
|
||||
public ICommand ViewSectorsCommand { get; }
|
||||
public ICommand DecodeMediaTagCommand { get; }
|
||||
|
||||
public bool DriveInformationVisible => DriveManufacturerText != null ||
|
||||
DriveModelText != null ||
|
||||
@@ -848,7 +848,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
public string ViewSectorsLabel => UI.ButtonLabel_View_sectors;
|
||||
public string DecodeMediaTagLabel => UI.ButtonLabel_Decode_media_tags;
|
||||
|
||||
void ExecuteEntropyCommand()
|
||||
void Entropy()
|
||||
{
|
||||
if(_imageEntropy != null)
|
||||
{
|
||||
@@ -865,7 +865,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
_imageEntropy.Show();
|
||||
}
|
||||
|
||||
void ExecuteVerifyCommand()
|
||||
void Verify()
|
||||
{
|
||||
if(_imageVerify != null)
|
||||
{
|
||||
@@ -882,7 +882,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
_imageVerify.Show();
|
||||
}
|
||||
|
||||
void ExecuteChecksumCommand()
|
||||
void Checksum()
|
||||
{
|
||||
if(_imageChecksum != null)
|
||||
{
|
||||
@@ -899,7 +899,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
_imageChecksum.Show();
|
||||
}
|
||||
|
||||
void ExecuteConvertCommand()
|
||||
void Convert()
|
||||
{
|
||||
if(_imageConvert != null)
|
||||
{
|
||||
@@ -916,7 +916,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
_imageConvert.Show();
|
||||
}
|
||||
|
||||
void ExecuteCreateSidecarCommand()
|
||||
void CreateSidecar()
|
||||
{
|
||||
if(_imageSidecar != null)
|
||||
{
|
||||
@@ -936,7 +936,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
_imageSidecar.Show();
|
||||
}
|
||||
|
||||
void ExecuteViewSectorsCommand()
|
||||
void ViewSectors()
|
||||
{
|
||||
if(_viewSector != null)
|
||||
{
|
||||
@@ -955,7 +955,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
_viewSector.Show();
|
||||
}
|
||||
|
||||
void ExecuteDecodeMediaTagCommand()
|
||||
void DecodeMediaTag()
|
||||
{
|
||||
if(_decodeMediaTags != null)
|
||||
{
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Gui.ViewModels.Tabs;
|
||||
using Aaru.Gui.ViewModels.Windows;
|
||||
using Aaru.Gui.Views.Tabs;
|
||||
@@ -45,55 +45,78 @@ using Avalonia.Controls;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Platform;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Humanizer.Bytes;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using ScsiInfo = Aaru.Core.Media.Info.ScsiInfo;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Panels;
|
||||
|
||||
public sealed class MediaInfoViewModel : ViewModelBase
|
||||
public sealed partial class MediaInfoViewModel : ViewModelBase
|
||||
{
|
||||
readonly string _devicePath;
|
||||
readonly ScsiInfo _scsiInfo;
|
||||
readonly Window _view;
|
||||
BlurayInfo _blurayInfo;
|
||||
CompactDiscInfo _compactDiscInfo;
|
||||
string _densitySupport;
|
||||
DvdInfo _dvdInfo;
|
||||
DvdWritableInfo _dvdWritableInfo;
|
||||
string _generalVisible;
|
||||
Bitmap _mediaLogo;
|
||||
string _mediaSerial;
|
||||
string _mediaSize;
|
||||
string _mediaType;
|
||||
string _mediumSupport;
|
||||
bool _mmcVisible;
|
||||
bool _saveDensitySupportVisible;
|
||||
bool _saveGetConfigurationVisible;
|
||||
bool _saveMediumSupportVisible;
|
||||
bool _saveReadCapacity16Visible;
|
||||
bool _saveReadCapacityVisible;
|
||||
bool _saveReadMediaSerialVisible;
|
||||
bool _saveRecognizedFormatLayersVisible;
|
||||
bool _saveWriteProtectionStatusVisible;
|
||||
bool _sscVisible;
|
||||
XboxInfo _xboxInfo;
|
||||
[ObservableProperty]
|
||||
BlurayInfo _blurayInfo;
|
||||
[ObservableProperty]
|
||||
CompactDiscInfo _compactDiscInfo;
|
||||
[ObservableProperty]
|
||||
string _densitySupport;
|
||||
[ObservableProperty]
|
||||
DvdInfo _dvdInfo;
|
||||
[ObservableProperty]
|
||||
DvdWritableInfo _dvdWritableInfo;
|
||||
[ObservableProperty]
|
||||
string _generalVisible;
|
||||
[ObservableProperty]
|
||||
Bitmap _mediaLogo;
|
||||
[ObservableProperty]
|
||||
string _mediaSerial;
|
||||
[ObservableProperty]
|
||||
string _mediaSize;
|
||||
[ObservableProperty]
|
||||
string _mediaType;
|
||||
[ObservableProperty]
|
||||
string _mediumSupport;
|
||||
[ObservableProperty]
|
||||
bool _mmcVisible;
|
||||
[ObservableProperty]
|
||||
bool _saveDensitySupportVisible;
|
||||
[ObservableProperty]
|
||||
bool _saveGetConfigurationVisible;
|
||||
[ObservableProperty]
|
||||
bool _saveMediumSupportVisible;
|
||||
[ObservableProperty]
|
||||
bool _saveReadCapacity16Visible;
|
||||
[ObservableProperty]
|
||||
bool _saveReadCapacityVisible;
|
||||
[ObservableProperty]
|
||||
bool _saveReadMediaSerialVisible;
|
||||
[ObservableProperty]
|
||||
bool _saveRecognizedFormatLayersVisible;
|
||||
[ObservableProperty]
|
||||
bool _saveWriteProtectionStatusVisible;
|
||||
[ObservableProperty]
|
||||
bool _sscVisible;
|
||||
[ObservableProperty]
|
||||
XboxInfo _xboxInfo;
|
||||
|
||||
public MediaInfoViewModel(ScsiInfo scsiInfo, string devicePath, Window view)
|
||||
{
|
||||
_view = view;
|
||||
SaveReadMediaSerialCommand = ReactiveCommand.Create(ExecuteSaveReadMediaSerialCommand);
|
||||
SaveReadCapacityCommand = ReactiveCommand.Create(ExecuteSaveReadCapacityCommand);
|
||||
SaveReadCapacity16Command = ReactiveCommand.Create(ExecuteSaveReadCapacity16Command);
|
||||
SaveGetConfigurationCommand = ReactiveCommand.Create(ExecuteSaveGetConfigurationCommand);
|
||||
SaveRecognizedFormatLayersCommand = ReactiveCommand.Create(ExecuteSaveRecognizedFormatLayersCommand);
|
||||
SaveWriteProtectionStatusCommand = ReactiveCommand.Create(ExecuteSaveWriteProtectionStatusCommand);
|
||||
SaveDensitySupportCommand = ReactiveCommand.Create(ExecuteSaveDensitySupportCommand);
|
||||
SaveMediumSupportCommand = ReactiveCommand.Create(ExecuteSaveMediumSupportCommand);
|
||||
DumpCommand = ReactiveCommand.Create(ExecuteDumpCommand);
|
||||
ScanCommand = ReactiveCommand.Create(ExecuteScanCommand);
|
||||
SaveReadMediaSerialCommand = new AsyncRelayCommand(SaveReadMediaSerial);
|
||||
SaveReadCapacityCommand = new AsyncRelayCommand(SaveReadCapacity);
|
||||
SaveReadCapacity16Command = new AsyncRelayCommand(SaveReadCapacity16);
|
||||
SaveGetConfigurationCommand = new AsyncRelayCommand(SaveGetConfiguration);
|
||||
SaveRecognizedFormatLayersCommand = new AsyncRelayCommand(SaveRecognizedFormatLayers);
|
||||
SaveWriteProtectionStatusCommand = new AsyncRelayCommand(SaveWriteProtectionStatus);
|
||||
SaveDensitySupportCommand = new AsyncRelayCommand(SaveDensitySupport);
|
||||
SaveMediumSupportCommand = new AsyncRelayCommand(SaveMediumSupport);
|
||||
DumpCommand = new AsyncRelayCommand(DumpAsync);
|
||||
ScanCommand = new AsyncRelayCommand(ScanAsync);
|
||||
_devicePath = devicePath;
|
||||
_scsiInfo = scsiInfo;
|
||||
|
||||
@@ -115,7 +138,7 @@ public sealed class MediaInfoViewModel : ViewModelBase
|
||||
{
|
||||
var sbSerial = new StringBuilder();
|
||||
|
||||
for(var i = 4; i < scsiInfo.MediaSerialNumber.Length; i++)
|
||||
for(int i = 4; i < scsiInfo.MediaSerialNumber.Length; i++)
|
||||
sbSerial.Append($"{scsiInfo.MediaSerialNumber[i]:X2}");
|
||||
|
||||
MediaSerial = sbSerial.ToString();
|
||||
@@ -221,148 +244,16 @@ public sealed class MediaInfoViewModel : ViewModelBase
|
||||
};
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Task> SaveReadMediaSerialCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveReadCapacityCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveReadCapacity16Command { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveGetConfigurationCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveRecognizedFormatLayersCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveWriteProtectionStatusCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDensitySupportCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveMediumSupportCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> DumpCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> ScanCommand { get; }
|
||||
|
||||
public Bitmap MediaLogo
|
||||
{
|
||||
get => _mediaLogo;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaLogo, value);
|
||||
}
|
||||
|
||||
public string GeneralVisible
|
||||
{
|
||||
get => _generalVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _generalVisible, value);
|
||||
}
|
||||
|
||||
public string MediaType
|
||||
{
|
||||
get => _mediaType;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaType, value);
|
||||
}
|
||||
|
||||
public string MediaSize
|
||||
{
|
||||
get => _mediaSize;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaSize, value);
|
||||
}
|
||||
|
||||
public string MediaSerial
|
||||
{
|
||||
get => _mediaSerial;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaSerial, value);
|
||||
}
|
||||
|
||||
public bool SaveReadMediaSerialVisible
|
||||
{
|
||||
get => _saveReadMediaSerialVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveReadMediaSerialVisible, value);
|
||||
}
|
||||
|
||||
public bool SaveReadCapacityVisible
|
||||
{
|
||||
get => _saveReadCapacityVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveReadCapacityVisible, value);
|
||||
}
|
||||
|
||||
public bool SaveReadCapacity16Visible
|
||||
{
|
||||
get => _saveReadCapacity16Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveReadCapacity16Visible, value);
|
||||
}
|
||||
|
||||
public bool MmcVisible
|
||||
{
|
||||
get => _mmcVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mmcVisible, value);
|
||||
}
|
||||
|
||||
public bool SaveGetConfigurationVisible
|
||||
{
|
||||
get => _saveGetConfigurationVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveGetConfigurationVisible, value);
|
||||
}
|
||||
|
||||
public bool SaveRecognizedFormatLayersVisible
|
||||
{
|
||||
get => _saveRecognizedFormatLayersVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveRecognizedFormatLayersVisible, value);
|
||||
}
|
||||
|
||||
public bool SaveWriteProtectionStatusVisible
|
||||
{
|
||||
get => _saveWriteProtectionStatusVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveWriteProtectionStatusVisible, value);
|
||||
}
|
||||
|
||||
public bool SscVisible
|
||||
{
|
||||
get => _sscVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _sscVisible, value);
|
||||
}
|
||||
|
||||
public string DensitySupport
|
||||
{
|
||||
get => _densitySupport;
|
||||
set => this.RaiseAndSetIfChanged(ref _densitySupport, value);
|
||||
}
|
||||
|
||||
public string MediumSupport
|
||||
{
|
||||
get => _mediumSupport;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediumSupport, value);
|
||||
}
|
||||
|
||||
public bool SaveDensitySupportVisible
|
||||
{
|
||||
get => _saveDensitySupportVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveDensitySupportVisible, value);
|
||||
}
|
||||
|
||||
public bool SaveMediumSupportVisible
|
||||
{
|
||||
get => _saveMediumSupportVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _saveMediumSupportVisible, value);
|
||||
}
|
||||
|
||||
public CompactDiscInfo CompactDiscInfo
|
||||
{
|
||||
get => _compactDiscInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _compactDiscInfo, value);
|
||||
}
|
||||
|
||||
public DvdInfo DvdInfo
|
||||
{
|
||||
get => _dvdInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _dvdInfo, value);
|
||||
}
|
||||
|
||||
public DvdWritableInfo DvdWritableInfo
|
||||
{
|
||||
get => _dvdWritableInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _dvdWritableInfo, value);
|
||||
}
|
||||
|
||||
public XboxInfo XboxInfo
|
||||
{
|
||||
get => _xboxInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _xboxInfo, value);
|
||||
}
|
||||
|
||||
public BlurayInfo BlurayInfo
|
||||
{
|
||||
get => _blurayInfo;
|
||||
set => this.RaiseAndSetIfChanged(ref _blurayInfo, value);
|
||||
}
|
||||
public ICommand SaveReadMediaSerialCommand { get; }
|
||||
public ICommand SaveReadCapacityCommand { get; }
|
||||
public ICommand SaveReadCapacity16Command { get; }
|
||||
public ICommand SaveGetConfigurationCommand { get; }
|
||||
public ICommand SaveRecognizedFormatLayersCommand { get; }
|
||||
public ICommand SaveWriteProtectionStatusCommand { get; }
|
||||
public ICommand SaveDensitySupportCommand { get; }
|
||||
public ICommand SaveMediumSupportCommand { get; }
|
||||
public ICommand DumpCommand { get; }
|
||||
public ICommand ScanCommand { get; }
|
||||
|
||||
public string MediaInformationLabel => UI.Title_Media_information;
|
||||
public string GeneralLabel => UI.Title_General;
|
||||
@@ -388,7 +279,7 @@ public sealed class MediaInfoViewModel : ViewModelBase
|
||||
public string DumpLabel => UI.ButtonLabel_Dump_media_to_image;
|
||||
public string ScanLabel => UI.ButtonLabel_Scan_media_surface;
|
||||
|
||||
async Task SaveElement(byte[] data)
|
||||
async Task SaveElementAsync(byte[] data)
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -406,23 +297,23 @@ public sealed class MediaInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveReadMediaSerialCommand() => await SaveElement(_scsiInfo.MediaSerialNumber);
|
||||
Task SaveReadMediaSerial() => SaveElementAsync(_scsiInfo.MediaSerialNumber);
|
||||
|
||||
async Task ExecuteSaveReadCapacityCommand() => await SaveElement(_scsiInfo.ReadCapacity);
|
||||
Task SaveReadCapacity() => SaveElementAsync(_scsiInfo.ReadCapacity);
|
||||
|
||||
async Task ExecuteSaveReadCapacity16Command() => await SaveElement(_scsiInfo.ReadCapacity16);
|
||||
Task SaveReadCapacity16() => SaveElementAsync(_scsiInfo.ReadCapacity16);
|
||||
|
||||
async Task ExecuteSaveGetConfigurationCommand() => await SaveElement(_scsiInfo.MmcConfiguration);
|
||||
Task SaveGetConfiguration() => SaveElementAsync(_scsiInfo.MmcConfiguration);
|
||||
|
||||
async Task ExecuteSaveRecognizedFormatLayersCommand() => await SaveElement(_scsiInfo.RecognizedFormatLayers);
|
||||
Task SaveRecognizedFormatLayers() => SaveElementAsync(_scsiInfo.RecognizedFormatLayers);
|
||||
|
||||
async Task ExecuteSaveWriteProtectionStatusCommand() => await SaveElement(_scsiInfo.WriteProtectionStatus);
|
||||
Task SaveWriteProtectionStatus() => SaveElementAsync(_scsiInfo.WriteProtectionStatus);
|
||||
|
||||
async Task ExecuteSaveDensitySupportCommand() => await SaveElement(_scsiInfo.DensitySupport);
|
||||
Task SaveDensitySupport() => SaveElementAsync(_scsiInfo.DensitySupport);
|
||||
|
||||
async Task ExecuteSaveMediumSupportCommand() => await SaveElement(_scsiInfo.MediaTypeSupport);
|
||||
Task SaveMediumSupport() => SaveElementAsync(_scsiInfo.MediaTypeSupport);
|
||||
|
||||
async Task ExecuteDumpCommand()
|
||||
async Task DumpAsync()
|
||||
{
|
||||
switch(_scsiInfo.MediaType)
|
||||
{
|
||||
@@ -456,7 +347,7 @@ public sealed class MediaInfoViewModel : ViewModelBase
|
||||
mediaDumpWindow.Show();
|
||||
}
|
||||
|
||||
async Task ExecuteScanCommand()
|
||||
async Task ScanAsync()
|
||||
{
|
||||
switch(_scsiInfo.MediaType)
|
||||
{
|
||||
|
||||
@@ -35,8 +35,8 @@ using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.CommonTypes.Interop;
|
||||
@@ -47,10 +47,10 @@ using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using FileAttributes = Aaru.CommonTypes.Structs.FileAttributes;
|
||||
|
||||
@@ -65,7 +65,7 @@ public sealed class SubdirectoryViewModel
|
||||
{
|
||||
Entries = [];
|
||||
SelectedEntries = [];
|
||||
ExtractFilesCommand = ReactiveCommand.Create(ExecuteExtractFilesCommand);
|
||||
ExtractFilesCommand = new AsyncRelayCommand(ExtractFiles);
|
||||
_model = model;
|
||||
_view = view;
|
||||
|
||||
@@ -73,13 +73,13 @@ public sealed class SubdirectoryViewModel
|
||||
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||
string.Format(UI.Error_0_trying_to_read_1_of_chosen_filesystem,
|
||||
errno,
|
||||
model.Path),
|
||||
ButtonEnum.Ok,
|
||||
Icon.Error)
|
||||
.ShowWindowDialogAsync(view);
|
||||
_ = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||
string.Format(UI.Error_0_trying_to_read_1_of_chosen_filesystem,
|
||||
errno,
|
||||
model.Path),
|
||||
ButtonEnum.Ok,
|
||||
Icon.Error)
|
||||
.ShowWindowDialogAsync(view);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -121,7 +121,7 @@ public sealed class SubdirectoryViewModel
|
||||
|
||||
public ObservableCollection<FileModel> Entries { get; }
|
||||
public List<FileModel> SelectedEntries { get; }
|
||||
public ReactiveCommand<Unit, Task> ExtractFilesCommand { get; }
|
||||
public ICommand ExtractFilesCommand { get; }
|
||||
|
||||
public string ExtractFilesLabel => UI.ButtonLabel_Extract_to;
|
||||
public string NameLabel => UI.Title_Name;
|
||||
@@ -138,7 +138,7 @@ public sealed class SubdirectoryViewModel
|
||||
public string LinksLabel => UI.Title_Links;
|
||||
public string ModeLabel => UI.Title_Mode;
|
||||
|
||||
async Task ExecuteExtractFilesCommand()
|
||||
async Task ExtractFiles()
|
||||
{
|
||||
if(SelectedEntries.Count == 0) return;
|
||||
|
||||
|
||||
@@ -32,14 +32,14 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Decoders.ATA;
|
||||
using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
@@ -52,8 +52,8 @@ public sealed class AtaInfoViewModel : ViewModelBase
|
||||
public AtaInfoViewModel([CanBeNull] byte[] ataIdentify, byte[] atapiIdentify, AtaErrorRegistersChs? ataMcptError,
|
||||
Window view)
|
||||
{
|
||||
SaveAtaBinaryCommand = ReactiveCommand.Create(ExecuteSaveAtaBinaryCommand);
|
||||
SaveAtaTextCommand = ReactiveCommand.Create(ExecuteSaveAtaTextCommand);
|
||||
SaveAtaBinaryCommand = new AsyncRelayCommand(SaveAtaBinaryAsync);
|
||||
SaveAtaTextCommand = new AsyncRelayCommand(SaveAtaTextAsync);
|
||||
|
||||
_ata = ataIdentify;
|
||||
_atapi = atapiIdentify;
|
||||
@@ -82,7 +82,8 @@ public sealed class AtaInfoViewModel : ViewModelBase
|
||||
|
||||
AtaMcptWriteProtectionChecked = (ataMcptError.Value.DeviceHead & 0x08) == 0x08;
|
||||
|
||||
var specificData = (ushort)(ataMcptError.Value.CylinderHigh * 0x100 + ataMcptError.Value.CylinderLow);
|
||||
ushort specificData =
|
||||
(ushort)(ataMcptError.Value.CylinderHigh * 0x100 + ataMcptError.Value.CylinderLow);
|
||||
|
||||
AtaMcptSpecificDataText = string.Format(Localization.Core.Card_specific_data_0, specificData);
|
||||
}
|
||||
@@ -96,14 +97,14 @@ public sealed class AtaInfoViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
public string AtaIdentifyText { get; }
|
||||
public string AtaMcptText { get; }
|
||||
public string AtaMcptSpecificDataText { get; }
|
||||
public bool AtaMcptChecked { get; }
|
||||
public bool AtaMcptWriteProtectionChecked { get; }
|
||||
public bool AtaMcptVisible { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveAtaBinaryCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveAtaTextCommand { get; }
|
||||
public string AtaIdentifyText { get; }
|
||||
public string AtaMcptText { get; }
|
||||
public string AtaMcptSpecificDataText { get; }
|
||||
public bool AtaMcptChecked { get; }
|
||||
public bool AtaMcptWriteProtectionChecked { get; }
|
||||
public bool AtaMcptVisible { get; }
|
||||
public ICommand SaveAtaBinaryCommand { get; }
|
||||
public ICommand SaveAtaTextCommand { get; }
|
||||
|
||||
public string AtaOrAtapiText { get; }
|
||||
|
||||
@@ -112,7 +113,7 @@ public sealed class AtaInfoViewModel : ViewModelBase
|
||||
public string SaveAtaBinaryLabel => UI.ButtonLabel_Save_binary_to_file;
|
||||
public string SaveAtaTextLabel => UI.ButtonLabel_Save_text_to_file;
|
||||
|
||||
async Task ExecuteSaveAtaBinaryCommand()
|
||||
async Task SaveAtaBinaryAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -133,7 +134,7 @@ public sealed class AtaInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveAtaTextCommand()
|
||||
async Task SaveAtaTextAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
|
||||
@@ -32,15 +32,15 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Decoders.Bluray;
|
||||
using Aaru.Decoders.SCSI.MMC;
|
||||
using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
@@ -73,17 +73,17 @@ public sealed class BlurayInfoViewModel
|
||||
_trackResources = blurayTrackResources;
|
||||
_rawDfl = blurayRawDfl;
|
||||
_pac = blurayPac;
|
||||
SaveBlurayDiscInformationCommand = ReactiveCommand.Create(ExecuteSaveBlurayDiscInformationCommand);
|
||||
SaveBlurayBurstCuttingAreaCommand = ReactiveCommand.Create(ExecuteSaveBlurayBurstCuttingAreaCommand);
|
||||
SaveBlurayDdsCommand = ReactiveCommand.Create(ExecuteSaveBlurayDdsCommand);
|
||||
SaveBlurayCartridgeStatusCommand = ReactiveCommand.Create(ExecuteSaveBlurayCartridgeStatusCommand);
|
||||
SaveBlurayDiscInformationCommand = new AsyncRelayCommand(SaveBlurayDiscInformationAsync);
|
||||
SaveBlurayBurstCuttingAreaCommand = new AsyncRelayCommand(SaveBlurayBurstCuttingAreaAsync);
|
||||
SaveBlurayDdsCommand = new AsyncRelayCommand(SaveBlurayDdsAsync);
|
||||
SaveBlurayCartridgeStatusCommand = new AsyncRelayCommand(SaveBlurayCartridgeStatusAsync);
|
||||
|
||||
SaveBluraySpareAreaInformationCommand = ReactiveCommand.Create(ExecuteSaveBluraySpareAreaInformationCommand);
|
||||
SaveBluraySpareAreaInformationCommand = new AsyncRelayCommand(SaveBluraySpareAreaInformationAsync);
|
||||
|
||||
SaveBlurayPowResourcesCommand = ReactiveCommand.Create(ExecuteSaveBlurayPowResourcesCommand);
|
||||
SaveBlurayTrackResourcesCommand = ReactiveCommand.Create(ExecuteSaveBlurayTrackResourcesCommand);
|
||||
SaveBlurayRawDflCommand = ReactiveCommand.Create(ExecuteSaveBlurayRawDflCommand);
|
||||
SaveBlurayPacCommand = ReactiveCommand.Create(ExecuteSaveBlurayPacCommand);
|
||||
SaveBlurayPowResourcesCommand = new AsyncRelayCommand(SaveBlurayPowResourcesAsync);
|
||||
SaveBlurayTrackResourcesCommand = new AsyncRelayCommand(SaveBlurayTrackResourcesAsync);
|
||||
SaveBlurayRawDflCommand = new AsyncRelayCommand(SaveBlurayRawDflAsync);
|
||||
SaveBlurayPacCommand = new AsyncRelayCommand(SaveBlurayPacAsync);
|
||||
|
||||
if(blurayDiscInformation != null)
|
||||
{
|
||||
@@ -131,31 +131,31 @@ public sealed class BlurayInfoViewModel
|
||||
SaveBlurayPacVisible = blurayPac != null;
|
||||
}
|
||||
|
||||
public string BlurayDiscInformationText { get; }
|
||||
public string BlurayBurstCuttingAreaText { get; }
|
||||
public string BlurayDdsText { get; }
|
||||
public string BlurayCartridgeStatusText { get; }
|
||||
public string BluraySpareAreaInformationText { get; }
|
||||
public string BlurayPowResourcesText { get; }
|
||||
public string BlurayTrackResourcesText { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayDiscInformationCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayBurstCuttingAreaCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayDdsCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayCartridgeStatusCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBluraySpareAreaInformationCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayPowResourcesCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayTrackResourcesCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayRawDflCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveBlurayPacCommand { get; }
|
||||
public bool SaveBlurayDiscInformationVisible { get; }
|
||||
public bool SaveBlurayBurstCuttingAreaVisible { get; }
|
||||
public bool SaveBlurayDdsVisible { get; }
|
||||
public bool SaveBlurayCartridgeStatusVisible { get; }
|
||||
public bool SaveBluraySpareAreaInformationVisible { get; }
|
||||
public bool SaveBlurayPowResourcesVisible { get; }
|
||||
public bool SaveBlurayTrackResourcesVisible { get; }
|
||||
public bool SaveBlurayRawDflVisible { get; }
|
||||
public bool SaveBlurayPacVisible { get; }
|
||||
public string BlurayDiscInformationText { get; }
|
||||
public string BlurayBurstCuttingAreaText { get; }
|
||||
public string BlurayDdsText { get; }
|
||||
public string BlurayCartridgeStatusText { get; }
|
||||
public string BluraySpareAreaInformationText { get; }
|
||||
public string BlurayPowResourcesText { get; }
|
||||
public string BlurayTrackResourcesText { get; }
|
||||
public ICommand SaveBlurayDiscInformationCommand { get; }
|
||||
public ICommand SaveBlurayBurstCuttingAreaCommand { get; }
|
||||
public ICommand SaveBlurayDdsCommand { get; }
|
||||
public ICommand SaveBlurayCartridgeStatusCommand { get; }
|
||||
public ICommand SaveBluraySpareAreaInformationCommand { get; }
|
||||
public ICommand SaveBlurayPowResourcesCommand { get; }
|
||||
public ICommand SaveBlurayTrackResourcesCommand { get; }
|
||||
public ICommand SaveBlurayRawDflCommand { get; }
|
||||
public ICommand SaveBlurayPacCommand { get; }
|
||||
public bool SaveBlurayDiscInformationVisible { get; }
|
||||
public bool SaveBlurayBurstCuttingAreaVisible { get; }
|
||||
public bool SaveBlurayDdsVisible { get; }
|
||||
public bool SaveBlurayCartridgeStatusVisible { get; }
|
||||
public bool SaveBluraySpareAreaInformationVisible { get; }
|
||||
public bool SaveBlurayPowResourcesVisible { get; }
|
||||
public bool SaveBlurayTrackResourcesVisible { get; }
|
||||
public bool SaveBlurayRawDflVisible { get; }
|
||||
public bool SaveBlurayPacVisible { get; }
|
||||
|
||||
public string DiscInformationLabel => UI.Disc_information;
|
||||
public string BurstCuttingAreaLabel => UI.Burst_Cutting_Area;
|
||||
@@ -174,7 +174,7 @@ public sealed class BlurayInfoViewModel
|
||||
public string SaveBlurayRawDflLabel => UI.ButtonLabel_Save_raw_DFL;
|
||||
public string SaveBlurayPacLabel => UI.ButtonLabel_Save_PAC;
|
||||
|
||||
async Task SaveElement(byte[] data)
|
||||
async Task SaveElementAsync(byte[] data)
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -192,21 +192,21 @@ public sealed class BlurayInfoViewModel
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveBlurayDiscInformationCommand() => await SaveElement(_discInformation);
|
||||
Task SaveBlurayDiscInformationAsync() => SaveElementAsync(_discInformation);
|
||||
|
||||
async Task ExecuteSaveBlurayBurstCuttingAreaCommand() => await SaveElement(_burstCuttingArea);
|
||||
Task SaveBlurayBurstCuttingAreaAsync() => SaveElementAsync(_burstCuttingArea);
|
||||
|
||||
async Task ExecuteSaveBlurayDdsCommand() => await SaveElement(_dds);
|
||||
Task SaveBlurayDdsAsync() => SaveElementAsync(_dds);
|
||||
|
||||
async Task ExecuteSaveBlurayCartridgeStatusCommand() => await SaveElement(_cartridgeStatus);
|
||||
Task SaveBlurayCartridgeStatusAsync() => SaveElementAsync(_cartridgeStatus);
|
||||
|
||||
async Task ExecuteSaveBluraySpareAreaInformationCommand() => await SaveElement(_spareAreaInformation);
|
||||
Task SaveBluraySpareAreaInformationAsync() => SaveElementAsync(_spareAreaInformation);
|
||||
|
||||
async Task ExecuteSaveBlurayPowResourcesCommand() => await SaveElement(_powResources);
|
||||
Task SaveBlurayPowResourcesAsync() => SaveElementAsync(_powResources);
|
||||
|
||||
async Task ExecuteSaveBlurayTrackResourcesCommand() => await SaveElement(_trackResources);
|
||||
Task SaveBlurayTrackResourcesAsync() => SaveElementAsync(_trackResources);
|
||||
|
||||
async Task ExecuteSaveBlurayRawDflCommand() => await SaveElement(_rawDfl);
|
||||
Task SaveBlurayRawDflAsync() => SaveElementAsync(_rawDfl);
|
||||
|
||||
async Task ExecuteSaveBlurayPacCommand() => await SaveElement(_pac);
|
||||
Task SaveBlurayPacAsync() => SaveElementAsync(_pac);
|
||||
}
|
||||
@@ -33,15 +33,15 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Decoders.CD;
|
||||
using Aaru.Decoders.SCSI.MMC;
|
||||
using Aaru.Gui.Models;
|
||||
using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using ReactiveUI;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
@@ -72,13 +72,13 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
_cdTextLeadInData = cdTextLeadIn;
|
||||
_view = view;
|
||||
IsrcList = [];
|
||||
SaveCdInformationCommand = ReactiveCommand.Create(ExecuteSaveCdInformationCommand);
|
||||
SaveCdTocCommand = ReactiveCommand.Create(ExecuteSaveCdTocCommand);
|
||||
SaveCdFullTocCommand = ReactiveCommand.Create(ExecuteSaveCdFullTocCommand);
|
||||
SaveCdSessionCommand = ReactiveCommand.Create(ExecuteSaveCdSessionCommand);
|
||||
SaveCdTextCommand = ReactiveCommand.Create(ExecuteSaveCdTextCommand);
|
||||
SaveCdAtipCommand = ReactiveCommand.Create(ExecuteSaveCdAtipCommand);
|
||||
SaveCdPmaCommand = ReactiveCommand.Create(ExecuteSaveCdPmaCommand);
|
||||
SaveCdInformationCommand = new AsyncRelayCommand(SaveCdInformationAsync);
|
||||
SaveCdTocCommand = new AsyncRelayCommand(SaveCdTocAsync);
|
||||
SaveCdFullTocCommand = new AsyncRelayCommand(SaveCdFullTocAsync);
|
||||
SaveCdSessionCommand = new AsyncRelayCommand(SaveCdSessionAsync);
|
||||
SaveCdTextCommand = new AsyncRelayCommand(SaveCdTextAsync);
|
||||
SaveCdAtipCommand = new AsyncRelayCommand(SaveCdAtipAsync);
|
||||
SaveCdPmaCommand = new AsyncRelayCommand(SaveCdPmaAsync);
|
||||
|
||||
if(decodedCompactDiscInformation.HasValue)
|
||||
CdInformationText = DiscInformation.Prettify000b(decodedCompactDiscInformation);
|
||||
@@ -120,13 +120,13 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
public bool MiscellaneousVisible { get; }
|
||||
public string McnText { get; }
|
||||
public bool CdPmaVisible { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCdInformationCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCdTocCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCdFullTocCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCdSessionCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCdTextCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCdAtipCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveCdPmaCommand { get; }
|
||||
public ICommand SaveCdInformationCommand { get; }
|
||||
public ICommand SaveCdTocCommand { get; }
|
||||
public ICommand SaveCdFullTocCommand { get; }
|
||||
public ICommand SaveCdSessionCommand { get; }
|
||||
public ICommand SaveCdTextCommand { get; }
|
||||
public ICommand SaveCdAtipCommand { get; }
|
||||
public ICommand SaveCdPmaCommand { get; }
|
||||
public ObservableCollection<IsrcModel> IsrcList { get; }
|
||||
|
||||
public string CdInformationLabel => UI.Title_Information;
|
||||
@@ -148,7 +148,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
public string ISRCLabel => UI.Title_ISRC;
|
||||
public string SaveCdPmaLabel => UI.ButtonLabel_Save_READ_PMA_response;
|
||||
|
||||
async Task ExecuteSaveCdInformationCommand()
|
||||
async Task SaveCdInformationAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -166,7 +166,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveCdTocCommand()
|
||||
async Task SaveCdTocAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -184,7 +184,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveCdFullTocCommand()
|
||||
async Task SaveCdFullTocAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -202,7 +202,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveCdSessionCommand()
|
||||
async Task SaveCdSessionAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -220,7 +220,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveCdTextCommand()
|
||||
async Task SaveCdTextAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -238,7 +238,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveCdAtipCommand()
|
||||
async Task SaveCdAtipAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -256,7 +256,7 @@ public sealed class CompactDiscInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveCdPmaCommand()
|
||||
async Task SaveCdPmaAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
|
||||
@@ -32,14 +32,14 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Decoders.DVD;
|
||||
using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
@@ -64,12 +64,12 @@ public sealed class DvdInfoViewModel
|
||||
_dvdBca = bca;
|
||||
_dvdAacs = aacs;
|
||||
_view = view;
|
||||
SaveDvdPfiCommand = ReactiveCommand.Create(ExecuteSaveDvdPfiCommand);
|
||||
SaveDvdDmiCommand = ReactiveCommand.Create(ExecuteSaveDvdDmiCommand);
|
||||
SaveDvdCmiCommand = ReactiveCommand.Create(ExecuteSaveDvdCmiCommand);
|
||||
SaveHdDvdCmiCommand = ReactiveCommand.Create(ExecuteSaveHdDvdCmiCommand);
|
||||
SaveDvdBcaCommand = ReactiveCommand.Create(ExecuteSaveDvdBcaCommand);
|
||||
SaveDvdAacsCommand = ReactiveCommand.Create(ExecuteSaveDvdAacsCommand);
|
||||
SaveDvdPfiCommand = new AsyncRelayCommand(SaveDvdPfiAsync);
|
||||
SaveDvdDmiCommand = new AsyncRelayCommand(SaveDvdDmiAsync);
|
||||
SaveDvdCmiCommand = new AsyncRelayCommand(SaveDvdCmiAsync);
|
||||
SaveHdDvdCmiCommand = new AsyncRelayCommand(SaveHdDvdCmiAsync);
|
||||
SaveDvdBcaCommand = new AsyncRelayCommand(SaveDvdBcaAsync);
|
||||
SaveDvdAacsCommand = new AsyncRelayCommand(SaveDvdAacsAsync);
|
||||
|
||||
/* TODO: Pass back
|
||||
switch(mediaType)
|
||||
@@ -102,20 +102,20 @@ public sealed class DvdInfoViewModel
|
||||
SaveDvdAacsVisible = aacs != null;
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Task> SaveDvdPfiCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdDmiCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdCmiCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveHdDvdCmiCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdBcaCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdAacsCommand { get; }
|
||||
public string DvdPfiText { get; }
|
||||
public string DvdCmiText { get; }
|
||||
public bool SaveDvdPfiVisible { get; }
|
||||
public bool SaveDvdDmiVisible { get; }
|
||||
public bool SaveDvdCmiVisible { get; }
|
||||
public bool SaveHdDvdCmiVisible { get; }
|
||||
public bool SaveDvdBcaVisible { get; }
|
||||
public bool SaveDvdAacsVisible { get; }
|
||||
public ICommand SaveDvdPfiCommand { get; }
|
||||
public ICommand SaveDvdDmiCommand { get; }
|
||||
public ICommand SaveDvdCmiCommand { get; }
|
||||
public ICommand SaveHdDvdCmiCommand { get; }
|
||||
public ICommand SaveDvdBcaCommand { get; }
|
||||
public ICommand SaveDvdAacsCommand { get; }
|
||||
public string DvdPfiText { get; }
|
||||
public string DvdCmiText { get; }
|
||||
public bool SaveDvdPfiVisible { get; }
|
||||
public bool SaveDvdDmiVisible { get; }
|
||||
public bool SaveDvdCmiVisible { get; }
|
||||
public bool SaveHdDvdCmiVisible { get; }
|
||||
public bool SaveDvdBcaVisible { get; }
|
||||
public bool SaveDvdAacsVisible { get; }
|
||||
|
||||
public string SaveDvdPfiLabel => UI.ButtonLabel_Save_Physical_Format_Information;
|
||||
public string SaveDvdDmiLabel => UI.ButtonLabel_Save_Disc_Manufacturer_Information;
|
||||
@@ -124,7 +124,7 @@ public sealed class DvdInfoViewModel
|
||||
public string SaveDvdBcaLabel => UI.ButtonLabel_Save_Burst_Cutting_Area;
|
||||
public string SaveDvdAacsLabel => UI.ButtonLabel_Save_AACS_Information;
|
||||
|
||||
async Task SaveElement(byte[] data)
|
||||
async Task SaveElementAsync(byte[] data)
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -142,15 +142,15 @@ public sealed class DvdInfoViewModel
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveDvdPfiCommand() => await SaveElement(_dvdPfi);
|
||||
Task SaveDvdPfiAsync() => SaveElementAsync(_dvdPfi);
|
||||
|
||||
async Task ExecuteSaveDvdDmiCommand() => await SaveElement(_dvdDmi);
|
||||
Task SaveDvdDmiAsync() => SaveElementAsync(_dvdDmi);
|
||||
|
||||
async Task ExecuteSaveDvdCmiCommand() => await SaveElement(_dvdCmi);
|
||||
Task SaveDvdCmiAsync() => SaveElementAsync(_dvdCmi);
|
||||
|
||||
async Task ExecuteSaveHdDvdCmiCommand() => await SaveElement(_hddvdCopyrightInformation);
|
||||
Task SaveHdDvdCmiAsync() => SaveElementAsync(_hddvdCopyrightInformation);
|
||||
|
||||
async Task ExecuteSaveDvdBcaCommand() => await SaveElement(_dvdBca);
|
||||
Task SaveDvdBcaAsync() => SaveElementAsync(_dvdBca);
|
||||
|
||||
async Task ExecuteSaveDvdAacsCommand() => await SaveElement(_dvdAacs);
|
||||
Task SaveDvdAacsAsync() => SaveElementAsync(_dvdAacs);
|
||||
}
|
||||
@@ -32,13 +32,13 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Decoders.DVD;
|
||||
using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using ReactiveUI;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
@@ -69,27 +69,26 @@ public sealed class DvdWritableInfoViewModel
|
||||
byte[] adip, byte[] dcb, Window view)
|
||||
{
|
||||
_view = view;
|
||||
SaveDvdRamDdsCommand = ReactiveCommand.Create(ExecuteSaveDvdRamDdsCommand);
|
||||
SaveDvdRamCartridgeStatusCommand = ReactiveCommand.Create(ExecuteSaveDvdRamCartridgeStatusCommand);
|
||||
SaveDvdRamDdsCommand = new AsyncRelayCommand(SaveDvdRamDdsAsync);
|
||||
SaveDvdRamCartridgeStatusCommand = new AsyncRelayCommand(SaveDvdRamCartridgeStatusAsync);
|
||||
|
||||
SaveDvdRamSpareAreaInformationCommand = ReactiveCommand.Create(ExecuteSaveDvdRamSpareAreaInformationCommand);
|
||||
SaveDvdRamSpareAreaInformationCommand = new AsyncRelayCommand(SaveDvdRamSpareAreaInformationAsync);
|
||||
|
||||
SaveLastBorderOutRmdCommand = ReactiveCommand.Create(ExecuteSaveLastBorderOutRmdCommand);
|
||||
SaveDvdPreRecordedInfoCommand = ReactiveCommand.Create(ExecuteSaveDvdPreRecordedInfoCommand);
|
||||
SaveDvdrMediaIdentifierCommand = ReactiveCommand.Create(ExecuteSaveDvdrMediaIdentifierCommand);
|
||||
SaveDvdrPhysicalInformationCommand = ReactiveCommand.Create(ExecuteSaveDvdrPhysicalInformationCommand);
|
||||
SaveHddvdrMediumStatusCommand = ReactiveCommand.Create(ExecuteSaveHddvdrMediumStatusCommand);
|
||||
SaveHddvdrLastRmdCommand = ReactiveCommand.Create(ExecuteSaveHddvdrLastRmdCommand);
|
||||
SaveDvdrLayerCapacityCommand = ReactiveCommand.Create(ExecuteSaveDvdrLayerCapacityCommand);
|
||||
SaveDvdrDlMiddleZoneStartCommand = ReactiveCommand.Create(ExecuteSaveDvdrDlMiddleZoneStartCommand);
|
||||
SaveDvdrDlJumpIntervalSizeCommand = ReactiveCommand.Create(ExecuteSaveDvdrDlJumpIntervalSizeCommand);
|
||||
SaveLastBorderOutRmdCommand = new AsyncRelayCommand(SaveLastBorderOutRmdAsync);
|
||||
SaveDvdPreRecordedInfoCommand = new AsyncRelayCommand(SaveDvdPreRecordedInfoAsync);
|
||||
SaveDvdrMediaIdentifierCommand = new AsyncRelayCommand(SaveDvdrMediaIdentifierAsync);
|
||||
SaveDvdrPhysicalInformationCommand = new AsyncRelayCommand(SaveDvdrPhysicalInformationAsync);
|
||||
SaveHddvdrMediumStatusCommand = new AsyncRelayCommand(SaveHddvdrMediumStatusAsync);
|
||||
SaveHddvdrLastRmdCommand = new AsyncRelayCommand(SaveHddvdrLastRmdAsync);
|
||||
SaveDvdrLayerCapacityCommand = new AsyncRelayCommand(SaveDvdrLayerCapacityAsync);
|
||||
SaveDvdrDlMiddleZoneStartCommand = new AsyncRelayCommand(SaveDvdrDlMiddleZoneStartAsync);
|
||||
SaveDvdrDlJumpIntervalSizeCommand = new AsyncRelayCommand(SaveDvdrDlJumpIntervalSizeAsync);
|
||||
|
||||
SaveDvdrDlManualLayerJumpStartLbaCommand =
|
||||
ReactiveCommand.Create(ExecuteSaveDvdrDlManualLayerJumpStartLbaCommand);
|
||||
SaveDvdrDlManualLayerJumpStartLbaCommand = new AsyncRelayCommand(SaveDvdrDlManualLayerJumpStartLbaAsync);
|
||||
|
||||
SaveDvdrDlRemapAnchorPointCommand = ReactiveCommand.Create(ExecuteSaveDvdrDlRemapAnchorPointCommand);
|
||||
SaveDvdPlusAdipCommand = ReactiveCommand.Create(ExecuteSaveDvdPlusAdipCommand);
|
||||
SaveDvdPlusDcbCommand = ReactiveCommand.Create(ExecuteSaveDvdPlusDcbCommand);
|
||||
SaveDvdrDlRemapAnchorPointCommand = new AsyncRelayCommand(SaveDvdrDlRemapAnchorPointAsync);
|
||||
SaveDvdPlusAdipCommand = new AsyncRelayCommand(SaveDvdPlusAdipAsync);
|
||||
SaveDvdPlusDcbCommand = new AsyncRelayCommand(SaveDvdPlusDcbAsync);
|
||||
|
||||
_dvdRamDds = dds;
|
||||
_dvdRamCartridgeStatus = cartridgeStatus;
|
||||
@@ -194,41 +193,41 @@ public sealed class DvdWritableInfoViewModel
|
||||
SaveDvdPlusDcbVisible = dcb != null;
|
||||
}
|
||||
|
||||
public string DvdRamDdsText { get; }
|
||||
public string DvdRamCartridgeStatusText { get; }
|
||||
public string DvdRamSpareAreaInformationText { get; }
|
||||
public bool SaveDvdRamDdsVisible { get; }
|
||||
public bool SaveDvdRamCartridgeStatusVisible { get; }
|
||||
public bool SaveDvdRamSpareAreaInformationVisible { get; }
|
||||
public bool SaveLastBorderOutRmdVisible { get; }
|
||||
public bool SaveDvdPreRecordedInfoVisible { get; }
|
||||
public bool SaveDvdrMediaIdentifierVisible { get; }
|
||||
public bool SaveDvdrPhysicalInformationVisible { get; }
|
||||
public bool SaveHddvdrMediumStatusVisible { get; }
|
||||
public bool SaveHddvdrLastRmdVisible { get; }
|
||||
public bool SaveDvdrLayerCapacityVisible { get; }
|
||||
public bool SaveDvdrDlMiddleZoneStartVisible { get; }
|
||||
public bool SaveDvdrDlJumpIntervalSizeVisible { get; }
|
||||
public bool SaveDvdrDlManualLayerJumpStartLbaVisible { get; }
|
||||
public bool SaveDvdrDlRemapAnchorPointVisible { get; }
|
||||
public bool SaveDvdPlusAdipVisible { get; }
|
||||
public bool SaveDvdPlusDcbVisible { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdRamDdsCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdRamCartridgeStatusCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdRamSpareAreaInformationCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveLastBorderOutRmdCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdPreRecordedInfoCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdrMediaIdentifierCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdrPhysicalInformationCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveHddvdrMediumStatusCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveHddvdrLastRmdCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdrLayerCapacityCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdrDlMiddleZoneStartCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdrDlJumpIntervalSizeCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdrDlManualLayerJumpStartLbaCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdrDlRemapAnchorPointCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdPlusAdipCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveDvdPlusDcbCommand { get; }
|
||||
public string DvdRamDdsText { get; }
|
||||
public string DvdRamCartridgeStatusText { get; }
|
||||
public string DvdRamSpareAreaInformationText { get; }
|
||||
public bool SaveDvdRamDdsVisible { get; }
|
||||
public bool SaveDvdRamCartridgeStatusVisible { get; }
|
||||
public bool SaveDvdRamSpareAreaInformationVisible { get; }
|
||||
public bool SaveLastBorderOutRmdVisible { get; }
|
||||
public bool SaveDvdPreRecordedInfoVisible { get; }
|
||||
public bool SaveDvdrMediaIdentifierVisible { get; }
|
||||
public bool SaveDvdrPhysicalInformationVisible { get; }
|
||||
public bool SaveHddvdrMediumStatusVisible { get; }
|
||||
public bool SaveHddvdrLastRmdVisible { get; }
|
||||
public bool SaveDvdrLayerCapacityVisible { get; }
|
||||
public bool SaveDvdrDlMiddleZoneStartVisible { get; }
|
||||
public bool SaveDvdrDlJumpIntervalSizeVisible { get; }
|
||||
public bool SaveDvdrDlManualLayerJumpStartLbaVisible { get; }
|
||||
public bool SaveDvdrDlRemapAnchorPointVisible { get; }
|
||||
public bool SaveDvdPlusAdipVisible { get; }
|
||||
public bool SaveDvdPlusDcbVisible { get; }
|
||||
public ICommand SaveDvdRamDdsCommand { get; }
|
||||
public ICommand SaveDvdRamCartridgeStatusCommand { get; }
|
||||
public ICommand SaveDvdRamSpareAreaInformationCommand { get; }
|
||||
public ICommand SaveLastBorderOutRmdCommand { get; }
|
||||
public ICommand SaveDvdPreRecordedInfoCommand { get; }
|
||||
public ICommand SaveDvdrMediaIdentifierCommand { get; }
|
||||
public ICommand SaveDvdrPhysicalInformationCommand { get; }
|
||||
public ICommand SaveHddvdrMediumStatusCommand { get; }
|
||||
public ICommand SaveHddvdrLastRmdCommand { get; }
|
||||
public ICommand SaveDvdrLayerCapacityCommand { get; }
|
||||
public ICommand SaveDvdrDlMiddleZoneStartCommand { get; }
|
||||
public ICommand SaveDvdrDlJumpIntervalSizeCommand { get; }
|
||||
public ICommand SaveDvdrDlManualLayerJumpStartLbaCommand { get; }
|
||||
public ICommand SaveDvdrDlRemapAnchorPointCommand { get; }
|
||||
public ICommand SaveDvdPlusAdipCommand { get; }
|
||||
public ICommand SaveDvdPlusDcbCommand { get; }
|
||||
|
||||
public string DvdRamDdsLabel => UI.Disc_Definition_Structure;
|
||||
public string DvdRamCartridgeStatusLabel => UI.Cartridge_Status;
|
||||
@@ -250,7 +249,7 @@ public sealed class DvdWritableInfoViewModel
|
||||
public string SaveDvdPlusAdipLabel => UI.ButtonLabel_Save_ADIP;
|
||||
public string SaveDvdPlusDcbLabel => UI.ButtonLabel_Save_Disc_Control_Blocks;
|
||||
|
||||
async Task SaveElement(byte[] data)
|
||||
async Task SaveElementAsync(byte[] data)
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -268,35 +267,35 @@ public sealed class DvdWritableInfoViewModel
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveDvdRamDdsCommand() => await SaveElement(_dvdRamDds);
|
||||
Task SaveDvdRamDdsAsync() => SaveElementAsync(_dvdRamDds);
|
||||
|
||||
async Task ExecuteSaveDvdRamCartridgeStatusCommand() => await SaveElement(_dvdRamCartridgeStatus);
|
||||
Task SaveDvdRamCartridgeStatusAsync() => SaveElementAsync(_dvdRamCartridgeStatus);
|
||||
|
||||
async Task ExecuteSaveDvdRamSpareAreaInformationCommand() => await SaveElement(_dvdRamSpareArea);
|
||||
Task SaveDvdRamSpareAreaInformationAsync() => SaveElementAsync(_dvdRamSpareArea);
|
||||
|
||||
async Task ExecuteSaveLastBorderOutRmdCommand() => await SaveElement(_dvdLastBorderOutRmd);
|
||||
Task SaveLastBorderOutRmdAsync() => SaveElementAsync(_dvdLastBorderOutRmd);
|
||||
|
||||
async Task ExecuteSaveDvdPreRecordedInfoCommand() => await SaveElement(_dvdPreRecordedInfo);
|
||||
Task SaveDvdPreRecordedInfoAsync() => SaveElementAsync(_dvdPreRecordedInfo);
|
||||
|
||||
async Task ExecuteSaveDvdrMediaIdentifierCommand() => await SaveElement(_dvdrMediaIdentifier);
|
||||
Task SaveDvdrMediaIdentifierAsync() => SaveElementAsync(_dvdrMediaIdentifier);
|
||||
|
||||
async Task ExecuteSaveDvdrPhysicalInformationCommand() => await SaveElement(_dvdrPhysicalInformation);
|
||||
Task SaveDvdrPhysicalInformationAsync() => SaveElementAsync(_dvdrPhysicalInformation);
|
||||
|
||||
async Task ExecuteSaveHddvdrMediumStatusCommand() => await SaveElement(_hddvdrMediumStatus);
|
||||
Task SaveHddvdrMediumStatusAsync() => SaveElementAsync(_hddvdrMediumStatus);
|
||||
|
||||
async Task ExecuteSaveHddvdrLastRmdCommand() => await SaveElement(_hddvdrLastRmd);
|
||||
Task SaveHddvdrLastRmdAsync() => SaveElementAsync(_hddvdrLastRmd);
|
||||
|
||||
async Task ExecuteSaveDvdrLayerCapacityCommand() => await SaveElement(_dvdrLayerCapacity);
|
||||
Task SaveDvdrLayerCapacityAsync() => SaveElementAsync(_dvdrLayerCapacity);
|
||||
|
||||
async Task ExecuteSaveDvdrDlMiddleZoneStartCommand() => await SaveElement(_dvdrDlMiddleZoneStart);
|
||||
Task SaveDvdrDlMiddleZoneStartAsync() => SaveElementAsync(_dvdrDlMiddleZoneStart);
|
||||
|
||||
async Task ExecuteSaveDvdrDlJumpIntervalSizeCommand() => await SaveElement(_dvdrDlJumpIntervalSize);
|
||||
Task SaveDvdrDlJumpIntervalSizeAsync() => SaveElementAsync(_dvdrDlJumpIntervalSize);
|
||||
|
||||
async Task ExecuteSaveDvdrDlManualLayerJumpStartLbaCommand() => await SaveElement(_dvdrDlManualLayerJumpStartLba);
|
||||
Task SaveDvdrDlManualLayerJumpStartLbaAsync() => SaveElementAsync(_dvdrDlManualLayerJumpStartLba);
|
||||
|
||||
async Task ExecuteSaveDvdrDlRemapAnchorPointCommand() => await SaveElement(_dvdrDlRemapAnchorPoint);
|
||||
Task SaveDvdrDlRemapAnchorPointAsync() => SaveElementAsync(_dvdrDlRemapAnchorPoint);
|
||||
|
||||
async Task ExecuteSaveDvdPlusAdipCommand() => await SaveElement(_dvdPlusAdip);
|
||||
Task SaveDvdPlusAdipAsync() => SaveElementAsync(_dvdPlusAdip);
|
||||
|
||||
async Task ExecuteSaveDvdPlusDcbCommand() => await SaveElement(_dvdPlusDcb);
|
||||
Task SaveDvdPlusDcbAsync() => SaveElementAsync(_dvdPlusDcb);
|
||||
}
|
||||
@@ -33,27 +33,29 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Decoders.PCMCIA;
|
||||
using Aaru.Gui.Models;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
using Tuple = Aaru.Decoders.PCMCIA.Tuple;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
public class PcmciaInfoViewModel : ViewModelBase
|
||||
public sealed partial class PcmciaInfoViewModel : ViewModelBase
|
||||
{
|
||||
const string MODULE_NAME = "PCMCIA Information ViewModel";
|
||||
readonly byte[] _cis;
|
||||
readonly Window _view;
|
||||
string _pcmciaCisText;
|
||||
PcmciaCisModel _selectedCis;
|
||||
[ObservableProperty]
|
||||
string _pcmciaCisText;
|
||||
PcmciaCisModel _selectedCis;
|
||||
|
||||
internal PcmciaInfoViewModel([CanBeNull] byte[] pcmciaCis, Window view)
|
||||
{
|
||||
@@ -61,7 +63,7 @@ public class PcmciaInfoViewModel : ViewModelBase
|
||||
|
||||
_cis = pcmciaCis;
|
||||
CisList = [];
|
||||
SavePcmciaCisCommand = ReactiveCommand.Create(ExecuteSavePcmciaCisCommand);
|
||||
SavePcmciaCisCommand = new AsyncRelayCommand(SavePcmciaCisAsync);
|
||||
|
||||
_view = view;
|
||||
|
||||
@@ -156,12 +158,6 @@ public class PcmciaInfoViewModel : ViewModelBase
|
||||
|
||||
public ObservableCollection<PcmciaCisModel> CisList { get; }
|
||||
|
||||
public string PcmciaCisText
|
||||
{
|
||||
get => _pcmciaCisText;
|
||||
set => this.RaiseAndSetIfChanged(ref _pcmciaCisText, value);
|
||||
}
|
||||
|
||||
public PcmciaCisModel SelectedCis
|
||||
{
|
||||
get => _selectedCis;
|
||||
@@ -170,13 +166,13 @@ public class PcmciaInfoViewModel : ViewModelBase
|
||||
if(_selectedCis == value) return;
|
||||
|
||||
PcmciaCisText = value?.Description;
|
||||
this.RaiseAndSetIfChanged(ref _selectedCis, value);
|
||||
SetProperty(ref _selectedCis, value);
|
||||
}
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Task> SavePcmciaCisCommand { get; }
|
||||
public ICommand SavePcmciaCisCommand { get; }
|
||||
|
||||
async Task ExecuteSavePcmciaCisCommand()
|
||||
async Task SavePcmciaCisAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
|
||||
@@ -34,8 +34,8 @@ using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.Structs.Devices.SCSI;
|
||||
using Aaru.Decoders.SCSI;
|
||||
using Aaru.Decoders.SCSI.MMC;
|
||||
@@ -45,24 +45,28 @@ using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using ReactiveUI;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
public sealed partial class ScsiInfoViewModel : ViewModelBase
|
||||
{
|
||||
const string MODULE_NAME = "SCSI Information ViewModel";
|
||||
readonly byte[] _configuration;
|
||||
readonly byte[] _scsiModeSense10;
|
||||
readonly byte[] _scsiModeSense6;
|
||||
readonly Window _view;
|
||||
string _evpdPageText;
|
||||
string _mmcFeatureText;
|
||||
string _scsiModeSensePageText;
|
||||
object _selectedEvpdPage;
|
||||
object _selectedMmcFeature;
|
||||
object _selectedModeSensePage;
|
||||
[ObservableProperty]
|
||||
string _evpdPageText;
|
||||
[ObservableProperty]
|
||||
string _mmcFeatureText;
|
||||
[ObservableProperty]
|
||||
string _modeSensePageText;
|
||||
object _selectedEvpdPage;
|
||||
object _selectedMmcFeature;
|
||||
object _selectedModeSensePage;
|
||||
|
||||
public ScsiInfoViewModel(byte[] scsiInquiryData, Inquiry? scsiInquiry, Dictionary<byte, byte[]> scsiEvpdPages,
|
||||
Modes.DecodedMode? scsiMode, PeripheralDeviceTypes scsiType, byte[] scsiModeSense6,
|
||||
@@ -76,12 +80,12 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
ModeSensePages = [];
|
||||
EvpdPages = [];
|
||||
MmcFeatures = [];
|
||||
SaveInquiryBinaryCommand = ReactiveCommand.Create(ExecuteSaveInquiryBinaryCommand);
|
||||
SaveInquiryTextCommand = ReactiveCommand.Create(ExecuteSaveInquiryTextCommand);
|
||||
SaveModeSense6Command = ReactiveCommand.Create(ExecuteSaveModeSense6Command);
|
||||
SaveModeSense10Command = ReactiveCommand.Create(ExecuteSaveModeSense10Command);
|
||||
SaveEvpdPageCommand = ReactiveCommand.Create(ExecuteSaveEvpdPageCommand);
|
||||
SaveMmcFeaturesCommand = ReactiveCommand.Create(ExecuteSaveMmcFeaturesCommand);
|
||||
SaveInquiryBinaryCommand = new AsyncRelayCommand(SaveInquiryBinaryAsync);
|
||||
SaveInquiryTextCommand = new AsyncRelayCommand(SaveInquiryTextAsync);
|
||||
SaveModeSense6Command = new AsyncRelayCommand(SaveModeSense6Async);
|
||||
SaveModeSense10Command = new AsyncRelayCommand(SaveModeSense10Async);
|
||||
SaveEvpdPageCommand = new AsyncRelayCommand(SaveEvpdPageAsync);
|
||||
SaveMmcFeaturesCommand = new AsyncRelayCommand(SaveMmcFeaturesAsync);
|
||||
|
||||
if(InquiryData == null || !scsiInquiry.HasValue) return;
|
||||
|
||||
@@ -606,9 +610,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
evpdPageTitle = string.Format(UI.Page_0_h, page.Key);
|
||||
evpdDecodedPage = UI.Undecoded;
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Core.Found_undecoded_SCSI_VPD_page_0,
|
||||
page.Key);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Core.Found_undecoded_SCSI_VPD_page_0, page.Key);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -629,9 +631,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Core.GET_CONFIGURATION_length_is_0, ftr.DataLength);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Core.GET_CONFIGURATION_current_profile_is_0,
|
||||
ftr.CurrentProfile);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Core.GET_CONFIGURATION_current_profile_is_0, ftr.CurrentProfile);
|
||||
|
||||
if(ftr.Descriptors != null)
|
||||
{
|
||||
@@ -711,10 +711,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Core.GET_CONFIGURATION_returned_no_feature_descriptors);
|
||||
}
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Core.GET_CONFIGURATION_returned_no_feature_descriptors);
|
||||
}
|
||||
|
||||
public byte[] InquiryData { get; }
|
||||
@@ -722,12 +719,12 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
public ObservableCollection<ScsiPageModel> ModeSensePages { get; }
|
||||
public ObservableCollection<ScsiPageModel> EvpdPages { get; }
|
||||
public ObservableCollection<ScsiPageModel> MmcFeatures { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveInquiryBinaryCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveInquiryTextCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveModeSense6Command { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveModeSense10Command { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveEvpdPageCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SaveMmcFeaturesCommand { get; }
|
||||
public ICommand SaveInquiryBinaryCommand { get; }
|
||||
public ICommand SaveInquiryTextCommand { get; }
|
||||
public ICommand SaveModeSense6Command { get; }
|
||||
public ICommand SaveModeSense10Command { get; }
|
||||
public ICommand SaveEvpdPageCommand { get; }
|
||||
public ICommand SaveMmcFeaturesCommand { get; }
|
||||
|
||||
public object SelectedModeSensePage
|
||||
{
|
||||
@@ -738,16 +735,10 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
|
||||
if(value is ScsiPageModel pageModel) ModeSensePageText = pageModel.Description;
|
||||
|
||||
this.RaiseAndSetIfChanged(ref _selectedModeSensePage, value);
|
||||
SetProperty(ref _selectedModeSensePage, value);
|
||||
}
|
||||
}
|
||||
|
||||
public string ModeSensePageText
|
||||
{
|
||||
get => _scsiModeSensePageText;
|
||||
set => this.RaiseAndSetIfChanged(ref _scsiModeSensePageText, value);
|
||||
}
|
||||
|
||||
public object SelectedEvpdPage
|
||||
{
|
||||
get => _selectedEvpdPage;
|
||||
@@ -757,16 +748,10 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
|
||||
if(value is ScsiPageModel pageModel) EvpdPageText = pageModel.Description;
|
||||
|
||||
this.RaiseAndSetIfChanged(ref _selectedEvpdPage, value);
|
||||
SetProperty(ref _selectedEvpdPage, value);
|
||||
}
|
||||
}
|
||||
|
||||
public string EvpdPageText
|
||||
{
|
||||
get => _evpdPageText;
|
||||
set => this.RaiseAndSetIfChanged(ref _evpdPageText, value);
|
||||
}
|
||||
|
||||
public object SelectedMmcFeature
|
||||
{
|
||||
get => _selectedMmcFeature;
|
||||
@@ -776,16 +761,10 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
|
||||
if(value is ScsiPageModel pageModel) MmcFeatureText = pageModel.Description;
|
||||
|
||||
this.RaiseAndSetIfChanged(ref _selectedMmcFeature, value);
|
||||
SetProperty(ref _selectedMmcFeature, value);
|
||||
}
|
||||
}
|
||||
|
||||
public string MmcFeatureText
|
||||
{
|
||||
get => _mmcFeatureText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mmcFeatureText, value);
|
||||
}
|
||||
|
||||
public string InquiryLabel => UI.Title_INQUIRY;
|
||||
public string ScsiInquiryLabel => UI.Title_SCSI_INQUIRY;
|
||||
public string SaveInquiryBinaryLabel => UI.ButtonLabel_Save_binary_to_file;
|
||||
@@ -800,7 +779,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
public string FeatureLabel => UI.Title_Feature;
|
||||
public string SaveMmcFeaturesLabel => UI.ButtonLabel_Save_MMC_GET_CONFIGURATION_response_to_file;
|
||||
|
||||
async Task ExecuteSaveInquiryBinaryCommand()
|
||||
async Task SaveInquiryBinaryAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -818,7 +797,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveInquiryTextCommand()
|
||||
async Task SaveInquiryTextAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -836,7 +815,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveModeSense6Command()
|
||||
async Task SaveModeSense6Async()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -854,7 +833,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveModeSense10Command()
|
||||
async Task SaveModeSense10Async()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -872,7 +851,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveEvpdPageCommand()
|
||||
async Task SaveEvpdPageAsync()
|
||||
{
|
||||
if(SelectedEvpdPage is not ScsiPageModel pageModel) return;
|
||||
|
||||
@@ -892,7 +871,7 @@ public sealed class ScsiInfoViewModel : ViewModelBase
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
async Task ExecuteSaveMmcFeaturesCommand()
|
||||
async Task SaveMmcFeaturesAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
|
||||
@@ -32,15 +32,15 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.Core.Media.Info;
|
||||
using Aaru.Decoders.Xbox;
|
||||
using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Tabs;
|
||||
|
||||
@@ -54,7 +54,7 @@ public sealed class XboxInfoViewModel
|
||||
{
|
||||
_xboxSecuritySector = securitySector;
|
||||
_view = view;
|
||||
SaveXboxSsCommand = ReactiveCommand.Create(ExecuteSaveXboxSsCommand);
|
||||
SaveXboxSsCommand = new AsyncRelayCommand(SaveXboxSsAsync);
|
||||
|
||||
if(xgdInfo != null)
|
||||
{
|
||||
@@ -79,17 +79,17 @@ public sealed class XboxInfoViewModel
|
||||
SaveXboxSsVisible = securitySector != null;
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Task> 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; }
|
||||
public ICommand 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; }
|
||||
|
||||
public string XboxL0VideoLabel => Localization.Core.Video_layer_zero_size;
|
||||
public string XboxL1VideoLabel => Localization.Core.Video_layer_one_size;
|
||||
@@ -101,7 +101,7 @@ public sealed class XboxInfoViewModel
|
||||
public string XboxSsLabel => UI.Title_Security_Sector;
|
||||
public string SaveXboxSsLabel => UI.ButtonLabel_Save_Xbox_Security_Sector;
|
||||
|
||||
async Task SaveElement(byte[] data)
|
||||
async Task SaveElementAsync(byte[] data)
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
@@ -119,5 +119,5 @@ public sealed class XboxInfoViewModel
|
||||
saveFs.Close();
|
||||
}
|
||||
|
||||
public async Task ExecuteSaveXboxSsCommand() => await SaveElement(_xboxSecuritySector);
|
||||
Task SaveXboxSsAsync() => SaveElementAsync(_xboxSecuritySector);
|
||||
}
|
||||
@@ -30,8 +30,8 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using ReactiveUI;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
namespace Aaru.Gui.ViewModels;
|
||||
|
||||
public class ViewModelBase : ReactiveObject;
|
||||
public class ViewModelBase : ObservableObject;
|
||||
@@ -46,8 +46,8 @@ using Aaru.Decoders.Xbox;
|
||||
using Aaru.Gui.Models;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Localization;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
using BCA = Aaru.Decoders.Bluray.BCA;
|
||||
using Cartridge = Aaru.Decoders.DVD.Cartridge;
|
||||
using DDS = Aaru.Decoders.DVD.DDS;
|
||||
@@ -57,14 +57,17 @@ using Spare = Aaru.Decoders.DVD.Spare;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class DecodeMediaTagsViewModel : ViewModelBase
|
||||
public sealed partial class DecodeMediaTagsViewModel : ViewModelBase
|
||||
{
|
||||
const int HEX_COLUMNS = 32;
|
||||
readonly MediaType _mediaType;
|
||||
string _decodedText;
|
||||
bool _decodedVisible;
|
||||
string _hexViewText;
|
||||
MediaTagModel _selectedTag;
|
||||
[ObservableProperty]
|
||||
string _decodedText;
|
||||
[ObservableProperty]
|
||||
bool _decodedVisible;
|
||||
[ObservableProperty]
|
||||
string _hexViewText;
|
||||
MediaTagModel _selectedTag;
|
||||
|
||||
public DecodeMediaTagsViewModel([NotNull] IMediaImage inputFormat)
|
||||
{
|
||||
@@ -95,7 +98,7 @@ public sealed class DecodeMediaTagsViewModel : ViewModelBase
|
||||
get => _selectedTag;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref _selectedTag, value);
|
||||
SetProperty(ref _selectedTag, value);
|
||||
|
||||
if(value is null) return;
|
||||
|
||||
@@ -233,24 +236,6 @@ public sealed class DecodeMediaTagsViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
public string HexViewText
|
||||
{
|
||||
get => _hexViewText;
|
||||
set => this.RaiseAndSetIfChanged(ref _hexViewText, value);
|
||||
}
|
||||
|
||||
public bool DecodedVisible
|
||||
{
|
||||
get => _decodedVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _decodedVisible, value);
|
||||
}
|
||||
|
||||
public string DecodedText
|
||||
{
|
||||
get => _decodedText;
|
||||
set => this.RaiseAndSetIfChanged(ref _decodedText, value);
|
||||
}
|
||||
|
||||
public string TagLabel => UI.Title_Tag;
|
||||
public string HexViewLabel => UI.Title_HexView;
|
||||
public string DecodedLabel => UI.Title_Decoded;
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reactive;
|
||||
using System.Threading;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.CommonTypes.Structs;
|
||||
@@ -44,54 +44,91 @@ using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Threading;
|
||||
using ReactiveUI;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
public sealed partial class ImageChecksumViewModel : ViewModelBase
|
||||
{
|
||||
// How many sectors to read at once
|
||||
const uint SECTORS_TO_READ = 256;
|
||||
const string MODULE_NAME = "Image Checksum ViewModel";
|
||||
readonly IMediaImage _inputFormat;
|
||||
readonly Window _view;
|
||||
bool _adler32Checked;
|
||||
bool _cancel;
|
||||
bool _checksumMediaChecked;
|
||||
bool _checksumTracksChecked;
|
||||
bool _checksumTracksVisible;
|
||||
bool _closeCommandEnabled;
|
||||
bool _closeCommandVisible;
|
||||
bool _crc16Checked;
|
||||
bool _crc32Checked;
|
||||
bool _crc64Checked;
|
||||
bool _fletcher16Checked;
|
||||
bool _fletcher32Checked;
|
||||
bool _md5Checked;
|
||||
bool _mediaChecksumsVisible;
|
||||
bool _optionsEnabled;
|
||||
bool _progress1Visible;
|
||||
double _progress2Max;
|
||||
string _progress2Text;
|
||||
double _progress2Value;
|
||||
bool _progress2Visible;
|
||||
double _progressMax;
|
||||
string _progressText;
|
||||
double _progressValue;
|
||||
bool _progressVisible;
|
||||
bool _resultsVisible;
|
||||
bool _sha1Checked;
|
||||
bool _sha256Checked;
|
||||
bool _sha384Checked;
|
||||
bool _sha512Checked;
|
||||
bool _spamsumChecked;
|
||||
bool _startCommandEnabled;
|
||||
bool _startCommandVisible;
|
||||
bool _stopCommandEnabled;
|
||||
bool _stopCommandVisible;
|
||||
string _title;
|
||||
bool _trackChecksumsVisible;
|
||||
[ObservableProperty]
|
||||
bool _adler32Checked;
|
||||
[ObservableProperty]
|
||||
bool _cancel;
|
||||
[ObservableProperty]
|
||||
bool _checksumMediaChecked;
|
||||
[ObservableProperty]
|
||||
bool _checksumTracksChecked;
|
||||
[ObservableProperty]
|
||||
bool _checksumTracksVisible;
|
||||
[ObservableProperty]
|
||||
bool _closeCommandEnabled;
|
||||
[ObservableProperty]
|
||||
bool _closeCommandVisible;
|
||||
[ObservableProperty]
|
||||
bool _crc16Checked;
|
||||
[ObservableProperty]
|
||||
bool _crc32Checked;
|
||||
[ObservableProperty]
|
||||
bool _crc64Checked;
|
||||
[ObservableProperty]
|
||||
bool _fletcher16Checked;
|
||||
[ObservableProperty]
|
||||
bool _fletcher32Checked;
|
||||
[ObservableProperty]
|
||||
bool _md5Checked;
|
||||
[ObservableProperty]
|
||||
bool _mediaChecksumsVisible;
|
||||
[ObservableProperty]
|
||||
bool _optionsEnabled;
|
||||
[ObservableProperty]
|
||||
bool _progress1Visible;
|
||||
[ObservableProperty]
|
||||
double _progress2Max;
|
||||
[ObservableProperty]
|
||||
string _progress2Text;
|
||||
[ObservableProperty]
|
||||
double _progress2Value;
|
||||
[ObservableProperty]
|
||||
bool _progress2Visible;
|
||||
[ObservableProperty]
|
||||
double _progressMax;
|
||||
[ObservableProperty]
|
||||
string _progressText;
|
||||
[ObservableProperty]
|
||||
double _progressValue;
|
||||
[ObservableProperty]
|
||||
bool _progressVisible;
|
||||
[ObservableProperty]
|
||||
bool _resultsVisible;
|
||||
[ObservableProperty]
|
||||
bool _sha1Checked;
|
||||
[ObservableProperty]
|
||||
bool _sha256Checked;
|
||||
[ObservableProperty]
|
||||
bool _sha384Checked;
|
||||
[ObservableProperty]
|
||||
bool _sha512Checked;
|
||||
[ObservableProperty]
|
||||
bool _spamsumChecked;
|
||||
[ObservableProperty]
|
||||
bool _startCommandEnabled;
|
||||
[ObservableProperty]
|
||||
bool _startCommandVisible;
|
||||
[ObservableProperty]
|
||||
bool _stopCommandEnabled;
|
||||
[ObservableProperty]
|
||||
bool _stopCommandVisible;
|
||||
[ObservableProperty]
|
||||
string _title;
|
||||
[ObservableProperty]
|
||||
bool _trackChecksumsVisible;
|
||||
|
||||
public ImageChecksumViewModel(IMediaImage inputFormat, Window view)
|
||||
{
|
||||
@@ -110,9 +147,9 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
SpamsumChecked = true;
|
||||
TrackChecksums = [];
|
||||
MediaChecksums = [];
|
||||
StartCommand = ReactiveCommand.Create(ExecuteStartCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
StopCommand = ReactiveCommand.Create(ExecuteStopCommand);
|
||||
StartCommand = new RelayCommand(Start);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
StopCommand = new RelayCommand(Stop);
|
||||
StopCommandVisible = false;
|
||||
StartCommandVisible = true;
|
||||
CloseCommandVisible = true;
|
||||
@@ -154,223 +191,13 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
public string StopLabel => UI.ButtonLabel_Stop;
|
||||
|
||||
public string Title
|
||||
{
|
||||
get => _title;
|
||||
set => this.RaiseAndSetIfChanged(ref _title, value);
|
||||
}
|
||||
|
||||
public bool OptionsEnabled
|
||||
{
|
||||
get => _optionsEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _optionsEnabled, value);
|
||||
}
|
||||
|
||||
public bool ChecksumMediaChecked
|
||||
{
|
||||
get => _checksumMediaChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _checksumMediaChecked, value);
|
||||
}
|
||||
|
||||
public bool ChecksumTracksChecked
|
||||
{
|
||||
get => _checksumTracksChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _checksumTracksChecked, value);
|
||||
}
|
||||
|
||||
public bool Adler32Checked
|
||||
{
|
||||
get => _adler32Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _adler32Checked, value);
|
||||
}
|
||||
|
||||
public bool Crc16Checked
|
||||
{
|
||||
get => _crc16Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _crc16Checked, value);
|
||||
}
|
||||
|
||||
public bool Crc32Checked
|
||||
{
|
||||
get => _crc32Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _crc32Checked, value);
|
||||
}
|
||||
|
||||
public bool Crc64Checked
|
||||
{
|
||||
get => _crc64Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _crc64Checked, value);
|
||||
}
|
||||
|
||||
public bool Fletcher16Checked
|
||||
{
|
||||
get => _fletcher16Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _fletcher16Checked, value);
|
||||
}
|
||||
|
||||
public bool Fletcher32Checked
|
||||
{
|
||||
get => _fletcher32Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _fletcher32Checked, value);
|
||||
}
|
||||
|
||||
public bool Md5Checked
|
||||
{
|
||||
get => _md5Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _md5Checked, value);
|
||||
}
|
||||
|
||||
public bool Sha1Checked
|
||||
{
|
||||
get => _sha1Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _sha1Checked, value);
|
||||
}
|
||||
|
||||
public bool Sha256Checked
|
||||
{
|
||||
get => _sha256Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _sha256Checked, value);
|
||||
}
|
||||
|
||||
public bool Sha384Checked
|
||||
{
|
||||
get => _sha384Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _sha384Checked, value);
|
||||
}
|
||||
|
||||
public bool Sha512Checked
|
||||
{
|
||||
get => _sha512Checked;
|
||||
set => this.RaiseAndSetIfChanged(ref _sha512Checked, value);
|
||||
}
|
||||
|
||||
public bool SpamsumChecked
|
||||
{
|
||||
get => _spamsumChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _spamsumChecked, value);
|
||||
}
|
||||
|
||||
public bool ResultsVisible
|
||||
{
|
||||
get => _resultsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _resultsVisible, value);
|
||||
}
|
||||
|
||||
public bool TrackChecksumsVisible
|
||||
{
|
||||
get => _trackChecksumsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _trackChecksumsVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaChecksumsVisible
|
||||
{
|
||||
get => _mediaChecksumsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaChecksumsVisible, value);
|
||||
}
|
||||
|
||||
public bool ProgressVisible
|
||||
{
|
||||
get => _progressVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressVisible, value);
|
||||
}
|
||||
|
||||
public bool Progress1Visible
|
||||
{
|
||||
get => _progress1Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress1Visible, value);
|
||||
}
|
||||
|
||||
public string ProgressText
|
||||
{
|
||||
get => _progressText;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressText, value);
|
||||
}
|
||||
|
||||
public double ProgressMax
|
||||
{
|
||||
get => _progressMax;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressMax, value);
|
||||
}
|
||||
|
||||
public double ProgressValue
|
||||
{
|
||||
get => _progressValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressValue, value);
|
||||
}
|
||||
|
||||
public bool Progress2Visible
|
||||
{
|
||||
get => _progress2Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Visible, value);
|
||||
}
|
||||
|
||||
public string Progress2Text
|
||||
{
|
||||
get => _progress2Text;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Text, value);
|
||||
}
|
||||
|
||||
public double Progress2Max
|
||||
{
|
||||
get => _progress2Max;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Max, value);
|
||||
}
|
||||
|
||||
public double Progress2Value
|
||||
{
|
||||
get => _progress2Value;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Value, value);
|
||||
}
|
||||
|
||||
public bool StartCommandEnabled
|
||||
{
|
||||
get => _startCommandEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _startCommandEnabled, value);
|
||||
}
|
||||
|
||||
public bool StartCommandVisible
|
||||
{
|
||||
get => _startCommandVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _startCommandVisible, value);
|
||||
}
|
||||
|
||||
public bool CloseCommandEnabled
|
||||
{
|
||||
get => _closeCommandEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeCommandEnabled, value);
|
||||
}
|
||||
|
||||
public bool CloseCommandVisible
|
||||
{
|
||||
get => _closeCommandVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeCommandVisible, value);
|
||||
}
|
||||
|
||||
public bool StopCommandEnabled
|
||||
{
|
||||
get => _stopCommandEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopCommandEnabled, value);
|
||||
}
|
||||
|
||||
public bool StopCommandVisible
|
||||
{
|
||||
get => _stopCommandVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopCommandVisible, value);
|
||||
}
|
||||
|
||||
public bool ChecksumTracksVisible
|
||||
{
|
||||
get => _checksumTracksVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopCommandVisible, value);
|
||||
}
|
||||
|
||||
public ObservableCollection<ChecksumModel> TrackChecksums { get; }
|
||||
public ObservableCollection<ChecksumModel> MediaChecksums { get; }
|
||||
public ReactiveCommand<Unit, Unit> StartCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StopCommand { get; }
|
||||
public ICommand StartCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ICommand StopCommand { get; }
|
||||
|
||||
void ExecuteStartCommand()
|
||||
void Start()
|
||||
{
|
||||
OptionsEnabled = false;
|
||||
CloseCommandVisible = false;
|
||||
@@ -386,9 +213,9 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
}.Start();
|
||||
}
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
|
||||
internal void ExecuteStopCommand()
|
||||
internal void Stop()
|
||||
{
|
||||
_cancel = true;
|
||||
StopCommandEnabled = false;
|
||||
|
||||
@@ -36,11 +36,11 @@ using System.Collections.ObjectModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes;
|
||||
using Aaru.CommonTypes.AaruMetadata;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
@@ -55,9 +55,10 @@ using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using Avalonia.Threading;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using ImageInfo = Aaru.CommonTypes.Structs.ImageInfo;
|
||||
using Track = Aaru.CommonTypes.Structs.Track;
|
||||
@@ -66,70 +67,130 @@ using Version = Aaru.CommonTypes.Interop.Version;
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
[SuppressMessage("ReSharper", "AsyncVoidLambda")]
|
||||
public sealed class ImageConvertViewModel : ViewModelBase
|
||||
public sealed partial class ImageConvertViewModel : ViewModelBase
|
||||
{
|
||||
readonly IMediaImage _inputFormat;
|
||||
readonly Window _view;
|
||||
Metadata _aaruMetadata;
|
||||
bool _aaruMetadataFromImageVisible;
|
||||
bool _cancel;
|
||||
bool _closeVisible;
|
||||
string _commentsText;
|
||||
bool _commentsVisible;
|
||||
string _creatorText;
|
||||
bool _creatorVisible;
|
||||
bool _destinationEnabled;
|
||||
string _destinationText;
|
||||
bool _destinationVisible;
|
||||
string _driveFirmwareRevisionText;
|
||||
bool _driveFirmwareRevisionVisible;
|
||||
string _driveManufacturerText;
|
||||
bool _driveManufacturerVisible;
|
||||
string _driveModelText;
|
||||
bool _driveModelVisible;
|
||||
string _driveSerialNumberText;
|
||||
bool _driveSerialNumberVisible;
|
||||
List<DumpHardware> _dumpHardware;
|
||||
bool _forceChecked;
|
||||
bool _formatReadOnly;
|
||||
double _lastMediaSequenceValue;
|
||||
bool _lastMediaSequenceVisible;
|
||||
string _mediaBarcodeText;
|
||||
bool _mediaBarcodeVisible;
|
||||
string _mediaManufacturerText;
|
||||
bool _mediaManufacturerVisible;
|
||||
string _mediaModelText;
|
||||
bool _mediaModelVisible;
|
||||
string _mediaPartNumberText;
|
||||
bool _mediaPartNumberVisible;
|
||||
double _mediaSequenceValue;
|
||||
bool _mediaSequenceVisible;
|
||||
string _mediaSerialNumberText;
|
||||
bool _mediaSerialNumberVisible;
|
||||
string _mediaTitleText;
|
||||
bool _mediaTitleVisible;
|
||||
string _metadataJsonText;
|
||||
bool _optionsVisible;
|
||||
bool _progress1Visible;
|
||||
bool _progress2Indeterminate;
|
||||
double _progress2MaxValue;
|
||||
string _progress2Text;
|
||||
double _progress2Value;
|
||||
bool _progress2Visible;
|
||||
bool _progressIndeterminate;
|
||||
double _progressMaxValue;
|
||||
string _progressText;
|
||||
double _progressValue;
|
||||
bool _progressVisible;
|
||||
bool _resumeFileFromImageVisible;
|
||||
string _resumeFileText;
|
||||
double _sectorsValue;
|
||||
ImagePluginModel _selectedPlugin;
|
||||
string _sourceText;
|
||||
bool _startVisible;
|
||||
bool _stopEnabled;
|
||||
bool _stopVisible;
|
||||
string _title;
|
||||
[ObservableProperty]
|
||||
Metadata _aaruMetadata;
|
||||
[ObservableProperty]
|
||||
bool _aaruMetadataFromImageVisible;
|
||||
[ObservableProperty]
|
||||
bool _cancel;
|
||||
[ObservableProperty]
|
||||
bool _closeVisible;
|
||||
[ObservableProperty]
|
||||
string _commentsText;
|
||||
[ObservableProperty]
|
||||
bool _commentsVisible;
|
||||
[ObservableProperty]
|
||||
string _creatorText;
|
||||
[ObservableProperty]
|
||||
bool _creatorVisible;
|
||||
[ObservableProperty]
|
||||
bool _destinationEnabled;
|
||||
[ObservableProperty]
|
||||
string _destinationText;
|
||||
[ObservableProperty]
|
||||
bool _destinationVisible;
|
||||
[ObservableProperty]
|
||||
string _driveFirmwareRevisionText;
|
||||
[ObservableProperty]
|
||||
bool _driveFirmwareRevisionVisible;
|
||||
[ObservableProperty]
|
||||
string _driveManufacturerText;
|
||||
[ObservableProperty]
|
||||
bool _driveManufacturerVisible;
|
||||
[ObservableProperty]
|
||||
string _driveModelText;
|
||||
[ObservableProperty]
|
||||
bool _driveModelVisible;
|
||||
[ObservableProperty]
|
||||
string _driveSerialNumberText;
|
||||
[ObservableProperty]
|
||||
bool _driveSerialNumberVisible;
|
||||
[ObservableProperty]
|
||||
List<DumpHardware> _dumpHardware;
|
||||
[ObservableProperty]
|
||||
bool _forceChecked;
|
||||
[ObservableProperty]
|
||||
bool _formatReadOnly;
|
||||
[ObservableProperty]
|
||||
double _lastMediaSequenceValue;
|
||||
[ObservableProperty]
|
||||
bool _lastMediaSequenceVisible;
|
||||
[ObservableProperty]
|
||||
string _mediaBarcodeText;
|
||||
[ObservableProperty]
|
||||
bool _mediaBarcodeVisible;
|
||||
[ObservableProperty]
|
||||
string _mediaManufacturerText;
|
||||
[ObservableProperty]
|
||||
bool _mediaManufacturerVisible;
|
||||
[ObservableProperty]
|
||||
string _mediaModelText;
|
||||
[ObservableProperty]
|
||||
bool _mediaModelVisible;
|
||||
[ObservableProperty]
|
||||
string _mediaPartNumberText;
|
||||
[ObservableProperty]
|
||||
bool _mediaPartNumberVisible;
|
||||
[ObservableProperty]
|
||||
double _mediaSequenceValue;
|
||||
[ObservableProperty]
|
||||
bool _mediaSequenceVisible;
|
||||
[ObservableProperty]
|
||||
string _mediaSerialNumberText;
|
||||
[ObservableProperty]
|
||||
bool _mediaSerialNumberVisible;
|
||||
[ObservableProperty]
|
||||
string _mediaTitleText;
|
||||
[ObservableProperty]
|
||||
bool _mediaTitleVisible;
|
||||
[ObservableProperty]
|
||||
string _metadataJsonText;
|
||||
[ObservableProperty]
|
||||
bool _optionsVisible;
|
||||
[ObservableProperty]
|
||||
bool _progress1Visible;
|
||||
[ObservableProperty]
|
||||
bool _progress2Indeterminate;
|
||||
[ObservableProperty]
|
||||
double _progress2MaxValue;
|
||||
[ObservableProperty]
|
||||
string _progress2Text;
|
||||
[ObservableProperty]
|
||||
double _progress2Value;
|
||||
[ObservableProperty]
|
||||
bool _progress2Visible;
|
||||
[ObservableProperty]
|
||||
bool _progressIndeterminate;
|
||||
[ObservableProperty]
|
||||
double _progressMaxValue;
|
||||
[ObservableProperty]
|
||||
string _progressText;
|
||||
[ObservableProperty]
|
||||
double _progressValue;
|
||||
[ObservableProperty]
|
||||
bool _progressVisible;
|
||||
[ObservableProperty]
|
||||
bool _resumeFileFromImageVisible;
|
||||
[ObservableProperty]
|
||||
string _resumeFileText;
|
||||
[ObservableProperty]
|
||||
double _sectorsValue;
|
||||
[ObservableProperty]
|
||||
ImagePluginModel _selectedPlugin;
|
||||
[ObservableProperty]
|
||||
string _sourceText;
|
||||
[ObservableProperty]
|
||||
bool _startVisible;
|
||||
[ObservableProperty]
|
||||
bool _stopEnabled;
|
||||
[ObservableProperty]
|
||||
bool _stopVisible;
|
||||
[ObservableProperty]
|
||||
string _title;
|
||||
|
||||
public ImageConvertViewModel([JetBrains.Annotations.NotNull] IMediaImage inputFormat, string imageSource,
|
||||
Window view)
|
||||
@@ -137,28 +198,28 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
_view = view;
|
||||
_inputFormat = inputFormat;
|
||||
_cancel = false;
|
||||
DestinationCommand = ReactiveCommand.Create(ExecuteDestinationCommand);
|
||||
CreatorCommand = ReactiveCommand.Create(ExecuteCreatorCommand);
|
||||
MediaTitleCommand = ReactiveCommand.Create(ExecuteMediaTitleCommand);
|
||||
MediaManufacturerCommand = ReactiveCommand.Create(ExecuteMediaManufacturerCommand);
|
||||
MediaModelCommand = ReactiveCommand.Create(ExecuteMediaModelCommand);
|
||||
MediaSerialNumberCommand = ReactiveCommand.Create(ExecuteMediaSerialNumberCommand);
|
||||
MediaBarcodeCommand = ReactiveCommand.Create(ExecuteMediaBarcodeCommand);
|
||||
MediaPartNumberCommand = ReactiveCommand.Create(ExecuteMediaPartNumberCommand);
|
||||
MediaSequenceCommand = ReactiveCommand.Create(ExecuteMediaSequenceCommand);
|
||||
LastMediaSequenceCommand = ReactiveCommand.Create(ExecuteLastMediaSequenceCommand);
|
||||
DriveManufacturerCommand = ReactiveCommand.Create(ExecuteDriveManufacturerCommand);
|
||||
DriveModelCommand = ReactiveCommand.Create(ExecuteDriveModelCommand);
|
||||
DriveSerialNumberCommand = ReactiveCommand.Create(ExecuteDriveSerialNumberCommand);
|
||||
DriveFirmwareRevisionCommand = ReactiveCommand.Create(ExecuteDriveFirmwareRevisionCommand);
|
||||
CommentsCommand = ReactiveCommand.Create(ExecuteCommentsCommand);
|
||||
AaruMetadataFromImageCommand = ReactiveCommand.Create(ExecuteAaruMetadataFromImageCommand);
|
||||
AaruMetadataCommand = ReactiveCommand.Create(ExecuteAaruMetadataCommand);
|
||||
ResumeFileFromImageCommand = ReactiveCommand.Create(ExecuteResumeFileFromImageCommand);
|
||||
ResumeFileCommand = ReactiveCommand.Create(ExecuteResumeFileCommand);
|
||||
StartCommand = ReactiveCommand.Create(ExecuteStartCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
StopCommand = ReactiveCommand.Create(ExecuteStopCommand);
|
||||
DestinationCommand = new AsyncRelayCommand(DestinationAsync);
|
||||
CreatorCommand = new RelayCommand(Creator);
|
||||
MediaTitleCommand = new RelayCommand(MediaTitle);
|
||||
MediaManufacturerCommand = new RelayCommand(MediaManufacturer);
|
||||
MediaModelCommand = new RelayCommand(MediaModel);
|
||||
MediaSerialNumberCommand = new RelayCommand(MediaSerialNumber);
|
||||
MediaBarcodeCommand = new RelayCommand(MediaBarcode);
|
||||
MediaPartNumberCommand = new RelayCommand(MediaPartNumber);
|
||||
MediaSequenceCommand = new RelayCommand(MediaSequence);
|
||||
LastMediaSequenceCommand = new RelayCommand(LastMediaSequence);
|
||||
DriveManufacturerCommand = new RelayCommand(DriveManufacturer);
|
||||
DriveModelCommand = new RelayCommand(DriveModel);
|
||||
DriveSerialNumberCommand = new RelayCommand(DriveSerialNumber);
|
||||
DriveFirmwareRevisionCommand = new RelayCommand(DriveFirmwareRevision);
|
||||
CommentsCommand = new RelayCommand(Comments);
|
||||
AaruMetadataFromImageCommand = new RelayCommand(AaruMetadataFromImage);
|
||||
AaruMetadataCommand = new AsyncRelayCommand(AaruMetadataAsync);
|
||||
ResumeFileFromImageCommand = new RelayCommand(ResumeFileFromImage);
|
||||
ResumeFileCommand = new AsyncRelayCommand(ResumeFileAsync);
|
||||
StartCommand = new AsyncRelayCommand(StartAsync);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
StopCommand = new RelayCommand(Stop);
|
||||
SourceText = imageSource;
|
||||
CreatorVisible = !string.IsNullOrWhiteSpace(inputFormat.Info.Creator);
|
||||
MediaTitleVisible = !string.IsNullOrWhiteSpace(inputFormat.Info.MediaTitle);
|
||||
@@ -200,401 +261,58 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
ResumeFileText = _dumpHardware == null ? "" : UI._From_image_;
|
||||
}
|
||||
|
||||
public string SourceImageLabel => UI.Source_image;
|
||||
public string OutputFormatLabel => UI.Output_format;
|
||||
public string ChooseLabel => UI.ButtonLabel_Choose;
|
||||
public string SectorsLabel => UI.How_many_sectors_to_convert_at_once;
|
||||
public string ForceLabel => UI.Continue_conversion_even_if_data_lost;
|
||||
public string CreatorLabel => UI.Who_person_created_the_image;
|
||||
public string GetFromSourceImageLabel => UI.ButtonLabel_Get_from_source_image;
|
||||
public string MetadataLabel => UI.Title_Metadata;
|
||||
public string MediaLabel => UI.Title_Media;
|
||||
public string TitleLabel => UI.Title_Title;
|
||||
public string ManufacturerLabel => UI.Title_Manufacturer;
|
||||
public string ModelLabel => UI.Title_Model;
|
||||
public string SerialNumberLabel => UI.Title_Serial_number;
|
||||
public string BarcodeLabel => UI.Title_Barcode;
|
||||
public string PartNumberLabel => UI.Title_Part_number;
|
||||
public string NumberInSequenceLabel => UI.Title_Number_in_sequence;
|
||||
public string LastMediaOfTheSequenceLabel => UI.Title_Last_media_of_the_sequence;
|
||||
public string DriveLabel => UI.Title_Drive;
|
||||
public string FirmwareRevisionLabel => UI.Title_Firmware_revision;
|
||||
public string CommentsLabel => UI.Title_Comments;
|
||||
public string AaruMetadataLabel => UI.Title_Existing_Aaru_Metadata_sidecar;
|
||||
public string FromImageLabel => UI.Title_From_image;
|
||||
public string ResumeFileLabel => UI.Title_Existing_resume_file;
|
||||
public string StartLabel => UI.ButtonLabel_Start;
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
public string StopLabel => UI.ButtonLabel_Stop;
|
||||
|
||||
public string Title
|
||||
{
|
||||
get => _title;
|
||||
set => this.RaiseAndSetIfChanged(ref _title, value);
|
||||
}
|
||||
|
||||
public string SourceText
|
||||
{
|
||||
get => _sourceText;
|
||||
set => this.RaiseAndSetIfChanged(ref _sourceText, value);
|
||||
}
|
||||
|
||||
public string SourceImageLabel => UI.Source_image;
|
||||
public string OutputFormatLabel => UI.Output_format;
|
||||
public string ChooseLabel => UI.ButtonLabel_Choose;
|
||||
public string SectorsLabel => UI.How_many_sectors_to_convert_at_once;
|
||||
public string ForceLabel => UI.Continue_conversion_even_if_data_lost;
|
||||
public string CreatorLabel => UI.Who_person_created_the_image;
|
||||
public string GetFromSourceImageLabel => UI.ButtonLabel_Get_from_source_image;
|
||||
public string MetadataLabel => UI.Title_Metadata;
|
||||
public string MediaLabel => UI.Title_Media;
|
||||
public string TitleLabel => UI.Title_Title;
|
||||
public string ManufacturerLabel => UI.Title_Manufacturer;
|
||||
public string ModelLabel => UI.Title_Model;
|
||||
public string SerialNumberLabel => UI.Title_Serial_number;
|
||||
public string BarcodeLabel => UI.Title_Barcode;
|
||||
public string PartNumberLabel => UI.Title_Part_number;
|
||||
public string NumberInSequenceLabel => UI.Title_Number_in_sequence;
|
||||
public string LastMediaOfTheSequenceLabel => UI.Title_Last_media_of_the_sequence;
|
||||
public string DriveLabel => UI.Title_Drive;
|
||||
public string FirmwareRevisionLabel => UI.Title_Firmware_revision;
|
||||
public string CommentsLabel => UI.Title_Comments;
|
||||
public string AaruMetadataLabel => UI.Title_Existing_Aaru_Metadata_sidecar;
|
||||
public string FromImageLabel => UI.Title_From_image;
|
||||
public string ResumeFileLabel => UI.Title_Existing_resume_file;
|
||||
public string StartLabel => UI.ButtonLabel_Start;
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
public string StopLabel => UI.ButtonLabel_Stop;
|
||||
public ObservableCollection<ImagePluginModel> PluginsList { get; }
|
||||
|
||||
public ImagePluginModel SelectedPlugin
|
||||
{
|
||||
get => _selectedPlugin;
|
||||
set => this.RaiseAndSetIfChanged(ref _selectedPlugin, value);
|
||||
}
|
||||
public ICommand DestinationCommand { get; }
|
||||
public ICommand CreatorCommand { get; }
|
||||
public ICommand MediaTitleCommand { get; }
|
||||
public ICommand MediaManufacturerCommand { get; }
|
||||
public ICommand MediaModelCommand { get; }
|
||||
public ICommand MediaSerialNumberCommand { get; }
|
||||
public ICommand MediaBarcodeCommand { get; }
|
||||
public ICommand MediaPartNumberCommand { get; }
|
||||
public ICommand MediaSequenceCommand { get; }
|
||||
public ICommand LastMediaSequenceCommand { get; }
|
||||
public ICommand DriveManufacturerCommand { get; }
|
||||
public ICommand DriveModelCommand { get; }
|
||||
public ICommand DriveSerialNumberCommand { get; }
|
||||
public ICommand DriveFirmwareRevisionCommand { get; }
|
||||
public ICommand CommentsCommand { get; }
|
||||
public ICommand AaruMetadataFromImageCommand { get; }
|
||||
public ICommand AaruMetadataCommand { get; }
|
||||
public ICommand ResumeFileFromImageCommand { get; }
|
||||
public ICommand ResumeFileCommand { get; }
|
||||
public ICommand StartCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ICommand StopCommand { get; }
|
||||
|
||||
public string DestinationText
|
||||
{
|
||||
get => _destinationText;
|
||||
set => this.RaiseAndSetIfChanged(ref _destinationText, value);
|
||||
}
|
||||
|
||||
public bool OptionsVisible
|
||||
{
|
||||
get => _optionsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _optionsVisible, value);
|
||||
}
|
||||
|
||||
public double SectorsValue
|
||||
{
|
||||
get => _sectorsValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorsValue, value);
|
||||
}
|
||||
|
||||
public bool ForceChecked
|
||||
{
|
||||
get => _forceChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _forceChecked, value);
|
||||
}
|
||||
|
||||
public string CreatorText
|
||||
{
|
||||
get => _creatorText;
|
||||
set => this.RaiseAndSetIfChanged(ref _creatorText, value);
|
||||
}
|
||||
|
||||
public string MediaTitleText
|
||||
{
|
||||
get => _mediaTitleText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaTitleText, value);
|
||||
}
|
||||
|
||||
public string MediaManufacturerText
|
||||
{
|
||||
get => _mediaManufacturerText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaManufacturerText, value);
|
||||
}
|
||||
|
||||
public string MediaModelText
|
||||
{
|
||||
get => _mediaModelText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaModelText, value);
|
||||
}
|
||||
|
||||
public string MediaSerialNumberText
|
||||
{
|
||||
get => _mediaSerialNumberText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaSerialNumberText, value);
|
||||
}
|
||||
|
||||
public string MediaBarcodeText
|
||||
{
|
||||
get => _mediaBarcodeText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaBarcodeText, value);
|
||||
}
|
||||
|
||||
public string MediaPartNumberText
|
||||
{
|
||||
get => _mediaPartNumberText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaPartNumberText, value);
|
||||
}
|
||||
|
||||
public double MediaSequenceValue
|
||||
{
|
||||
get => _mediaSequenceValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaSequenceValue, value);
|
||||
}
|
||||
|
||||
public double LastMediaSequenceValue
|
||||
{
|
||||
get => _lastMediaSequenceValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _lastMediaSequenceValue, value);
|
||||
}
|
||||
|
||||
public string DriveManufacturerText
|
||||
{
|
||||
get => _driveManufacturerText;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveManufacturerText, value);
|
||||
}
|
||||
|
||||
public string DriveModelText
|
||||
{
|
||||
get => _driveModelText;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveModelText, value);
|
||||
}
|
||||
|
||||
public string DriveSerialNumberText
|
||||
{
|
||||
get => _driveSerialNumberText;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveSerialNumberText, value);
|
||||
}
|
||||
|
||||
public string DriveFirmwareRevisionText
|
||||
{
|
||||
get => _driveFirmwareRevisionText;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveFirmwareRevisionText, value);
|
||||
}
|
||||
|
||||
public string CommentsText
|
||||
{
|
||||
get => _commentsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _commentsText, value);
|
||||
}
|
||||
|
||||
public string MetadataJsonText
|
||||
{
|
||||
get => _metadataJsonText;
|
||||
set => this.RaiseAndSetIfChanged(ref _metadataJsonText, value);
|
||||
}
|
||||
|
||||
public string ResumeFileText
|
||||
{
|
||||
get => _resumeFileText;
|
||||
set => this.RaiseAndSetIfChanged(ref _resumeFileText, value);
|
||||
}
|
||||
|
||||
public bool ProgressVisible
|
||||
{
|
||||
get => _progressVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressVisible, value);
|
||||
}
|
||||
|
||||
public bool Progress1Visible
|
||||
{
|
||||
get => _progress1Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress1Visible, value);
|
||||
}
|
||||
|
||||
public string ProgressText
|
||||
{
|
||||
get => _progressText;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressText, value);
|
||||
}
|
||||
|
||||
public double ProgressValue
|
||||
{
|
||||
get => _progressValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressValue, value);
|
||||
}
|
||||
|
||||
public double ProgressMaxValue
|
||||
{
|
||||
get => _progressMaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressMaxValue, value);
|
||||
}
|
||||
|
||||
public bool ProgressIndeterminate
|
||||
{
|
||||
get => _progressIndeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressIndeterminate, value);
|
||||
}
|
||||
|
||||
public bool Progress2Visible
|
||||
{
|
||||
get => _progress2Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Visible, value);
|
||||
}
|
||||
|
||||
public string Progress2Text
|
||||
{
|
||||
get => _progress2Text;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Text, value);
|
||||
}
|
||||
|
||||
public double Progress2Value
|
||||
{
|
||||
get => _progress2Value;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Value, value);
|
||||
}
|
||||
|
||||
public double Progress2MaxValue
|
||||
{
|
||||
get => _progress2MaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2MaxValue, value);
|
||||
}
|
||||
|
||||
public bool Progress2Indeterminate
|
||||
{
|
||||
get => _progress2Indeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Indeterminate, value);
|
||||
}
|
||||
|
||||
public bool StartVisible
|
||||
{
|
||||
get => _startVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _startVisible, value);
|
||||
}
|
||||
|
||||
public bool CloseVisible
|
||||
{
|
||||
get => _closeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeVisible, value);
|
||||
}
|
||||
|
||||
public bool StopVisible
|
||||
{
|
||||
get => _stopVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopVisible, value);
|
||||
}
|
||||
|
||||
public bool StopEnabled
|
||||
{
|
||||
get => _stopEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopEnabled, value);
|
||||
}
|
||||
|
||||
public bool CreatorVisible
|
||||
{
|
||||
get => _creatorVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _creatorVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaTitleVisible
|
||||
{
|
||||
get => _mediaTitleVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaTitleVisible, value);
|
||||
}
|
||||
|
||||
public bool CommentsVisible
|
||||
{
|
||||
get => _commentsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _commentsVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaManufacturerVisible
|
||||
{
|
||||
get => _mediaManufacturerVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaManufacturerVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaModelVisible
|
||||
{
|
||||
get => _mediaModelVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaModelVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaSerialNumberVisible
|
||||
{
|
||||
get => _mediaSerialNumberVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaSerialNumberVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaBarcodeVisible
|
||||
{
|
||||
get => _mediaBarcodeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaBarcodeVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaPartNumberVisible
|
||||
{
|
||||
get => _mediaPartNumberVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaPartNumberVisible, value);
|
||||
}
|
||||
|
||||
public bool MediaSequenceVisible
|
||||
{
|
||||
get => _mediaSequenceVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaSequenceVisible, value);
|
||||
}
|
||||
|
||||
public bool LastMediaSequenceVisible
|
||||
{
|
||||
get => _lastMediaSequenceVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _lastMediaSequenceVisible, value);
|
||||
}
|
||||
|
||||
public bool DriveManufacturerVisible
|
||||
{
|
||||
get => _driveManufacturerVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveManufacturerVisible, value);
|
||||
}
|
||||
|
||||
public bool DriveModelVisible
|
||||
{
|
||||
get => _driveModelVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveModelVisible, value);
|
||||
}
|
||||
|
||||
public bool DriveSerialNumberVisible
|
||||
{
|
||||
get => _driveSerialNumberVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveSerialNumberVisible, value);
|
||||
}
|
||||
|
||||
public bool DriveFirmwareRevisionVisible
|
||||
{
|
||||
get => _driveFirmwareRevisionVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _driveFirmwareRevisionVisible, value);
|
||||
}
|
||||
|
||||
public bool AaruMetadataFromImageVisible
|
||||
{
|
||||
get => _aaruMetadataFromImageVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _aaruMetadataFromImageVisible, value);
|
||||
}
|
||||
|
||||
public bool ResumeFileFromImageVisible
|
||||
{
|
||||
get => _resumeFileFromImageVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _resumeFileFromImageVisible, value);
|
||||
}
|
||||
|
||||
public bool DestinationEnabled
|
||||
{
|
||||
get => _destinationEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _destinationEnabled, value);
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Task> DestinationCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CreatorCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> MediaTitleCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> MediaManufacturerCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> MediaModelCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> MediaSerialNumberCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> MediaBarcodeCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> MediaPartNumberCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> MediaSequenceCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> LastMediaSequenceCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> DriveManufacturerCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> DriveModelCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> DriveSerialNumberCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> DriveFirmwareRevisionCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CommentsCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> AaruMetadataFromImageCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> AaruMetadataCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> ResumeFileFromImageCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> ResumeFileCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> StartCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StopCommand { get; }
|
||||
|
||||
public bool FormatReadOnly
|
||||
{
|
||||
get => _formatReadOnly;
|
||||
set => this.RaiseAndSetIfChanged(ref _formatReadOnly, value);
|
||||
}
|
||||
|
||||
public bool DestinationVisible
|
||||
{
|
||||
get => _destinationVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _destinationVisible, value);
|
||||
}
|
||||
|
||||
async Task ExecuteStartCommand()
|
||||
async Task StartAsync()
|
||||
{
|
||||
if(SelectedPlugin is null)
|
||||
{
|
||||
@@ -1894,9 +1612,9 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
Statistics.AddCommand("convert-image");
|
||||
}
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
|
||||
internal void ExecuteStopCommand()
|
||||
internal void Stop()
|
||||
{
|
||||
_cancel = true;
|
||||
StopEnabled = false;
|
||||
@@ -2036,7 +1754,7 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
grpOptions.Content = stkImageOptions;
|
||||
}
|
||||
*/
|
||||
async Task ExecuteDestinationCommand()
|
||||
async Task DestinationAsync()
|
||||
{
|
||||
if(SelectedPlugin is null) return;
|
||||
|
||||
@@ -2065,41 +1783,41 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
DestinationText += SelectedPlugin.Plugin.KnownExtensions.First();
|
||||
}
|
||||
|
||||
void ExecuteCreatorCommand() => CreatorText = _inputFormat.Info.Creator;
|
||||
void Creator() => CreatorText = _inputFormat.Info.Creator;
|
||||
|
||||
void ExecuteMediaTitleCommand() => MediaTitleText = _inputFormat.Info.MediaTitle;
|
||||
void MediaTitle() => MediaTitleText = _inputFormat.Info.MediaTitle;
|
||||
|
||||
void ExecuteCommentsCommand() => CommentsText = _inputFormat.Info.Comments;
|
||||
void Comments() => CommentsText = _inputFormat.Info.Comments;
|
||||
|
||||
void ExecuteMediaManufacturerCommand() => MediaManufacturerText = _inputFormat.Info.MediaManufacturer;
|
||||
void MediaManufacturer() => MediaManufacturerText = _inputFormat.Info.MediaManufacturer;
|
||||
|
||||
void ExecuteMediaModelCommand() => MediaModelText = _inputFormat.Info.MediaModel;
|
||||
void MediaModel() => MediaModelText = _inputFormat.Info.MediaModel;
|
||||
|
||||
void ExecuteMediaSerialNumberCommand() => MediaSerialNumberText = _inputFormat.Info.MediaSerialNumber;
|
||||
void MediaSerialNumber() => MediaSerialNumberText = _inputFormat.Info.MediaSerialNumber;
|
||||
|
||||
void ExecuteMediaBarcodeCommand() => MediaBarcodeText = _inputFormat.Info.MediaBarcode;
|
||||
void MediaBarcode() => MediaBarcodeText = _inputFormat.Info.MediaBarcode;
|
||||
|
||||
void ExecuteMediaPartNumberCommand() => MediaPartNumberText = _inputFormat.Info.MediaPartNumber;
|
||||
void MediaPartNumber() => MediaPartNumberText = _inputFormat.Info.MediaPartNumber;
|
||||
|
||||
void ExecuteMediaSequenceCommand() => MediaSequenceValue = _inputFormat.Info.MediaSequence;
|
||||
void MediaSequence() => MediaSequenceValue = _inputFormat.Info.MediaSequence;
|
||||
|
||||
void ExecuteLastMediaSequenceCommand() => LastMediaSequenceValue = _inputFormat.Info.LastMediaSequence;
|
||||
void LastMediaSequence() => LastMediaSequenceValue = _inputFormat.Info.LastMediaSequence;
|
||||
|
||||
void ExecuteDriveManufacturerCommand() => DriveManufacturerText = _inputFormat.Info.DriveManufacturer;
|
||||
void DriveManufacturer() => DriveManufacturerText = _inputFormat.Info.DriveManufacturer;
|
||||
|
||||
void ExecuteDriveModelCommand() => DriveModelText = _inputFormat.Info.DriveModel;
|
||||
void DriveModel() => DriveModelText = _inputFormat.Info.DriveModel;
|
||||
|
||||
void ExecuteDriveSerialNumberCommand() => DriveSerialNumberText = _inputFormat.Info.DriveSerialNumber;
|
||||
void DriveSerialNumber() => DriveSerialNumberText = _inputFormat.Info.DriveSerialNumber;
|
||||
|
||||
void ExecuteDriveFirmwareRevisionCommand() => DriveFirmwareRevisionText = _inputFormat.Info.DriveFirmwareRevision;
|
||||
void DriveFirmwareRevision() => DriveFirmwareRevisionText = _inputFormat.Info.DriveFirmwareRevision;
|
||||
|
||||
void ExecuteAaruMetadataFromImageCommand()
|
||||
void AaruMetadataFromImage()
|
||||
{
|
||||
MetadataJsonText = UI._From_image_;
|
||||
_aaruMetadata = _inputFormat.AaruMetadata;
|
||||
}
|
||||
|
||||
async Task ExecuteAaruMetadataCommand()
|
||||
async Task AaruMetadataAsync()
|
||||
{
|
||||
_aaruMetadata = null;
|
||||
MetadataJsonText = "";
|
||||
@@ -2138,13 +1856,13 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
void ExecuteResumeFileFromImageCommand()
|
||||
void ResumeFileFromImage()
|
||||
{
|
||||
ResumeFileText = UI._From_image_;
|
||||
_dumpHardware = _inputFormat.DumpHardware;
|
||||
}
|
||||
|
||||
async Task ExecuteResumeFileCommand()
|
||||
async Task ResumeFileAsync()
|
||||
{
|
||||
_dumpHardware = null;
|
||||
ResumeFileText = "";
|
||||
|
||||
@@ -34,8 +34,8 @@ using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Reactive;
|
||||
using System.Threading;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Core;
|
||||
using Aaru.Gui.Models;
|
||||
@@ -43,53 +43,84 @@ using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Threading;
|
||||
using ReactiveUI;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class ImageEntropyViewModel : ViewModelBase
|
||||
public sealed partial class ImageEntropyViewModel : ViewModelBase
|
||||
{
|
||||
readonly IMediaImage _inputFormat;
|
||||
readonly Window _view;
|
||||
bool _closeVisible;
|
||||
bool _duplicatedSectorsChecked;
|
||||
bool _duplicatedSectorsEnabled;
|
||||
EntropyResults _entropy;
|
||||
string _mediaEntropyText;
|
||||
bool _mediaEntropyVisible;
|
||||
string _mediaUniqueSectorsText;
|
||||
bool _mediaUniqueSectorsVisible;
|
||||
bool _optionsVisible;
|
||||
bool _progress1Visible;
|
||||
bool _progress2Indeterminate;
|
||||
double _progress2Max;
|
||||
string _progress2Text;
|
||||
double _progress2Value;
|
||||
bool _progress2Visible;
|
||||
bool _progressIndeterminate;
|
||||
double _progressMax;
|
||||
string _progressText;
|
||||
double _progressValue;
|
||||
bool _progressVisible;
|
||||
bool _resultsVisible;
|
||||
bool _separatedTracksChecked;
|
||||
bool _separatedTracksEnabled;
|
||||
bool _separatedTracksVisible;
|
||||
bool _startVisible;
|
||||
bool _stopVisible;
|
||||
EntropyResults[] _tracksEntropy;
|
||||
bool _wholeDiscChecked;
|
||||
bool _wholeDiscEnabled;
|
||||
bool _wholeDiscVisible;
|
||||
[ObservableProperty]
|
||||
bool _closeVisible;
|
||||
[ObservableProperty]
|
||||
bool _duplicatedSectorsChecked;
|
||||
[ObservableProperty]
|
||||
bool _duplicatedSectorsEnabled;
|
||||
[ObservableProperty]
|
||||
EntropyResults _entropy;
|
||||
[ObservableProperty]
|
||||
string _mediaEntropyText;
|
||||
[ObservableProperty]
|
||||
bool _mediaEntropyVisible;
|
||||
[ObservableProperty]
|
||||
string _mediaUniqueSectorsText;
|
||||
[ObservableProperty]
|
||||
bool _mediaUniqueSectorsVisible;
|
||||
[ObservableProperty]
|
||||
bool _optionsVisible;
|
||||
[ObservableProperty]
|
||||
bool _progress1Visible;
|
||||
[ObservableProperty]
|
||||
bool _progress2Indeterminate;
|
||||
[ObservableProperty]
|
||||
double _progress2Max;
|
||||
[ObservableProperty]
|
||||
string _progress2Text;
|
||||
[ObservableProperty]
|
||||
double _progress2Value;
|
||||
[ObservableProperty]
|
||||
bool _progress2Visible;
|
||||
[ObservableProperty]
|
||||
bool _progressIndeterminate;
|
||||
[ObservableProperty]
|
||||
double _progressMax;
|
||||
[ObservableProperty]
|
||||
string _progressText;
|
||||
[ObservableProperty]
|
||||
double _progressValue;
|
||||
[ObservableProperty]
|
||||
bool _progressVisible;
|
||||
[ObservableProperty]
|
||||
bool _resultsVisible;
|
||||
[ObservableProperty]
|
||||
bool _separatedTracksChecked;
|
||||
[ObservableProperty]
|
||||
bool _separatedTracksEnabled;
|
||||
[ObservableProperty]
|
||||
bool _separatedTracksVisible;
|
||||
[ObservableProperty]
|
||||
bool _startVisible;
|
||||
[ObservableProperty]
|
||||
bool _stopVisible;
|
||||
[ObservableProperty]
|
||||
EntropyResults[] _tracksEntropy;
|
||||
[ObservableProperty]
|
||||
bool _wholeDiscChecked;
|
||||
[ObservableProperty]
|
||||
bool _wholeDiscEnabled;
|
||||
[ObservableProperty]
|
||||
bool _wholeDiscVisible;
|
||||
|
||||
public ImageEntropyViewModel(IMediaImage inputFormat, Window view)
|
||||
{
|
||||
_inputFormat = inputFormat;
|
||||
_view = view;
|
||||
TrackEntropy = [];
|
||||
StartCommand = ReactiveCommand.Create(ExecuteStartCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
StopCommand = ReactiveCommand.Create(ExecuteStopCommand);
|
||||
StartCommand = new RelayCommand(Start);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
StopCommand = new RelayCommand(Stop);
|
||||
OptionsVisible = true;
|
||||
DuplicatedSectorsChecked = true;
|
||||
SeparatedTracksChecked = true;
|
||||
@@ -121,183 +152,15 @@ public sealed class ImageEntropyViewModel : ViewModelBase
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
public string StopLabel => UI.ButtonLabel_Stop;
|
||||
|
||||
public bool SeparatedTracksVisible
|
||||
{
|
||||
get => _separatedTracksVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _separatedTracksVisible, value);
|
||||
}
|
||||
|
||||
public bool WholeDiscVisible
|
||||
{
|
||||
get => _wholeDiscVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _wholeDiscVisible, value);
|
||||
}
|
||||
|
||||
public bool SeparatedTracksChecked
|
||||
{
|
||||
get => _separatedTracksChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _separatedTracksChecked, value);
|
||||
}
|
||||
|
||||
public bool WholeDiscChecked
|
||||
{
|
||||
get => _wholeDiscChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _wholeDiscChecked, value);
|
||||
}
|
||||
|
||||
public bool DuplicatedSectorsEnabled
|
||||
{
|
||||
get => _duplicatedSectorsEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _duplicatedSectorsEnabled, value);
|
||||
}
|
||||
|
||||
public bool SeparatedTracksEnabled
|
||||
{
|
||||
get => _separatedTracksEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _separatedTracksEnabled, value);
|
||||
}
|
||||
|
||||
public bool WholeDiscEnabled
|
||||
{
|
||||
get => _wholeDiscEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _wholeDiscEnabled, value);
|
||||
}
|
||||
|
||||
public bool CloseVisible
|
||||
{
|
||||
get => _closeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeVisible, value);
|
||||
}
|
||||
|
||||
public bool StartVisible
|
||||
{
|
||||
get => _startVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _startVisible, value);
|
||||
}
|
||||
|
||||
public bool StopVisible
|
||||
{
|
||||
get => _stopVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopVisible, value);
|
||||
}
|
||||
|
||||
public bool ProgressVisible
|
||||
{
|
||||
get => _progressVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressVisible, value);
|
||||
}
|
||||
|
||||
public bool DuplicatedSectorsChecked
|
||||
{
|
||||
get => _duplicatedSectorsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _duplicatedSectorsChecked, value);
|
||||
}
|
||||
|
||||
public bool OptionsVisible
|
||||
{
|
||||
get => _optionsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _optionsVisible, value);
|
||||
}
|
||||
|
||||
public bool ResultsVisible
|
||||
{
|
||||
get => _resultsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _resultsVisible, value);
|
||||
}
|
||||
|
||||
public string MediaEntropyText
|
||||
{
|
||||
get => _mediaEntropyText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaEntropyText, value);
|
||||
}
|
||||
|
||||
public bool MediaEntropyVisible
|
||||
{
|
||||
get => _mediaEntropyVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaEntropyVisible, value);
|
||||
}
|
||||
|
||||
public string MediaUniqueSectorsText
|
||||
{
|
||||
get => _mediaUniqueSectorsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaUniqueSectorsText, value);
|
||||
}
|
||||
|
||||
public bool MediaUniqueSectorsVisible
|
||||
{
|
||||
get => _mediaUniqueSectorsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _mediaUniqueSectorsVisible, value);
|
||||
}
|
||||
|
||||
public bool Progress1Visible
|
||||
{
|
||||
get => _progress1Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress1Visible, value);
|
||||
}
|
||||
|
||||
public bool Progress2Visible
|
||||
{
|
||||
get => _progress2Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Visible, value);
|
||||
}
|
||||
|
||||
public string ProgressText
|
||||
{
|
||||
get => _progressText;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressText, value);
|
||||
}
|
||||
|
||||
public bool ProgressIndeterminate
|
||||
{
|
||||
get => _progressIndeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressIndeterminate, value);
|
||||
}
|
||||
|
||||
public double ProgressMax
|
||||
{
|
||||
get => _progressMax;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressMax, value);
|
||||
}
|
||||
|
||||
public double ProgressValue
|
||||
{
|
||||
get => _progressValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressValue, value);
|
||||
}
|
||||
|
||||
public string Progress2Text
|
||||
{
|
||||
get => _progress2Text;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Text, value);
|
||||
}
|
||||
|
||||
public bool Progress2Indeterminate
|
||||
{
|
||||
get => _progress2Indeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Indeterminate, value);
|
||||
}
|
||||
|
||||
public double Progress2Max
|
||||
{
|
||||
get => _progress2Max;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Max, value);
|
||||
}
|
||||
|
||||
public double Progress2Value
|
||||
{
|
||||
get => _progress2Value;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Value, value);
|
||||
}
|
||||
|
||||
[JetBrains.Annotations.NotNull]
|
||||
public string Title => UI.Title_Calculating_entropy;
|
||||
|
||||
public ObservableCollection<TrackEntropyModel> TrackEntropy { get; }
|
||||
public ReactiveCommand<Unit, Unit> StartCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StopCommand { get; }
|
||||
public ICommand StartCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ICommand StopCommand { get; }
|
||||
|
||||
void ExecuteStartCommand()
|
||||
void Start()
|
||||
{
|
||||
var entropyCalculator = new Entropy(false, _inputFormat);
|
||||
entropyCalculator.InitProgressEvent += InitProgress;
|
||||
@@ -388,9 +251,9 @@ public sealed class ImageEntropyViewModel : ViewModelBase
|
||||
MediaUniqueSectorsVisible = true;
|
||||
}
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
|
||||
internal void ExecuteStopCommand() => throw new NotImplementedException();
|
||||
internal void Stop() => throw new NotImplementedException();
|
||||
|
||||
void InitProgress() => Progress1Visible = true;
|
||||
|
||||
|
||||
@@ -34,11 +34,11 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Reactive;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.AaruMetadata;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Core;
|
||||
@@ -47,37 +47,58 @@ using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using Avalonia.Threading;
|
||||
using ReactiveUI;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class ImageSidecarViewModel : ViewModelBase
|
||||
public sealed partial class ImageSidecarViewModel : ViewModelBase
|
||||
{
|
||||
readonly Encoding _encoding;
|
||||
readonly Guid _filterId;
|
||||
readonly string _imageSource;
|
||||
readonly IMediaImage _inputFormat;
|
||||
readonly Window _view;
|
||||
bool _closeVisible;
|
||||
bool _destinationEnabled;
|
||||
string _destinationText;
|
||||
bool _progress1Visible;
|
||||
bool _progress2Indeterminate;
|
||||
double _progress2MaxValue;
|
||||
string _progress2Text;
|
||||
double _progress2Value;
|
||||
bool _progress2Visible;
|
||||
bool _progressIndeterminate;
|
||||
double _progressMaxValue;
|
||||
string _progressText;
|
||||
double _progressValue;
|
||||
bool _progressVisible;
|
||||
Sidecar _sidecarClass;
|
||||
bool _startVisible;
|
||||
string _statusText;
|
||||
bool _statusVisible;
|
||||
bool _stopEnabled;
|
||||
bool _stopVisible;
|
||||
[ObservableProperty]
|
||||
bool _closeVisible;
|
||||
[ObservableProperty]
|
||||
bool _destinationEnabled;
|
||||
[ObservableProperty]
|
||||
string _destinationText;
|
||||
[ObservableProperty]
|
||||
bool _progress1Visible;
|
||||
[ObservableProperty]
|
||||
bool _progress2Indeterminate;
|
||||
[ObservableProperty]
|
||||
double _progress2MaxValue;
|
||||
[ObservableProperty]
|
||||
string _progress2Text;
|
||||
[ObservableProperty]
|
||||
double _progress2Value;
|
||||
[ObservableProperty]
|
||||
bool _progress2Visible;
|
||||
[ObservableProperty]
|
||||
bool _progressIndeterminate;
|
||||
[ObservableProperty]
|
||||
double _progressMaxValue;
|
||||
[ObservableProperty]
|
||||
string _progressText;
|
||||
[ObservableProperty]
|
||||
double _progressValue;
|
||||
[ObservableProperty]
|
||||
bool _progressVisible;
|
||||
[ObservableProperty]
|
||||
Sidecar _sidecarClass;
|
||||
[ObservableProperty]
|
||||
bool _startVisible;
|
||||
[ObservableProperty]
|
||||
string _statusText;
|
||||
[ObservableProperty]
|
||||
bool _statusVisible;
|
||||
[ObservableProperty]
|
||||
bool _stopEnabled;
|
||||
[ObservableProperty]
|
||||
bool _stopVisible;
|
||||
|
||||
public ImageSidecarViewModel(IMediaImage inputFormat, string imageSource, Guid filterId, Encoding encoding,
|
||||
Window view)
|
||||
@@ -94,10 +115,10 @@ public sealed class ImageSidecarViewModel : ViewModelBase
|
||||
DestinationEnabled = true;
|
||||
StartVisible = true;
|
||||
CloseVisible = true;
|
||||
DestinationCommand = ReactiveCommand.Create(ExecuteDestinationCommand);
|
||||
StartCommand = ReactiveCommand.Create(ExecuteStartCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
StopCommand = ReactiveCommand.Create(ExecuteStopCommand);
|
||||
DestinationCommand = new AsyncRelayCommand(DestinationAsync);
|
||||
StartCommand = new RelayCommand(Start);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
StopCommand = new RelayCommand(Stop);
|
||||
}
|
||||
|
||||
public string DestinationFileLabel => UI.Title_Destination_file;
|
||||
@@ -106,127 +127,13 @@ public sealed class ImageSidecarViewModel : ViewModelBase
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
public string StopLabel => UI.ButtonLabel_Stop;
|
||||
|
||||
public string Title { get; }
|
||||
public ReactiveCommand<Unit, Task> DestinationCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StartCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StopCommand { get; }
|
||||
public string Title { get; }
|
||||
public ICommand DestinationCommand { get; }
|
||||
public ICommand StartCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ICommand StopCommand { get; }
|
||||
|
||||
public bool ProgressIndeterminate
|
||||
{
|
||||
get => _progressIndeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressIndeterminate, value);
|
||||
}
|
||||
|
||||
public bool ProgressVisible
|
||||
{
|
||||
get => _progressVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressVisible, value);
|
||||
}
|
||||
|
||||
public bool Progress1Visible
|
||||
{
|
||||
get => _progress1Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress1Visible, value);
|
||||
}
|
||||
|
||||
public bool Progress2Visible
|
||||
{
|
||||
get => _progress2Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Visible, value);
|
||||
}
|
||||
|
||||
public bool Progress2Indeterminate
|
||||
{
|
||||
get => _progress2Indeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Indeterminate, value);
|
||||
}
|
||||
|
||||
public double ProgressMaxValue
|
||||
{
|
||||
get => _progressMaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressMaxValue, value);
|
||||
}
|
||||
|
||||
public double Progress2MaxValue
|
||||
{
|
||||
get => _progress2MaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2MaxValue, value);
|
||||
}
|
||||
|
||||
public string ProgressText
|
||||
{
|
||||
get => _progressText;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressText, value);
|
||||
}
|
||||
|
||||
public double ProgressValue
|
||||
{
|
||||
get => _progressValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressValue, value);
|
||||
}
|
||||
|
||||
public double Progress2Value
|
||||
{
|
||||
get => _progress2Value;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Value, value);
|
||||
}
|
||||
|
||||
public string Progress2Text
|
||||
{
|
||||
get => _progress2Text;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Text, value);
|
||||
}
|
||||
|
||||
public string DestinationText
|
||||
{
|
||||
get => _destinationText;
|
||||
set => this.RaiseAndSetIfChanged(ref _destinationText, value);
|
||||
}
|
||||
|
||||
public bool DestinationEnabled
|
||||
{
|
||||
get => _destinationEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _destinationEnabled, value);
|
||||
}
|
||||
|
||||
public string StatusText
|
||||
{
|
||||
get => _statusText;
|
||||
set => this.RaiseAndSetIfChanged(ref _statusText, value);
|
||||
}
|
||||
|
||||
public bool StatusVisible
|
||||
{
|
||||
get => _statusVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _statusVisible, value);
|
||||
}
|
||||
|
||||
public bool StartVisible
|
||||
{
|
||||
get => _startVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _startVisible, value);
|
||||
}
|
||||
|
||||
public bool CloseVisible
|
||||
{
|
||||
get => _closeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeVisible, value);
|
||||
}
|
||||
|
||||
public bool StopEnabled
|
||||
{
|
||||
get => _stopEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopEnabled, value);
|
||||
}
|
||||
|
||||
public bool StopVisible
|
||||
{
|
||||
get => _stopVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopVisible, value);
|
||||
}
|
||||
|
||||
void ExecuteStartCommand() => new Thread(DoWork).Start();
|
||||
void Start() => new Thread(DoWork).Start();
|
||||
|
||||
[SuppressMessage("ReSharper", "AsyncVoidMethod")]
|
||||
async void DoWork()
|
||||
@@ -313,16 +220,16 @@ public sealed class ImageSidecarViewModel : ViewModelBase
|
||||
[SuppressMessage("ReSharper", "AsyncVoidMethod")]
|
||||
async void UpdateStatus(string text) => await Dispatcher.UIThread.InvokeAsync(() => { StatusText = text; });
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
|
||||
void ExecuteStopCommand()
|
||||
void Stop()
|
||||
{
|
||||
ProgressText = Localization.Core.Aborting;
|
||||
StopEnabled = false;
|
||||
_sidecarClass.Abort();
|
||||
}
|
||||
|
||||
async Task ExecuteDestinationCommand()
|
||||
async Task DestinationAsync()
|
||||
{
|
||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
||||
{
|
||||
|
||||
@@ -35,8 +35,8 @@ using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reactive;
|
||||
using System.Threading;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.CommonTypes.Structs;
|
||||
using Aaru.Core;
|
||||
@@ -45,61 +45,99 @@ using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Threading;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Humanizer;
|
||||
using Humanizer.Localisation;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class ImageVerifyViewModel : ViewModelBase
|
||||
public sealed partial class ImageVerifyViewModel : ViewModelBase
|
||||
{
|
||||
readonly IMediaImage _inputFormat;
|
||||
readonly Window _view;
|
||||
bool _cancel;
|
||||
bool _closeVisible;
|
||||
string _imageResultText;
|
||||
bool _imageResultVisible;
|
||||
bool _optionsVisible;
|
||||
bool _progress2Indeterminate;
|
||||
double _progress2MaxValue;
|
||||
string _progress2Text;
|
||||
double _progress2Value;
|
||||
bool _progress2Visible;
|
||||
bool _progressIndeterminate;
|
||||
double _progressMaxValue;
|
||||
string _progressText;
|
||||
double _progressValue;
|
||||
bool _progressVisible;
|
||||
bool _resultsVisible;
|
||||
string _sectorErrorsText;
|
||||
bool _sectorErrorsVisible;
|
||||
string _sectorsErrorsAllText;
|
||||
bool _sectorsErrorsAllVisible;
|
||||
bool _sectorSummaryVisible;
|
||||
string _sectorsUnknownAllText;
|
||||
bool _sectorsUnknownAllVisible;
|
||||
string _sectorsUnknownsText;
|
||||
bool _sectorsUnknownsVisible;
|
||||
bool _startVisible;
|
||||
bool _stopEnabled;
|
||||
bool _stopVisible;
|
||||
string _totalSectorErrorsText;
|
||||
string _totalSectorErrorsUnknownsText;
|
||||
string _totalSectorsText;
|
||||
string _totalSectorUnknownsText;
|
||||
bool _verifyImageChecked;
|
||||
bool _verifyImageEnabled;
|
||||
bool _verifySectorsChecked;
|
||||
bool _verifySectorsEnabled;
|
||||
bool _verifySectorsVisible;
|
||||
[ObservableProperty]
|
||||
bool _cancel;
|
||||
[ObservableProperty]
|
||||
bool _closeVisible;
|
||||
[ObservableProperty]
|
||||
string _imageResultText;
|
||||
[ObservableProperty]
|
||||
bool _imageResultVisible;
|
||||
[ObservableProperty]
|
||||
bool _optionsVisible;
|
||||
[ObservableProperty]
|
||||
bool _progress2Indeterminate;
|
||||
[ObservableProperty]
|
||||
double _progress2MaxValue;
|
||||
[ObservableProperty]
|
||||
string _progress2Text;
|
||||
[ObservableProperty]
|
||||
double _progress2Value;
|
||||
[ObservableProperty]
|
||||
bool _progress2Visible;
|
||||
[ObservableProperty]
|
||||
bool _progressIndeterminate;
|
||||
[ObservableProperty]
|
||||
double _progressMaxValue;
|
||||
[ObservableProperty]
|
||||
string _progressText;
|
||||
[ObservableProperty]
|
||||
double _progressValue;
|
||||
[ObservableProperty]
|
||||
bool _progressVisible;
|
||||
[ObservableProperty]
|
||||
bool _resultsVisible;
|
||||
[ObservableProperty]
|
||||
string _sectorErrorsText;
|
||||
[ObservableProperty]
|
||||
bool _sectorErrorsVisible;
|
||||
[ObservableProperty]
|
||||
string _sectorsErrorsAllText;
|
||||
[ObservableProperty]
|
||||
bool _sectorsErrorsAllVisible;
|
||||
[ObservableProperty]
|
||||
bool _sectorSummaryVisible;
|
||||
[ObservableProperty]
|
||||
string _sectorsUnknownAllText;
|
||||
[ObservableProperty]
|
||||
bool _sectorsUnknownAllVisible;
|
||||
[ObservableProperty]
|
||||
string _sectorsUnknownsText;
|
||||
[ObservableProperty]
|
||||
bool _sectorsUnknownsVisible;
|
||||
[ObservableProperty]
|
||||
bool _startVisible;
|
||||
[ObservableProperty]
|
||||
bool _stopEnabled;
|
||||
[ObservableProperty]
|
||||
bool _stopVisible;
|
||||
[ObservableProperty]
|
||||
string _totalSectorErrorsText;
|
||||
[ObservableProperty]
|
||||
string _totalSectorErrorsUnknownsText;
|
||||
[ObservableProperty]
|
||||
string _totalSectorsText;
|
||||
[ObservableProperty]
|
||||
string _totalSectorUnknownsText;
|
||||
[ObservableProperty]
|
||||
bool _verifyImageChecked;
|
||||
[ObservableProperty]
|
||||
bool _verifyImageEnabled;
|
||||
[ObservableProperty]
|
||||
bool _verifySectorsChecked;
|
||||
[ObservableProperty]
|
||||
bool _verifySectorsEnabled;
|
||||
[ObservableProperty]
|
||||
bool _verifySectorsVisible;
|
||||
|
||||
public ImageVerifyViewModel(IMediaImage inputFormat, Window view)
|
||||
{
|
||||
_view = view;
|
||||
StartCommand = ReactiveCommand.Create(ExecuteStartCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
StopCommand = ReactiveCommand.Create(ExecuteStopCommand);
|
||||
StartCommand = new RelayCommand(Start);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
StopCommand = new RelayCommand(Stop);
|
||||
_inputFormat = inputFormat;
|
||||
_cancel = false;
|
||||
ErrorList = [];
|
||||
@@ -120,227 +158,12 @@ public sealed class ImageVerifyViewModel : ViewModelBase
|
||||
|
||||
public ObservableCollection<LbaModel> ErrorList { get; }
|
||||
public ObservableCollection<LbaModel> UnknownList { get; }
|
||||
public ReactiveCommand<Unit, Unit> StartCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StopCommand { get; }
|
||||
public ICommand StartCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ICommand StopCommand { get; }
|
||||
|
||||
public bool VerifyImageEnabled
|
||||
{
|
||||
get => _verifyImageEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifyImageEnabled, value);
|
||||
}
|
||||
|
||||
public bool VerifySectorsEnabled
|
||||
{
|
||||
get => _verifySectorsEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifySectorsEnabled, value);
|
||||
}
|
||||
|
||||
public bool VerifySectorsVisible
|
||||
{
|
||||
get => _verifySectorsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifySectorsVisible, value);
|
||||
}
|
||||
|
||||
public double ProgressMaxValue
|
||||
{
|
||||
get => _progressMaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressMaxValue, value);
|
||||
}
|
||||
|
||||
public bool VerifyImageChecked
|
||||
{
|
||||
get => _verifyImageChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifyImageChecked, value);
|
||||
}
|
||||
|
||||
public bool ProgressIndeterminate
|
||||
{
|
||||
get => _progressIndeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressIndeterminate, value);
|
||||
}
|
||||
|
||||
public bool ImageResultVisible
|
||||
{
|
||||
get => _imageResultVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _imageResultVisible, value);
|
||||
}
|
||||
|
||||
public string ImageResultText
|
||||
{
|
||||
get => _imageResultText;
|
||||
set => this.RaiseAndSetIfChanged(ref _imageResultText, value);
|
||||
}
|
||||
|
||||
public bool VerifySectorsChecked
|
||||
{
|
||||
get => _verifySectorsChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _verifySectorsChecked, value);
|
||||
}
|
||||
|
||||
public bool Progress2Visible
|
||||
{
|
||||
get => _progress2Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Visible, value);
|
||||
}
|
||||
|
||||
public bool Progress2Indeterminate
|
||||
{
|
||||
get => _progress2Indeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Indeterminate, value);
|
||||
}
|
||||
|
||||
public double Progress2MaxValue
|
||||
{
|
||||
get => _progress2MaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2MaxValue, value);
|
||||
}
|
||||
|
||||
public string ProgressText
|
||||
{
|
||||
get => _progressText;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressText, value);
|
||||
}
|
||||
|
||||
public double ProgressValue
|
||||
{
|
||||
get => _progressValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressValue, value);
|
||||
}
|
||||
|
||||
public double Progress2Value
|
||||
{
|
||||
get => _progress2Value;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Value, value);
|
||||
}
|
||||
|
||||
public string Progress2Text
|
||||
{
|
||||
get => _progress2Text;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Text, value);
|
||||
}
|
||||
|
||||
public bool SectorsErrorsAllVisible
|
||||
{
|
||||
get => _sectorsErrorsAllVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorsErrorsAllVisible, value);
|
||||
}
|
||||
|
||||
public string SectorsErrorsAllText
|
||||
{
|
||||
get => _sectorsErrorsAllText;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorsErrorsAllText, value);
|
||||
}
|
||||
|
||||
public bool SectorsUnknownAllVisible
|
||||
{
|
||||
get => _sectorsUnknownAllVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorsUnknownAllVisible, value);
|
||||
}
|
||||
|
||||
public string SectorsUnknownAllText
|
||||
{
|
||||
get => _sectorsUnknownAllText;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorsUnknownAllText, value);
|
||||
}
|
||||
|
||||
public string SectorErrorsText
|
||||
{
|
||||
get => _sectorErrorsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorErrorsText, value);
|
||||
}
|
||||
|
||||
public bool SectorErrorsVisible
|
||||
{
|
||||
get => _sectorErrorsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorErrorsVisible, value);
|
||||
}
|
||||
|
||||
public bool SectorsUnknownsVisible
|
||||
{
|
||||
get => _sectorsUnknownsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorsUnknownsVisible, value);
|
||||
}
|
||||
|
||||
public string SectorsUnknownsText
|
||||
{
|
||||
get => _sectorsUnknownsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorsUnknownsText, value);
|
||||
}
|
||||
|
||||
public bool SectorSummaryVisible
|
||||
{
|
||||
get => _sectorSummaryVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _sectorSummaryVisible, value);
|
||||
}
|
||||
|
||||
public string TotalSectorsText
|
||||
{
|
||||
get => _totalSectorsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _totalSectorsText, value);
|
||||
}
|
||||
|
||||
public string TotalSectorErrorsText
|
||||
{
|
||||
get => _totalSectorErrorsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _totalSectorErrorsText, value);
|
||||
}
|
||||
|
||||
public string TotalSectorUnknownsText
|
||||
{
|
||||
get => _totalSectorUnknownsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _totalSectorUnknownsText, value);
|
||||
}
|
||||
|
||||
public string TotalSectorErrorsUnknownsText
|
||||
{
|
||||
get => _totalSectorErrorsUnknownsText;
|
||||
set => this.RaiseAndSetIfChanged(ref _totalSectorErrorsUnknownsText, value);
|
||||
}
|
||||
|
||||
public bool OptionsVisible
|
||||
{
|
||||
get => _optionsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _optionsVisible, value);
|
||||
}
|
||||
|
||||
public bool ResultsVisible
|
||||
{
|
||||
get => _resultsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _resultsVisible, value);
|
||||
}
|
||||
|
||||
public bool ProgressVisible
|
||||
{
|
||||
get => _progressVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressVisible, value);
|
||||
}
|
||||
|
||||
public bool StartVisible
|
||||
{
|
||||
get => _startVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _startVisible, value);
|
||||
}
|
||||
|
||||
public bool StopVisible
|
||||
{
|
||||
get => _stopVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopVisible, value);
|
||||
}
|
||||
|
||||
public bool CloseVisible
|
||||
{
|
||||
get => _closeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeVisible, value);
|
||||
}
|
||||
|
||||
public bool StopEnabled
|
||||
{
|
||||
get => _stopEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopEnabled, value);
|
||||
}
|
||||
|
||||
void ExecuteStartCommand()
|
||||
void Start()
|
||||
{
|
||||
VerifyImageEnabled = false;
|
||||
VerifySectorsEnabled = false;
|
||||
@@ -687,9 +510,9 @@ public sealed class ImageVerifyViewModel : ViewModelBase
|
||||
});
|
||||
}
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
|
||||
internal void ExecuteStopCommand()
|
||||
internal void Stop()
|
||||
{
|
||||
_cancel = true;
|
||||
StopEnabled = false;
|
||||
|
||||
@@ -35,8 +35,8 @@ using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
@@ -60,10 +60,10 @@ using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Platform;
|
||||
using Avalonia.Platform.Storage;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Spectre.Console;
|
||||
using Console = Aaru.Gui.Views.Dialogs.Console;
|
||||
using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo;
|
||||
@@ -94,22 +94,22 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
|
||||
public MainWindowViewModel(MainWindow view)
|
||||
{
|
||||
AboutCommand = ReactiveCommand.Create(ExecuteAboutCommand);
|
||||
EncodingsCommand = ReactiveCommand.Create(ExecuteEncodingsCommand);
|
||||
PluginsCommand = ReactiveCommand.Create(ExecutePluginsCommand);
|
||||
StatisticsCommand = ReactiveCommand.Create(ExecuteStatisticsCommand);
|
||||
ExitCommand = ReactiveCommand.Create(ExecuteExitCommand);
|
||||
SettingsCommand = ReactiveCommand.Create(ExecuteSettingsCommand);
|
||||
ConsoleCommand = ReactiveCommand.Create(ExecuteConsoleCommand);
|
||||
OpenCommand = ReactiveCommand.Create(ExecuteOpenCommand);
|
||||
CalculateEntropyCommand = ReactiveCommand.Create(ExecuteCalculateEntropyCommand);
|
||||
VerifyImageCommand = ReactiveCommand.Create(ExecuteVerifyImageCommand);
|
||||
ChecksumImageCommand = ReactiveCommand.Create(ExecuteChecksumImageCommand);
|
||||
ConvertImageCommand = ReactiveCommand.Create(ExecuteConvertImageCommand);
|
||||
CreateSidecarCommand = ReactiveCommand.Create(ExecuteCreateSidecarCommand);
|
||||
ViewImageSectorsCommand = ReactiveCommand.Create(ExecuteViewImageSectorsCommand);
|
||||
DecodeImageMediaTagsCommand = ReactiveCommand.Create(ExecuteDecodeImageMediaTagsCommand);
|
||||
RefreshDevicesCommand = ReactiveCommand.Create(ExecuteRefreshDevicesCommand);
|
||||
AboutCommand = new RelayCommand(About);
|
||||
EncodingsCommand = new RelayCommand(Encodings);
|
||||
PluginsCommand = new RelayCommand(Plugins);
|
||||
StatisticsCommand = new RelayCommand(Statistics);
|
||||
ExitCommand = new RelayCommand(Exit);
|
||||
SettingsCommand = new AsyncRelayCommand(SettingsAsync);
|
||||
ConsoleCommand = new RelayCommand(Console);
|
||||
OpenCommand = new AsyncRelayCommand(OpenAsync);
|
||||
CalculateEntropyCommand = new RelayCommand(CalculateEntropy);
|
||||
VerifyImageCommand = new RelayCommand(VerifyImage);
|
||||
ChecksumImageCommand = new RelayCommand(ChecksumImage);
|
||||
ConvertImageCommand = new RelayCommand(ConvertImage);
|
||||
CreateSidecarCommand = new RelayCommand(CreateSidecar);
|
||||
ViewImageSectorsCommand = new RelayCommand(ViewImageSectors);
|
||||
DecodeImageMediaTagsCommand = new RelayCommand(DecodeImageMediaTags);
|
||||
RefreshDevicesCommand = new RelayCommand(RefreshDevices);
|
||||
_view = view;
|
||||
TreeRoot = [];
|
||||
ContentPanel = Greeting;
|
||||
@@ -190,7 +190,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
public bool DevicesSupported
|
||||
{
|
||||
get => _devicesSupported;
|
||||
set => this.RaiseAndSetIfChanged(ref _devicesSupported, value);
|
||||
set => SetProperty(ref _devicesSupported, value);
|
||||
}
|
||||
|
||||
public bool NativeMenuSupported
|
||||
@@ -208,27 +208,27 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
public string Greeting => UI.Welcome_to_Aaru;
|
||||
|
||||
public ObservableCollection<RootModel> TreeRoot { get; }
|
||||
public ReactiveCommand<Unit, Unit> AboutCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> ConsoleCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> EncodingsCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> PluginsCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StatisticsCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> ExitCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> SettingsCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> OpenCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CalculateEntropyCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> VerifyImageCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> ChecksumImageCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> ConvertImageCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CreateSidecarCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> ViewImageSectorsCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> DecodeImageMediaTagsCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> RefreshDevicesCommand { get; }
|
||||
public ICommand AboutCommand { get; }
|
||||
public ICommand ConsoleCommand { get; }
|
||||
public ICommand EncodingsCommand { get; }
|
||||
public ICommand PluginsCommand { get; }
|
||||
public ICommand StatisticsCommand { get; }
|
||||
public ICommand ExitCommand { get; }
|
||||
public ICommand SettingsCommand { get; }
|
||||
public ICommand OpenCommand { get; }
|
||||
public ICommand CalculateEntropyCommand { get; }
|
||||
public ICommand VerifyImageCommand { get; }
|
||||
public ICommand ChecksumImageCommand { get; }
|
||||
public ICommand ConvertImageCommand { get; }
|
||||
public ICommand CreateSidecarCommand { get; }
|
||||
public ICommand ViewImageSectorsCommand { get; }
|
||||
public ICommand DecodeImageMediaTagsCommand { get; }
|
||||
public ICommand RefreshDevicesCommand { get; }
|
||||
|
||||
public object ContentPanel
|
||||
{
|
||||
get => _contentPanel;
|
||||
set => this.RaiseAndSetIfChanged(ref _contentPanel, value);
|
||||
set => SetProperty(ref _contentPanel, value);
|
||||
}
|
||||
|
||||
public object TreeViewSelectedItem
|
||||
@@ -238,7 +238,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
{
|
||||
if(value == _treeViewSelectedItem) return;
|
||||
|
||||
this.RaiseAndSetIfChanged(ref _treeViewSelectedItem, value);
|
||||
SetProperty(ref _treeViewSelectedItem, value);
|
||||
|
||||
ContentPanel = null;
|
||||
|
||||
@@ -285,11 +285,11 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
|
||||
return;
|
||||
case Devices.Remote.Device remoteDev:
|
||||
Statistics.AddRemote(remoteDev.RemoteApplication,
|
||||
remoteDev.RemoteVersion,
|
||||
remoteDev.RemoteOperatingSystem,
|
||||
remoteDev.RemoteOperatingSystemVersion,
|
||||
remoteDev.RemoteArchitecture);
|
||||
Core.Statistics.AddRemote(remoteDev.RemoteApplication,
|
||||
remoteDev.RemoteVersion,
|
||||
remoteDev.RemoteOperatingSystem,
|
||||
remoteDev.RemoteOperatingSystemVersion,
|
||||
remoteDev.RemoteArchitecture);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -378,7 +378,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
void ExecuteCalculateEntropyCommand()
|
||||
void CalculateEntropy()
|
||||
{
|
||||
if(TreeViewSelectedItem is not ImageModel imageModel) return;
|
||||
|
||||
@@ -390,7 +390,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
imageEntropyWindow.Show();
|
||||
}
|
||||
|
||||
void ExecuteVerifyImageCommand()
|
||||
void VerifyImage()
|
||||
{
|
||||
if(TreeViewSelectedItem is not ImageModel imageModel) return;
|
||||
|
||||
@@ -402,7 +402,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
imageVerifyWindow.Show();
|
||||
}
|
||||
|
||||
void ExecuteChecksumImageCommand()
|
||||
void ChecksumImage()
|
||||
{
|
||||
if(TreeViewSelectedItem is not ImageModel imageModel) return;
|
||||
|
||||
@@ -414,7 +414,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
imageChecksumWindow.Show();
|
||||
}
|
||||
|
||||
void ExecuteConvertImageCommand()
|
||||
void ConvertImage()
|
||||
{
|
||||
if(TreeViewSelectedItem is not ImageModel imageModel) return;
|
||||
|
||||
@@ -428,7 +428,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
imageConvertWindow.Show();
|
||||
}
|
||||
|
||||
void ExecuteCreateSidecarCommand()
|
||||
void CreateSidecar()
|
||||
{
|
||||
if(TreeViewSelectedItem is not ImageModel imageModel) return;
|
||||
|
||||
@@ -445,7 +445,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
imageSidecarWindow.Show();
|
||||
}
|
||||
|
||||
void ExecuteViewImageSectorsCommand()
|
||||
void ViewImageSectors()
|
||||
{
|
||||
if(TreeViewSelectedItem is not ImageModel imageModel) return;
|
||||
|
||||
@@ -455,7 +455,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
}.Show();
|
||||
}
|
||||
|
||||
void ExecuteDecodeImageMediaTagsCommand()
|
||||
void DecodeImageMediaTags()
|
||||
{
|
||||
if(TreeViewSelectedItem is not ImageModel imageModel) return;
|
||||
|
||||
@@ -465,28 +465,28 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
}.Show();
|
||||
}
|
||||
|
||||
internal void ExecuteAboutCommand()
|
||||
internal void About()
|
||||
{
|
||||
var dialog = new About();
|
||||
dialog.DataContext = new AboutViewModel(dialog);
|
||||
dialog.ShowDialog(_view);
|
||||
}
|
||||
|
||||
void ExecuteEncodingsCommand()
|
||||
void Encodings()
|
||||
{
|
||||
var dialog = new Encodings();
|
||||
dialog.DataContext = new EncodingsViewModel(dialog);
|
||||
dialog.ShowDialog(_view);
|
||||
}
|
||||
|
||||
void ExecutePluginsCommand()
|
||||
void Plugins()
|
||||
{
|
||||
var dialog = new PluginsDialog();
|
||||
dialog.DataContext = new PluginsViewModel(dialog);
|
||||
dialog.ShowDialog(_view);
|
||||
}
|
||||
|
||||
void ExecuteStatisticsCommand()
|
||||
void Statistics()
|
||||
{
|
||||
using var ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
|
||||
|
||||
@@ -509,17 +509,17 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
dialog.ShowDialog(_view);
|
||||
}
|
||||
|
||||
internal async Task ExecuteSettingsCommand()
|
||||
internal async Task SettingsAsync()
|
||||
{
|
||||
var dialog = new SettingsDialog();
|
||||
dialog.DataContext = new SettingsViewModel(dialog, false);
|
||||
await dialog.ShowDialog(_view);
|
||||
}
|
||||
|
||||
internal void ExecuteExitCommand() =>
|
||||
internal void Exit() =>
|
||||
(Application.Current?.ApplicationLifetime as ClassicDesktopStyleApplicationLifetime)?.Shutdown();
|
||||
|
||||
void ExecuteConsoleCommand()
|
||||
void Console()
|
||||
{
|
||||
if(_console is null)
|
||||
{
|
||||
@@ -530,7 +530,7 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
_console.Show();
|
||||
}
|
||||
|
||||
async Task ExecuteOpenCommand()
|
||||
async Task OpenAsync()
|
||||
{
|
||||
// TODO: Extensions
|
||||
IReadOnlyList<IStorageFile> result = await _view.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||
@@ -698,10 +698,10 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
Plugin = rofs
|
||||
});
|
||||
|
||||
Statistics.AddCommand("ls");
|
||||
Core.Statistics.AddCommand("ls");
|
||||
}
|
||||
|
||||
Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type);
|
||||
Core.Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type);
|
||||
partitionModel.FileSystems.Add(filesystemModel);
|
||||
}
|
||||
}
|
||||
@@ -776,18 +776,18 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
Plugin = rofs
|
||||
});
|
||||
|
||||
Statistics.AddCommand("ls");
|
||||
Core.Statistics.AddCommand("ls");
|
||||
}
|
||||
|
||||
Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type);
|
||||
Core.Statistics.AddFilesystem(rofs?.Metadata.Type ?? fsMetadata.Type);
|
||||
imageModel.PartitionSchemesOrFileSystems.Add(filesystemModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Statistics.AddMediaFormat(imageFormat.Format);
|
||||
Statistics.AddMedia(imageFormat.Info.MediaType, false);
|
||||
Statistics.AddFilter(inputFilter.Name);
|
||||
Core.Statistics.AddMediaFormat(imageFormat.Format);
|
||||
Core.Statistics.AddMedia(imageFormat.Info.MediaType, false);
|
||||
Core.Statistics.AddFilter(inputFilter.Name);
|
||||
|
||||
_imagesRoot.Images.Add(imageModel);
|
||||
}
|
||||
@@ -814,13 +814,11 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
AaruLogging.Exception(ex, UI.Error_reading_file_0, ex.Message);
|
||||
}
|
||||
|
||||
Statistics.AddCommand("image-info");
|
||||
Core.Statistics.AddCommand("image-info");
|
||||
}
|
||||
|
||||
internal void LoadComplete() => RefreshDevices();
|
||||
|
||||
void ExecuteRefreshDevicesCommand() => RefreshDevices();
|
||||
|
||||
void RefreshDevices()
|
||||
{
|
||||
if(!DevicesSupported) return;
|
||||
@@ -855,11 +853,11 @@ public sealed class MainWindowViewModel : ViewModelBase
|
||||
{
|
||||
if(dev is Devices.Remote.Device remoteDev)
|
||||
{
|
||||
Statistics.AddRemote(remoteDev.RemoteApplication,
|
||||
remoteDev.RemoteVersion,
|
||||
remoteDev.RemoteOperatingSystem,
|
||||
remoteDev.RemoteOperatingSystemVersion,
|
||||
remoteDev.RemoteArchitecture);
|
||||
Core.Statistics.AddRemote(remoteDev.RemoteApplication,
|
||||
remoteDev.RemoteVersion,
|
||||
remoteDev.RemoteOperatingSystem,
|
||||
remoteDev.RemoteOperatingSystemVersion,
|
||||
remoteDev.RemoteArchitecture);
|
||||
}
|
||||
|
||||
deviceModel.Icon = dev.Type switch
|
||||
|
||||
@@ -36,11 +36,11 @@ using System.Collections.ObjectModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using System.Xml.Serialization;
|
||||
using Aaru.CommonTypes;
|
||||
using Aaru.CommonTypes.AaruMetadata;
|
||||
@@ -58,11 +58,11 @@ using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Platform.Storage;
|
||||
using Avalonia.Threading;
|
||||
using DynamicData;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using JetBrains.Annotations;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo;
|
||||
using Dump = Aaru.Core.Devices.Dumping.Dump;
|
||||
@@ -71,50 +71,86 @@ using MediaType = Aaru.CommonTypes.MediaType;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class MediaDumpViewModel : ViewModelBase
|
||||
public sealed partial class MediaDumpViewModel : ViewModelBase
|
||||
{
|
||||
readonly string _devicePath;
|
||||
readonly Window _view;
|
||||
bool _closeVisible;
|
||||
string _destination;
|
||||
bool _destinationEnabled;
|
||||
Device _dev;
|
||||
Dump _dumper;
|
||||
string _encodingEnabled;
|
||||
bool _encodingVisible;
|
||||
bool _existingMetadata;
|
||||
bool _force;
|
||||
string _formatReadOnly;
|
||||
string _log;
|
||||
bool _optionsVisible;
|
||||
string _outputPrefix;
|
||||
bool _persistent;
|
||||
bool _progress1Visible;
|
||||
bool _progress2Indeterminate;
|
||||
double _progress2MaxValue;
|
||||
string _progress2Text;
|
||||
double _progress2Value;
|
||||
bool _progress2Visible;
|
||||
bool _progressIndeterminate;
|
||||
double _progressMaxValue;
|
||||
string _progressText;
|
||||
double _progressValue;
|
||||
bool _progressVisible;
|
||||
Resume _resume;
|
||||
double _retries;
|
||||
EncodingModel _selectedEncoding;
|
||||
readonly string _devicePath;
|
||||
readonly Window _view;
|
||||
[ObservableProperty]
|
||||
bool _closeVisible;
|
||||
[ObservableProperty]
|
||||
string _destination;
|
||||
[ObservableProperty]
|
||||
bool _destinationEnabled;
|
||||
[ObservableProperty]
|
||||
Device _dev;
|
||||
[ObservableProperty]
|
||||
Dump _dumper;
|
||||
[ObservableProperty]
|
||||
string _encodingEnabled;
|
||||
[ObservableProperty]
|
||||
bool _encodingVisible;
|
||||
bool _existingMetadata;
|
||||
[ObservableProperty]
|
||||
bool _force;
|
||||
[ObservableProperty]
|
||||
string _formatReadOnly;
|
||||
[ObservableProperty]
|
||||
string _log;
|
||||
[ObservableProperty]
|
||||
bool _optionsVisible;
|
||||
[ObservableProperty]
|
||||
string _outputPrefix;
|
||||
[ObservableProperty]
|
||||
bool _persistent;
|
||||
[ObservableProperty]
|
||||
bool _progress1Visible;
|
||||
[ObservableProperty]
|
||||
bool _progress2Indeterminate;
|
||||
[ObservableProperty]
|
||||
double _progress2MaxValue;
|
||||
[ObservableProperty]
|
||||
string _progress2Text;
|
||||
[ObservableProperty]
|
||||
double _progress2Value;
|
||||
[ObservableProperty]
|
||||
bool _progress2Visible;
|
||||
[ObservableProperty]
|
||||
bool _progressIndeterminate;
|
||||
[ObservableProperty]
|
||||
double _progressMaxValue;
|
||||
[ObservableProperty]
|
||||
string _progressText;
|
||||
[ObservableProperty]
|
||||
double _progressValue;
|
||||
[ObservableProperty]
|
||||
bool _progressVisible;
|
||||
Resume _resume;
|
||||
[ObservableProperty]
|
||||
double _retries;
|
||||
[ObservableProperty]
|
||||
EncodingModel _selectedEncoding;
|
||||
ImagePluginModel _selectedPlugin;
|
||||
Metadata _sidecar;
|
||||
double _skipped;
|
||||
bool _startVisible;
|
||||
bool _stopEnabled;
|
||||
bool _stopOnError;
|
||||
bool _stopVisible;
|
||||
bool _track1Pregap;
|
||||
bool _track1PregapVisible;
|
||||
bool _trim;
|
||||
bool _useResume;
|
||||
bool _useSidecar;
|
||||
[ObservableProperty]
|
||||
Metadata _sidecar;
|
||||
[ObservableProperty]
|
||||
double _skipped;
|
||||
[ObservableProperty]
|
||||
bool _startVisible;
|
||||
[ObservableProperty]
|
||||
bool _stopEnabled;
|
||||
[ObservableProperty]
|
||||
bool _stopOnError;
|
||||
[ObservableProperty]
|
||||
bool _stopVisible;
|
||||
[ObservableProperty]
|
||||
bool _track1Pregap;
|
||||
[ObservableProperty]
|
||||
bool _track1PregapVisible;
|
||||
[ObservableProperty]
|
||||
bool _trim;
|
||||
bool _useResume;
|
||||
[ObservableProperty]
|
||||
bool _useSidecar;
|
||||
|
||||
public MediaDumpViewModel(string devicePath, DeviceInfo deviceInfo, Window view,
|
||||
[CanBeNull] ScsiInfo scsiInfo = null)
|
||||
@@ -124,10 +160,10 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
StartVisible = true;
|
||||
CloseVisible = true;
|
||||
OptionsVisible = true;
|
||||
StartCommand = ReactiveCommand.Create(ExecuteStartCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
StopCommand = ReactiveCommand.Create(ExecuteStopCommand);
|
||||
DestinationCommand = ReactiveCommand.Create(ExecuteDestinationCommand);
|
||||
StartCommand = new RelayCommand(Start);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
StopCommand = new RelayCommand(Stop);
|
||||
DestinationCommand = new AsyncRelayCommand(DestinationAsync);
|
||||
PluginsList = [];
|
||||
Encodings = [];
|
||||
|
||||
@@ -137,7 +173,7 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
Persistent = true;
|
||||
Resume = true;
|
||||
Track1Pregap = false;
|
||||
Sidecar = true;
|
||||
UseSidecar = true;
|
||||
Trim = true;
|
||||
ExistingMetadata = false;
|
||||
Retries = 5;
|
||||
@@ -186,19 +222,21 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
Encodings.AddRange(Encoding.GetEncodings()
|
||||
.Select(info => new EncodingModel
|
||||
{
|
||||
Name = info.Name,
|
||||
DisplayName = info.GetEncoding().EncodingName
|
||||
}));
|
||||
|
||||
Encodings.AddRange(Claunia.Encoding.Encoding.GetEncodings()
|
||||
.Select(info => new EncodingModel
|
||||
{
|
||||
Name = info.Name,
|
||||
DisplayName = info.DisplayName
|
||||
}));
|
||||
foreach(EncodingModel model in Encoding.GetEncodings()
|
||||
.Select(info => new EncodingModel
|
||||
{
|
||||
Name = info.Name,
|
||||
DisplayName = info.GetEncoding().EncodingName
|
||||
})
|
||||
.Concat(Claunia.Encoding.Encoding.GetEncodings()
|
||||
.Select(info => new EncodingModel
|
||||
{
|
||||
Name = info.Name,
|
||||
DisplayName = info.DisplayName
|
||||
}))
|
||||
.AsParallel()
|
||||
.OrderBy(m => m.DisplayName))
|
||||
Encodings.Add(model);
|
||||
|
||||
Track1PregapVisible = mediaType switch
|
||||
{
|
||||
@@ -270,28 +308,22 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
public string StopLabel => UI.ButtonLabel_Stop;
|
||||
|
||||
public ReactiveCommand<Unit, Unit> StartCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StopCommand { get; }
|
||||
public ReactiveCommand<Unit, Task> DestinationCommand { get; }
|
||||
public ICommand StartCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ICommand StopCommand { get; }
|
||||
public ICommand DestinationCommand { get; }
|
||||
|
||||
public ObservableCollection<ImagePluginModel> PluginsList { get; }
|
||||
public ObservableCollection<EncodingModel> Encodings { get; }
|
||||
|
||||
public string Title { get; }
|
||||
|
||||
public bool OptionsVisible
|
||||
{
|
||||
get => _optionsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _optionsVisible, value);
|
||||
}
|
||||
|
||||
public ImagePluginModel SelectedPlugin
|
||||
{
|
||||
get => _selectedPlugin;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref _selectedPlugin, value);
|
||||
SetProperty(ref _selectedPlugin, value);
|
||||
|
||||
Destination = "";
|
||||
|
||||
@@ -399,107 +431,27 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
public string FormatReadOnly
|
||||
{
|
||||
get => _formatReadOnly;
|
||||
set => this.RaiseAndSetIfChanged(ref _formatReadOnly, value);
|
||||
}
|
||||
|
||||
public string Destination
|
||||
{
|
||||
get => _destination;
|
||||
set => this.RaiseAndSetIfChanged(ref _destination, value);
|
||||
}
|
||||
|
||||
public bool DestinationEnabled
|
||||
{
|
||||
get => _destinationEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _destinationEnabled, value);
|
||||
}
|
||||
|
||||
public bool StopOnError
|
||||
{
|
||||
get => _stopOnError;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopOnError, value);
|
||||
}
|
||||
|
||||
public bool Force
|
||||
{
|
||||
get => _force;
|
||||
set => this.RaiseAndSetIfChanged(ref _force, value);
|
||||
}
|
||||
|
||||
public double Retries
|
||||
{
|
||||
get => _retries;
|
||||
set => this.RaiseAndSetIfChanged(ref _retries, value);
|
||||
}
|
||||
|
||||
public bool Persistent
|
||||
{
|
||||
get => _persistent;
|
||||
set => this.RaiseAndSetIfChanged(ref _persistent, value);
|
||||
}
|
||||
|
||||
public bool Resume
|
||||
{
|
||||
get => _useResume;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref _useResume, value);
|
||||
SetProperty(ref _useResume, value);
|
||||
|
||||
if(!value) return;
|
||||
|
||||
if(_outputPrefix != null) CheckResumeFile().GetAwaiter().GetResult();
|
||||
if(_outputPrefix != null) CheckResumeFileAsync().GetAwaiter().GetResult();
|
||||
}
|
||||
}
|
||||
|
||||
public bool Track1Pregap
|
||||
{
|
||||
get => _track1Pregap;
|
||||
set => this.RaiseAndSetIfChanged(ref _track1Pregap, value);
|
||||
}
|
||||
|
||||
public bool Track1PregapVisible
|
||||
{
|
||||
get => _track1PregapVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _track1PregapVisible, value);
|
||||
}
|
||||
|
||||
public double Skipped
|
||||
{
|
||||
get => _skipped;
|
||||
set => this.RaiseAndSetIfChanged(ref _skipped, value);
|
||||
}
|
||||
|
||||
public bool Sidecar
|
||||
{
|
||||
get => _useSidecar;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref _useSidecar, value);
|
||||
EncodingVisible = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool EncodingVisible
|
||||
{
|
||||
get => _encodingVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _encodingVisible, value);
|
||||
}
|
||||
|
||||
public bool Trim
|
||||
{
|
||||
get => _trim;
|
||||
set => this.RaiseAndSetIfChanged(ref _trim, value);
|
||||
}
|
||||
|
||||
public bool ExistingMetadata
|
||||
{
|
||||
get => _existingMetadata;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref _existingMetadata, value);
|
||||
SetProperty(ref _existingMetadata, value);
|
||||
|
||||
if(!value)
|
||||
{
|
||||
@@ -553,115 +505,7 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
public EncodingModel SelectedEncoding
|
||||
{
|
||||
get => _selectedEncoding;
|
||||
set => this.RaiseAndSetIfChanged(ref _selectedEncoding, value);
|
||||
}
|
||||
|
||||
public string EncodingEnabled
|
||||
{
|
||||
get => _encodingEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _encodingEnabled, value);
|
||||
}
|
||||
|
||||
public bool ProgressVisible
|
||||
{
|
||||
get => _progressVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressVisible, value);
|
||||
}
|
||||
|
||||
public string Log
|
||||
{
|
||||
get => _log;
|
||||
set => this.RaiseAndSetIfChanged(ref _log, value);
|
||||
}
|
||||
|
||||
public bool Progress1Visible
|
||||
{
|
||||
get => _progress1Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress1Visible, value);
|
||||
}
|
||||
|
||||
public string ProgressText
|
||||
{
|
||||
get => _progressText;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressText, value);
|
||||
}
|
||||
|
||||
public double ProgressValue
|
||||
{
|
||||
get => _progressValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressValue, value);
|
||||
}
|
||||
|
||||
public double ProgressMaxValue
|
||||
{
|
||||
get => _progressMaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressMaxValue, value);
|
||||
}
|
||||
|
||||
public bool ProgressIndeterminate
|
||||
{
|
||||
get => _progressIndeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressIndeterminate, value);
|
||||
}
|
||||
|
||||
public bool Progress2Visible
|
||||
{
|
||||
get => _progress2Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Visible, value);
|
||||
}
|
||||
|
||||
public string Progress2Text
|
||||
{
|
||||
get => _progress2Text;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Text, value);
|
||||
}
|
||||
|
||||
public double Progress2Value
|
||||
{
|
||||
get => _progress2Value;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Value, value);
|
||||
}
|
||||
|
||||
public double Progress2MaxValue
|
||||
{
|
||||
get => _progress2MaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2MaxValue, value);
|
||||
}
|
||||
|
||||
public bool Progress2Indeterminate
|
||||
{
|
||||
get => _progress2Indeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress2Indeterminate, value);
|
||||
}
|
||||
|
||||
public bool StartVisible
|
||||
{
|
||||
get => _startVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _startVisible, value);
|
||||
}
|
||||
|
||||
public bool CloseVisible
|
||||
{
|
||||
get => _closeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeVisible, value);
|
||||
}
|
||||
|
||||
public bool StopVisible
|
||||
{
|
||||
get => _stopVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopVisible, value);
|
||||
}
|
||||
|
||||
public bool StopEnabled
|
||||
{
|
||||
get => _stopEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopEnabled, value);
|
||||
}
|
||||
|
||||
async Task ExecuteDestinationCommand()
|
||||
async Task DestinationAsync()
|
||||
{
|
||||
if(SelectedPlugin is null) return;
|
||||
|
||||
@@ -696,7 +540,7 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
Resume = true;
|
||||
}
|
||||
|
||||
async Task CheckResumeFile()
|
||||
async Task CheckResumeFileAsync()
|
||||
{
|
||||
_resume = null;
|
||||
|
||||
@@ -760,15 +604,15 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
Resume = false;
|
||||
}
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
|
||||
internal void ExecuteStopCommand()
|
||||
internal void Stop()
|
||||
{
|
||||
StopEnabled = false;
|
||||
_dumper?.Abort();
|
||||
}
|
||||
|
||||
void ExecuteStartCommand()
|
||||
void Start()
|
||||
{
|
||||
Log = "";
|
||||
CloseVisible = false;
|
||||
@@ -929,10 +773,10 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
|
||||
_dev.Close();
|
||||
|
||||
await WorkFinished();
|
||||
await WorkFinishedAsync();
|
||||
}
|
||||
|
||||
async Task WorkFinished() => await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
async Task WorkFinishedAsync() => await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
CloseVisible = true;
|
||||
StopVisible = false;
|
||||
@@ -987,7 +831,7 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
await MessageBoxManager.GetMessageBoxStandard(UI.Title_Error, $"{text}", ButtonEnum.Ok, Icon.Error)
|
||||
.ShowWindowDialogAsync(_view);
|
||||
|
||||
await WorkFinished();
|
||||
await WorkFinishedAsync();
|
||||
});
|
||||
|
||||
[SuppressMessage("ReSharper", "AsyncVoidMethod")]
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reactive;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.Core;
|
||||
using Aaru.Core.Devices.Scanning;
|
||||
@@ -43,69 +43,110 @@ using Aaru.Localization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Media;
|
||||
using Avalonia.Threading;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Humanizer;
|
||||
using Humanizer.Bytes;
|
||||
using Humanizer.Localisation;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
|
||||
//using OxyPlot;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class MediaScanViewModel : ViewModelBase
|
||||
public sealed partial class MediaScanViewModel : ViewModelBase
|
||||
{
|
||||
readonly Window _view;
|
||||
string _a;
|
||||
string _avgSpeed;
|
||||
Color _axesColor;
|
||||
string _b;
|
||||
ulong _blocks;
|
||||
ulong _blocksToRead;
|
||||
string _c;
|
||||
bool _closeVisible;
|
||||
string _d;
|
||||
string _devicePath;
|
||||
string _e;
|
||||
string _f;
|
||||
Color _lineColor;
|
||||
ScanResults _localResults;
|
||||
string _maxSpeed;
|
||||
double _maxX;
|
||||
double _maxY;
|
||||
string _minSpeed;
|
||||
double _minX;
|
||||
double _minY;
|
||||
bool _progress1Visible;
|
||||
string _progress2Indeterminate;
|
||||
string _progress2MaxValue;
|
||||
string _progress2Text;
|
||||
string _progress2Value;
|
||||
string _progress2Visible;
|
||||
bool _progressIndeterminate;
|
||||
double _progressMaxValue;
|
||||
string _progressText;
|
||||
double _progressValue;
|
||||
bool _progressVisible;
|
||||
bool _resultsVisible;
|
||||
MediaScan _scanner;
|
||||
bool _startVisible;
|
||||
double _stepsX;
|
||||
double _stepsY;
|
||||
string _stopEnabled;
|
||||
bool _stopVisible;
|
||||
string _totalTime;
|
||||
string _unreadableSectors;
|
||||
[ObservableProperty]
|
||||
string _a;
|
||||
[ObservableProperty]
|
||||
string _avgSpeed;
|
||||
[ObservableProperty]
|
||||
Color _axesColor;
|
||||
[ObservableProperty]
|
||||
string _b;
|
||||
[ObservableProperty]
|
||||
ulong _blocks;
|
||||
[ObservableProperty]
|
||||
ulong _blocksToRead;
|
||||
[ObservableProperty]
|
||||
string _c;
|
||||
[ObservableProperty]
|
||||
bool _closeVisible;
|
||||
[ObservableProperty]
|
||||
string _d;
|
||||
[ObservableProperty]
|
||||
string _devicePath;
|
||||
[ObservableProperty]
|
||||
string _e;
|
||||
[ObservableProperty]
|
||||
string _f;
|
||||
[ObservableProperty]
|
||||
Color _lineColor;
|
||||
[ObservableProperty]
|
||||
ScanResults _localResults;
|
||||
[ObservableProperty]
|
||||
string _maxSpeed;
|
||||
[ObservableProperty]
|
||||
double _maxX;
|
||||
[ObservableProperty]
|
||||
double _maxY;
|
||||
[ObservableProperty]
|
||||
string _minSpeed;
|
||||
[ObservableProperty]
|
||||
double _minX;
|
||||
[ObservableProperty]
|
||||
double _minY;
|
||||
[ObservableProperty]
|
||||
bool _progress1Visible;
|
||||
[ObservableProperty]
|
||||
string _progress2Indeterminate;
|
||||
[ObservableProperty]
|
||||
string _progress2MaxValue;
|
||||
[ObservableProperty]
|
||||
string _progress2Text;
|
||||
[ObservableProperty]
|
||||
string _progress2Value;
|
||||
[ObservableProperty]
|
||||
string _progress2Visible;
|
||||
[ObservableProperty]
|
||||
bool _progressIndeterminate;
|
||||
[ObservableProperty]
|
||||
double _progressMaxValue;
|
||||
[ObservableProperty]
|
||||
string _progressText;
|
||||
[ObservableProperty]
|
||||
double _progressValue;
|
||||
[ObservableProperty]
|
||||
bool _progressVisible;
|
||||
[ObservableProperty]
|
||||
bool _resultsVisible;
|
||||
[ObservableProperty]
|
||||
MediaScan _scanner;
|
||||
[ObservableProperty]
|
||||
bool _startVisible;
|
||||
[ObservableProperty]
|
||||
double _stepsX;
|
||||
[ObservableProperty]
|
||||
double _stepsY;
|
||||
[ObservableProperty]
|
||||
string _stopEnabled;
|
||||
[ObservableProperty]
|
||||
bool _stopVisible;
|
||||
[ObservableProperty]
|
||||
string _totalTime;
|
||||
[ObservableProperty]
|
||||
string _unreadableSectors;
|
||||
|
||||
public MediaScanViewModel(string devicePath, Window view)
|
||||
{
|
||||
_devicePath = devicePath;
|
||||
_view = view;
|
||||
StopVisible = false;
|
||||
StartCommand = ReactiveCommand.Create(ExecuteStartCommand);
|
||||
CloseCommand = ReactiveCommand.Create(ExecuteCloseCommand);
|
||||
StopCommand = ReactiveCommand.Create(ExecuteStopCommand);
|
||||
StartCommand = new RelayCommand(Start);
|
||||
CloseCommand = new RelayCommand(Close);
|
||||
StopCommand = new RelayCommand(Stop);
|
||||
StartVisible = true;
|
||||
CloseVisible = true;
|
||||
BlockMapList = [];
|
||||
@@ -124,207 +165,21 @@ public sealed class MediaScanViewModel : ViewModelBase
|
||||
public string CloseLabel => UI.ButtonLabel_Close;
|
||||
public string StopLabel => UI.ButtonLabel_Stop;
|
||||
|
||||
public Color AxesColor
|
||||
{
|
||||
get => _axesColor;
|
||||
set => this.RaiseAndSetIfChanged(ref _axesColor, value);
|
||||
}
|
||||
|
||||
public Color LineColor
|
||||
{
|
||||
get => _lineColor;
|
||||
set => this.RaiseAndSetIfChanged(ref _lineColor, value);
|
||||
}
|
||||
|
||||
public ObservableCollection<(ulong block, double duration)> BlockMapList { get; }
|
||||
|
||||
// public ObservableCollection<DataPoint> ChartPoints { get; }
|
||||
|
||||
public ulong Blocks
|
||||
{
|
||||
get => _blocks;
|
||||
set => this.RaiseAndSetIfChanged(ref _blocks, value);
|
||||
}
|
||||
|
||||
public string A
|
||||
{
|
||||
get => _a;
|
||||
set => this.RaiseAndSetIfChanged(ref _a, value);
|
||||
}
|
||||
|
||||
public string B
|
||||
{
|
||||
get => _b;
|
||||
set => this.RaiseAndSetIfChanged(ref _b, value);
|
||||
}
|
||||
|
||||
public string C
|
||||
{
|
||||
get => _c;
|
||||
set => this.RaiseAndSetIfChanged(ref _c, value);
|
||||
}
|
||||
|
||||
public string D
|
||||
{
|
||||
get => _d;
|
||||
set => this.RaiseAndSetIfChanged(ref _d, value);
|
||||
}
|
||||
|
||||
public string E
|
||||
{
|
||||
get => _e;
|
||||
set => this.RaiseAndSetIfChanged(ref _e, value);
|
||||
}
|
||||
|
||||
public string F
|
||||
{
|
||||
get => _f;
|
||||
set => this.RaiseAndSetIfChanged(ref _f, value);
|
||||
}
|
||||
|
||||
public string UnreadableSectors
|
||||
{
|
||||
get => _unreadableSectors;
|
||||
set => this.RaiseAndSetIfChanged(ref _unreadableSectors, value);
|
||||
}
|
||||
|
||||
public string TotalTime
|
||||
{
|
||||
get => _totalTime;
|
||||
set => this.RaiseAndSetIfChanged(ref _totalTime, value);
|
||||
}
|
||||
|
||||
public string AvgSpeed
|
||||
{
|
||||
get => _avgSpeed;
|
||||
set => this.RaiseAndSetIfChanged(ref _avgSpeed, value);
|
||||
}
|
||||
|
||||
public string MaxSpeed
|
||||
{
|
||||
get => _maxSpeed;
|
||||
set => this.RaiseAndSetIfChanged(ref _maxSpeed, value);
|
||||
}
|
||||
|
||||
public string MinSpeed
|
||||
{
|
||||
get => _minSpeed;
|
||||
set => this.RaiseAndSetIfChanged(ref _minSpeed, value);
|
||||
}
|
||||
|
||||
public bool ProgressVisible
|
||||
{
|
||||
get => _progressVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressVisible, value);
|
||||
}
|
||||
|
||||
public bool Progress1Visible
|
||||
{
|
||||
get => _progress1Visible;
|
||||
set => this.RaiseAndSetIfChanged(ref _progress1Visible, value);
|
||||
}
|
||||
|
||||
public string ProgressText
|
||||
{
|
||||
get => _progressText;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressText, value);
|
||||
}
|
||||
|
||||
public double ProgressMaxValue
|
||||
{
|
||||
get => _progressMaxValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressMaxValue, value);
|
||||
}
|
||||
|
||||
public bool ProgressIndeterminate
|
||||
{
|
||||
get => _progressIndeterminate;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressIndeterminate, value);
|
||||
}
|
||||
|
||||
public double ProgressValue
|
||||
{
|
||||
get => _progressValue;
|
||||
set => this.RaiseAndSetIfChanged(ref _progressValue, value);
|
||||
}
|
||||
|
||||
public bool StartVisible
|
||||
{
|
||||
get => _startVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _startVisible, value);
|
||||
}
|
||||
|
||||
public bool CloseVisible
|
||||
{
|
||||
get => _closeVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _closeVisible, value);
|
||||
}
|
||||
|
||||
public bool StopVisible
|
||||
{
|
||||
get => _stopVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopVisible, value);
|
||||
}
|
||||
|
||||
public string StopEnabled
|
||||
{
|
||||
get => _stopEnabled;
|
||||
set => this.RaiseAndSetIfChanged(ref _stopEnabled, value);
|
||||
}
|
||||
|
||||
public bool ResultsVisible
|
||||
{
|
||||
get => _resultsVisible;
|
||||
set => this.RaiseAndSetIfChanged(ref _resultsVisible, value);
|
||||
}
|
||||
|
||||
public double MaxY
|
||||
{
|
||||
get => _maxY;
|
||||
set => this.RaiseAndSetIfChanged(ref _maxY, value);
|
||||
}
|
||||
|
||||
public double MaxX
|
||||
{
|
||||
get => _maxX;
|
||||
set => this.RaiseAndSetIfChanged(ref _maxX, value);
|
||||
}
|
||||
|
||||
public double MinY
|
||||
{
|
||||
get => _minY;
|
||||
set => this.RaiseAndSetIfChanged(ref _minY, value);
|
||||
}
|
||||
|
||||
public double MinX
|
||||
{
|
||||
get => _minX;
|
||||
set => this.RaiseAndSetIfChanged(ref _minX, value);
|
||||
}
|
||||
|
||||
public double StepsY
|
||||
{
|
||||
get => _stepsY;
|
||||
set => this.RaiseAndSetIfChanged(ref _stepsY, value);
|
||||
}
|
||||
|
||||
public double StepsX
|
||||
{
|
||||
get => _stepsX;
|
||||
set => this.RaiseAndSetIfChanged(ref _stepsX, value);
|
||||
}
|
||||
|
||||
public string Title { get; }
|
||||
|
||||
public ReactiveCommand<Unit, Unit> StartCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> CloseCommand { get; }
|
||||
public ReactiveCommand<Unit, Unit> StopCommand { get; }
|
||||
public ICommand StartCommand { get; }
|
||||
public ICommand CloseCommand { get; }
|
||||
public ICommand StopCommand { get; }
|
||||
|
||||
void ExecuteCloseCommand() => _view.Close();
|
||||
void Close() => _view.Close();
|
||||
|
||||
internal void ExecuteStopCommand() => _scanner?.Abort();
|
||||
internal void Stop() => _scanner?.Abort();
|
||||
|
||||
void ExecuteStartCommand()
|
||||
void Start()
|
||||
{
|
||||
StopVisible = true;
|
||||
StartVisible = false;
|
||||
|
||||
@@ -45,36 +45,21 @@ using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Aaru.Settings;
|
||||
using Avalonia.Threading;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class SplashWindowViewModel(SplashWindow view) : ViewModelBase
|
||||
public sealed partial class SplashWindowViewModel(SplashWindow view) : ViewModelBase
|
||||
{
|
||||
[ObservableProperty]
|
||||
double _currentProgress;
|
||||
[ObservableProperty]
|
||||
double _maxProgress;
|
||||
[ObservableProperty]
|
||||
string _message;
|
||||
|
||||
public string Message
|
||||
{
|
||||
get => _message;
|
||||
set => this.RaiseAndSetIfChanged(ref _message, value);
|
||||
}
|
||||
|
||||
public double MaxProgress
|
||||
{
|
||||
get => _maxProgress;
|
||||
set => this.RaiseAndSetIfChanged(ref _maxProgress, value);
|
||||
}
|
||||
|
||||
public double CurrentProgress
|
||||
{
|
||||
get => _currentProgress;
|
||||
set => this.RaiseAndSetIfChanged(ref _currentProgress, value);
|
||||
}
|
||||
|
||||
internal void OnOpened()
|
||||
{
|
||||
Message = UI.Welcome_to_Aaru;
|
||||
|
||||
@@ -34,21 +34,26 @@ using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Localization;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using JetBrains.Annotations;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
public sealed class ViewSectorViewModel : ViewModelBase
|
||||
public sealed partial class ViewSectorViewModel : ViewModelBase
|
||||
{
|
||||
const int HEX_COLUMNS = 32;
|
||||
readonly IMediaImage _inputFormat;
|
||||
bool _longSectorChecked;
|
||||
bool _longSectorVisible;
|
||||
string _printHexText;
|
||||
double _sectorNumber;
|
||||
string _title;
|
||||
string _totalSectorsText;
|
||||
[ObservableProperty]
|
||||
bool _longSectorChecked;
|
||||
[ObservableProperty]
|
||||
bool _longSectorVisible;
|
||||
[ObservableProperty]
|
||||
string _printHexText;
|
||||
double _sectorNumber;
|
||||
[ObservableProperty]
|
||||
string _title;
|
||||
[ObservableProperty]
|
||||
string _totalSectorsText;
|
||||
|
||||
public ViewSectorViewModel([NotNull] IMediaImage inputFormat)
|
||||
{
|
||||
@@ -68,18 +73,13 @@ public sealed class ViewSectorViewModel : ViewModelBase
|
||||
public string SectorLabel => UI.Title_Sector;
|
||||
public string LongSectorLabel => UI.Show_long_sector;
|
||||
|
||||
public string Title
|
||||
{
|
||||
get => _title;
|
||||
set => this.RaiseAndSetIfChanged(ref _title, value);
|
||||
}
|
||||
|
||||
public double SectorNumber
|
||||
{
|
||||
get => _sectorNumber;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref _sectorNumber, value);
|
||||
SetProperty(ref _sectorNumber, value);
|
||||
|
||||
ErrorNumber errno = LongSectorChecked
|
||||
? _inputFormat.ReadSectorLong((ulong)SectorNumber, out byte[] sector)
|
||||
@@ -88,20 +88,4 @@ public sealed class ViewSectorViewModel : ViewModelBase
|
||||
if(errno == ErrorNumber.NoError) PrintHexText = PrintHex.ByteArrayToHexArrayString(sector, HEX_COLUMNS);
|
||||
}
|
||||
}
|
||||
|
||||
public string TotalSectorsText { get; }
|
||||
|
||||
public bool LongSectorChecked
|
||||
{
|
||||
get => _longSectorChecked;
|
||||
set => this.RaiseAndSetIfChanged(ref _longSectorChecked, value);
|
||||
}
|
||||
|
||||
public bool LongSectorVisible { get; }
|
||||
|
||||
public string PrintHexText
|
||||
{
|
||||
get => _printHexText;
|
||||
set => this.RaiseAndSetIfChanged(ref _printHexText, value);
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ public sealed class ImageChecksum : Window
|
||||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
(DataContext as ImageChecksumViewModel)?.ExecuteStopCommand();
|
||||
(DataContext as ImageChecksumViewModel)?.Stop();
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ public sealed class ImageConvert : Window
|
||||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
(DataContext as ImageConvertViewModel)?.ExecuteStopCommand();
|
||||
(DataContext as ImageConvertViewModel)?.Stop();
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ public sealed class ImageEntropy : Window
|
||||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
(DataContext as ImageEntropyViewModel)?.ExecuteStopCommand();
|
||||
(DataContext as ImageEntropyViewModel)?.Stop();
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ public sealed class ImageVerify : Window
|
||||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
(DataContext as ImageVerifyViewModel)?.ExecuteStopCommand();
|
||||
(DataContext as ImageVerifyViewModel)?.Stop();
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ public sealed class MediaDump : Window
|
||||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
(DataContext as MediaDumpViewModel)?.ExecuteStopCommand();
|
||||
(DataContext as MediaDumpViewModel)?.Stop();
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ public sealed class MediaScan : Window
|
||||
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
(DataContext as MediaScanViewModel)?.ExecuteStopCommand();
|
||||
(DataContext as MediaScanViewModel)?.Stop();
|
||||
base.OnClosing(e);
|
||||
}
|
||||
}
|
||||
@@ -6,11 +6,11 @@
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="11.3.4"/>
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="11.3.4"/>
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="11.3.4"/>
|
||||
<PackageVersion Include="Avalonia.ReactiveUI" Version="11.3.4"/>
|
||||
<PackageVersion Include="Avalonia.Themes.Fluent" Version="11.3.4"/>
|
||||
<PackageVersion Include="Avalonia" Version="11.3.4"/>
|
||||
<PackageVersion Include="Claunia.Encoding" Version="1.9.2"/>
|
||||
<PackageVersion Include="Claunia.RsrcFork" Version="1.2.0"/>
|
||||
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0"/>
|
||||
<PackageVersion Include="DotNetZip" Version="1.16.0"/>
|
||||
<PackageVersion Include="ErrorProne.NET.CoreAnalyzers" Version="0.1.2"/>
|
||||
<PackageVersion Include="ErrorProne.NET.Structs" Version="0.1.2"/>
|
||||
|
||||
Reference in New Issue
Block a user