diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-01-13 08:22:09 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-01-13 08:22:09 +0800 |
| commit | 5d8b29664c13e6e5c6292d79973980182ece1441 (patch) | |
| tree | ced2f67c82ce0748dbd0090f0fde6b921329d259 /JVDesktop/ViewModels/DashboardViewModel.cs | |
| parent | 7d59c15b0efd2aa5a27aef356a265f850a2e7e2f (diff) | |
Diffstat (limited to 'JVDesktop/ViewModels/DashboardViewModel.cs')
| -rw-r--r-- | JVDesktop/ViewModels/DashboardViewModel.cs | 168 |
1 files changed, 163 insertions, 5 deletions
diff --git a/JVDesktop/ViewModels/DashboardViewModel.cs b/JVDesktop/ViewModels/DashboardViewModel.cs index 5ae7d95..9371ddd 100644 --- a/JVDesktop/ViewModels/DashboardViewModel.cs +++ b/JVDesktop/ViewModels/DashboardViewModel.cs @@ -1,15 +1,173 @@ -using System; +using System.IO; +using System.Threading.Tasks; +using CommandLineWrapper; +using CommandLineWrapper.JsonResults.Implements; +using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; namespace JVDesktop.ViewModels; public partial class DashboardViewModel : ViewModel { - public string Greeting => "Welcome to Avalonia!"; + // Getters + private StatusResultGetter? _statusResultGetter; + private InfoResultGetter? _infoResultGetter; + private AccountListResultGetter? _accountListResultGetter; + private HereResultGetter? _hereResultGetter; + private ShareListResultGetter? _shareListResultGetter; + private ShareSeeResultGetter? _shareSeeResultGetter; + private SheetAlignTasksResultGetter? _sheetAlignTasksResultGetter; + private SheetListResultGetter? _sheetListResultGetter; - [RelayCommand] - private void ButtonClick() + /// <summary> + /// Workspace object + /// </summary> + [ObservableProperty] + private JVCSWorkspace? _workspace; + + /// <summary> + /// If the workspace object exists, it proves the workspace is initialized + /// </summary> + public bool WorkspaceInitialized => Workspace != null; + + /// <summary> + /// Current workspace directory + /// </summary> + [ObservableProperty] + private string _currentWorkspaceDirectory = ""; + + /// <summary> + /// Currently used account + /// </summary> + [ObservableProperty] + private string _currentAccount = "unknown"; + + /// <summary> + /// Whether HOST mode is currently enabled + /// </summary> + [ObservableProperty] + private bool? _hostMode; + + /// <summary> + /// Currently used structure sheet (empty means no sheet is used) + /// </summary> + [ObservableProperty] + private string? _currentSheet; + + /// <summary> + /// Upstream of the current workspace + /// </summary> + [ObservableProperty] + private string _currentUpstream = "127.0.0.1"; + + /// <summary> + /// Result from the last alignment check + /// </summary> + [ObservableProperty] + private AlignResult? _alignResult; + + /// <summary> + /// Result from the last current directory information collection + /// </summary> + [ObservableProperty] + private HereResult? _hereResult; + + /// <summary> + /// Result from the last change status collection + /// </summary> + [ObservableProperty] + private StatusResult? _statusResult; + + /// <summary> + /// Result from the last sheet detection + /// </summary> + [ObservableProperty] + private SheetListResult? _sheetListResult; + + /// <summary> + /// Result from the last account detection + /// </summary> + [ObservableProperty] + private AccountListResult? _accountListResult; + + /// <summary> + /// Triggered when the workspace changes + /// </summary> + partial void OnWorkspaceChanged(JVCSWorkspace? value) { - Console.WriteLine("Button clicked"); + // Update workspace initialization status + OnPropertyChanged(nameof(WorkspaceInitialized)); + + // Clear status + if (value == null) + { + StatusClean(); + return; + } + + // Initial load + _ = ReloadFromWorkspace(value); + } + + /// <summary> + /// Clear status + /// </summary> + private void StatusClean() + { + CurrentWorkspaceDirectory = ""; + CurrentAccount = "unknown"; + HostMode = null; + CurrentSheet = null; + CurrentUpstream = "127.0.0.1"; + AlignResult = null; + HereResult = null; + StatusResult = null; + SheetListResult = null; + } + + /// <summary> + /// Load status from the workspace object + /// </summary> + /// <param name="workspace"> Workspace </param> + private async Task ReloadFromWorkspace(JVCSWorkspace workspace) + { + InitializeGetters(workspace); + + var alignTask = _sheetAlignTasksResultGetter?.Get(workspace)!; + var hereTask = _hereResultGetter?.Get(workspace)!; + var statusTask = _statusResultGetter?.Get(workspace)!; + var sheetListTask = _sheetListResultGetter?.Get(workspace)!; + var accountListTask = _accountListResultGetter?.Get(workspace)!; + + await Task.WhenAll(alignTask, hereTask, statusTask, sheetListTask, accountListTask); + + AlignResult = await alignTask; + HereResult = await hereTask; + StatusResult = await statusTask; + SheetListResult = await sheetListTask; + AccountListResult = await accountListTask; + } + + /// <summary> + /// Initializes all getters if they are null. + /// </summary> + /// <param name="workspace"> Workspace </param> + private void InitializeGetters(JVCSWorkspace workspace) + { + if (Workspace == null) + return; + + var workspaceDirectory = ""; + if (Workspace.SuccessInitialized) + workspaceDirectory = Workspace.WorkspaceDirectory; + + _statusResultGetter ??= new StatusResultGetter(); + _infoResultGetter ??= new InfoResultGetter(""); + _accountListResultGetter ??= new AccountListResultGetter(); + _hereResultGetter ??= new HereResultGetter(new DirectoryInfo(workspaceDirectory)); + _shareListResultGetter ??= new ShareListResultGetter(); + _shareSeeResultGetter ??= new ShareSeeResultGetter(""); + _sheetAlignTasksResultGetter ??= new SheetAlignTasksResultGetter(); + _sheetListResultGetter ??= new SheetListResultGetter(); } } |
