From 14e068324e1d976f759f12a92e5e4be002c750be Mon Sep 17 00:00:00 2001 From: Slavasil Date: Fri, 5 Dec 2025 02:08:19 +0300 Subject: [PATCH] detect lock status when the window opens --- .../ViewModels/LockedRepositoryViewModel.cs | 8 +++++ .../ViewModels/RepositoryWindowViewModel.cs | 30 ++++++++++++++++++- .../ViewModels/UnlockedRepositoryViewModel.cs | 8 +++++ src/KeyKeeper/Views/MainWindow.axaml.cs | 3 +- 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs b/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs index 1221161..360db26 100644 --- a/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs +++ b/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs @@ -1,5 +1,13 @@ +using KeyKeeper.PasswordStore; + namespace KeyKeeper.ViewModels; public class LockedRepositoryViewModel : ViewModelBase { + private IPassStore passStore; + + public LockedRepositoryViewModel(IPassStore store) + { + passStore = store; + } } \ No newline at end of file diff --git a/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs b/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs index 3385820..8365bbf 100644 --- a/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs +++ b/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs @@ -1,11 +1,39 @@ +using KeyKeeper.PasswordStore; + namespace KeyKeeper.ViewModels; public class RepositoryWindowViewModel : ViewModelBase { - private object currentPage = new LockedRepositoryViewModel(); + private object currentPage; + private IPassStore passStore; + public object CurrentPage { get => currentPage; set { currentPage = value; OnPropertyChanged(nameof(CurrentPage)); } } + + public RepositoryWindowViewModel(IPassStore store) + { + passStore = store; + UpdateLockStatus(); + } + + private void UpdateLockStatus() + { + if (currentPage is LockedRepositoryViewModel && !passStore.Locked) + SwitchToUnlocked(); + else if (currentPage is UnlockedRepositoryViewModel && passStore.Locked) + SwitchToLocked(); + } + + private void SwitchToUnlocked() + { + currentPage = new UnlockedRepositoryViewModel(passStore); + } + + private void SwitchToLocked() + { + currentPage = new LockedRepositoryViewModel(passStore); + } } \ No newline at end of file diff --git a/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs b/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs index 9f79977..23b2e71 100644 --- a/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs +++ b/src/KeyKeeper/ViewModels/UnlockedRepositoryViewModel.cs @@ -1,5 +1,13 @@ +using KeyKeeper.PasswordStore; + namespace KeyKeeper.ViewModels; public class UnlockedRepositoryViewModel : ViewModelBase { + private IPassStore passStore; + + public UnlockedRepositoryViewModel(IPassStore store) + { + passStore = store; + } } \ No newline at end of file diff --git a/src/KeyKeeper/Views/MainWindow.axaml.cs b/src/KeyKeeper/Views/MainWindow.axaml.cs index fdb7704..3bf9f0c 100644 --- a/src/KeyKeeper/Views/MainWindow.axaml.cs +++ b/src/KeyKeeper/Views/MainWindow.axaml.cs @@ -84,8 +84,7 @@ namespace KeyKeeper.Views { var repositoryWindow = new RepositoryWindow() { - DataContext = new RepositoryWindowViewModel(), - PassStore = store, + DataContext = new RepositoryWindowViewModel(store), WindowStartupLocation = WindowStartupLocation.CenterScreen }; repositoryWindow.Closed += (s, e) => this.Show();