2f61e5dc00
- Updated HookBrowserViewModel, MainViewModel, SettingsViewModel, and SyncViewModel to inherit from BaseViewModel. - Introduced BaseViewModel with methods for running actions on the UI thread. - Enhanced SyncViewModel to handle property changes on the UI thread. - Refactored ExtractorService to return ExtractorResult instead of IReadOnlyList<HookDefinition>. - Added ExtractorResult class to encapsulate extraction results, including success status and error messages. - Implemented UIProgress class for reporting progress on the UI thread. - Updated hook_groups.json with additional classes and methods for various categories. - Improved error handling and logging in ExtractorService and SyncViewModel.
108 lines
3.4 KiB
C#
108 lines
3.4 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
|
|
namespace gregExtractor.GUI.ViewModels;
|
|
|
|
public sealed class MainViewModel : BaseViewModel
|
|
{
|
|
private NavigationItemViewModel? _selectedNavigationItem;
|
|
private object? _currentPageViewModel;
|
|
private bool _isMaximized;
|
|
|
|
public MainViewModel()
|
|
{
|
|
Extractor = new ExtractorViewModel();
|
|
Coverage = new CoverageViewModel();
|
|
Sync = new SyncViewModel();
|
|
Create = new CreateViewModel();
|
|
Hooks = new HookBrowserViewModel();
|
|
Settings = new SettingsViewModel();
|
|
|
|
NavigationItems.Add(new NavigationItemViewModel("extractor", "Extractor", "🔍"));
|
|
NavigationItems.Add(new NavigationItemViewModel("coverage", "Coverage", "📊"));
|
|
NavigationItems.Add(new NavigationItemViewModel("sync", "Sync", "🔄"));
|
|
NavigationItems.Add(new NavigationItemViewModel("create", "Create", "⚡"));
|
|
NavigationItems.Add(new NavigationItemViewModel("hooks", "Hooks", "📋"));
|
|
NavigationItems.Add(new NavigationItemViewModel("settings", "Settings", "⚙"));
|
|
|
|
SelectNavItemCommand = new RelayCommand<NavigationItemViewModel?>(SelectNavItem);
|
|
|
|
SelectNavItem(NavigationItems.FirstOrDefault());
|
|
|
|
_ = Hooks.RefreshAsync();
|
|
}
|
|
|
|
public ExtractorViewModel Extractor { get; }
|
|
|
|
public CoverageViewModel Coverage { get; }
|
|
|
|
public SyncViewModel Sync { get; }
|
|
|
|
public CreateViewModel Create { get; }
|
|
|
|
public HookBrowserViewModel Hooks { get; }
|
|
|
|
public SettingsViewModel Settings { get; }
|
|
|
|
public ObservableCollection<NavigationItemViewModel> NavigationItems { get; } = new();
|
|
|
|
public NavigationItemViewModel? SelectedNavigationItem
|
|
{
|
|
get => _selectedNavigationItem;
|
|
set => SetProperty(ref _selectedNavigationItem, value);
|
|
}
|
|
|
|
public object? CurrentPageViewModel
|
|
{
|
|
get => _currentPageViewModel;
|
|
set => SetProperty(ref _currentPageViewModel, value);
|
|
}
|
|
|
|
public string GamePathHint => string.IsNullOrWhiteSpace(Extractor.GamePath) ? "Kein Spiel gefunden" : Extractor.GamePath;
|
|
|
|
public bool IsGameDetected => !string.IsNullOrWhiteSpace(Extractor.GamePath);
|
|
|
|
public string VersionText => "v1.0.0";
|
|
|
|
public bool IsMaximized
|
|
{
|
|
get => _isMaximized;
|
|
set => SetProperty(ref _isMaximized, value);
|
|
}
|
|
|
|
public IRelayCommand<NavigationItemViewModel?> SelectNavItemCommand { get; }
|
|
|
|
public void WireBrowseHandler(Func<string?, Task<string?>> browseHandler)
|
|
{
|
|
Extractor.BrowseFolderHandler = browseHandler;
|
|
Coverage.BrowseFolderHandler = browseHandler;
|
|
Sync.BrowseFolderHandler = browseHandler;
|
|
Create.BrowseFolderHandler = browseHandler;
|
|
Settings.BrowseFolderHandler = browseHandler;
|
|
}
|
|
|
|
private void SelectNavItem(NavigationItemViewModel? item)
|
|
{
|
|
if (item is null)
|
|
return;
|
|
|
|
foreach (NavigationItemViewModel navItem in NavigationItems)
|
|
navItem.IsSelected = ReferenceEquals(navItem, item);
|
|
|
|
SelectedNavigationItem = item;
|
|
CurrentPageViewModel = item.Key switch
|
|
{
|
|
"extractor" => Extractor,
|
|
"coverage" => Coverage,
|
|
"sync" => Sync,
|
|
"create" => Create,
|
|
"hooks" => Hooks,
|
|
"settings" => Settings,
|
|
_ => Extractor,
|
|
};
|
|
|
|
OnPropertyChanged(nameof(GamePathHint));
|
|
OnPropertyChanged(nameof(IsGameDetected));
|
|
}
|
|
}
|