diff --git a/ModernKeePass/Interfaces/IRecent.cs b/ModernKeePass/Interfaces/IRecent.cs index f24f409..59b8b50 100644 --- a/ModernKeePass/Interfaces/IRecent.cs +++ b/ModernKeePass/Interfaces/IRecent.cs @@ -10,5 +10,6 @@ namespace ModernKeePass.Interfaces Task GetFileAsync(string token); ObservableCollection GetAllFiles(bool removeIfNonExistant = true); void Add(IStorageItem file, string metadata); + void ClearAll(); } } \ No newline at end of file diff --git a/ModernKeePass/Pages/EntryDetailPage.xaml b/ModernKeePass/Pages/EntryDetailPage.xaml index 20d5453..dbd76a3 100644 --- a/ModernKeePass/Pages/EntryDetailPage.xaml +++ b/ModernKeePass/Pages/EntryDetailPage.xaml @@ -377,6 +377,13 @@ + + + + + + + diff --git a/ModernKeePass/Pages/GroupDetailPage.xaml b/ModernKeePass/Pages/GroupDetailPage.xaml index 2269c4b..7bc5ebe 100644 --- a/ModernKeePass/Pages/GroupDetailPage.xaml +++ b/ModernKeePass/Pages/GroupDetailPage.xaml @@ -27,6 +27,13 @@ + + + + + + + diff --git a/ModernKeePass/Pages/MainPage.xaml b/ModernKeePass/Pages/MainPage.xaml index 1954123..c8d209a 100644 --- a/ModernKeePass/Pages/MainPage.xaml +++ b/ModernKeePass/Pages/MainPage.xaml @@ -65,7 +65,6 @@ Background="{ThemeResource AppBarBackgroundThemeBrush}" ItemsSource="{Binding Source={StaticResource MenuItemsSource}}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" - IsSynchronizedWithCurrentItem="False" ItemContainerStyle="{StaticResource ListViewLeftIndicatorItemExpanded}"> diff --git a/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml b/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml index 7c9ac06..d4d0192 100644 --- a/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml +++ b/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml @@ -17,36 +17,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ModernKeePass/Services/RecentService.cs b/ModernKeePass/Services/RecentService.cs index 6fb7ff4..fa8625d 100644 --- a/ModernKeePass/Services/RecentService.cs +++ b/ModernKeePass/Services/RecentService.cs @@ -37,6 +37,11 @@ namespace ModernKeePass.Services _mru.Add(file, metadata); } + public void ClearAll() + { + _mru.Clear(); + } + public async Task GetFileAsync(string token) { return await _mru.GetFileAsync(token); diff --git a/ModernKeePass/Strings/en-US/Resources.resw b/ModernKeePass/Strings/en-US/Resources.resw index 725678f..114fb48 100644 --- a/ModernKeePass/Strings/en-US/Resources.resw +++ b/ModernKeePass/Strings/en-US/Resources.resw @@ -228,6 +228,9 @@ Upper case (A, B, C, ...) + + Clear all + Save as... diff --git a/ModernKeePass/ViewModels/CompositeKeyVm.cs b/ModernKeePass/ViewModels/CompositeKeyVm.cs index 6cea5aa..acb86a6 100644 --- a/ModernKeePass/ViewModels/CompositeKeyVm.cs +++ b/ModernKeePass/ViewModels/CompositeKeyVm.cs @@ -22,16 +22,6 @@ namespace ModernKeePass.ViewModels Success = 5 } - //private readonly App _app = Application.Current as App; - private bool _hasPassword; - private bool _hasKeyFile; - private string _password = string.Empty; - private string _status; - private StatusTypes _statusType; - private StorageFile _keyFile; - private string _keyFileText; - private readonly IResource _resource; - public IDatabase Database { get; set; } public bool HasPassword @@ -54,7 +44,7 @@ namespace ModernKeePass.ViewModels } } - public bool IsValid => HasPassword || HasKeyFile && KeyFile != null; + public bool IsValid => !_isOpening && (HasPassword || HasKeyFile && KeyFile != null); public string Status { @@ -101,6 +91,16 @@ namespace ModernKeePass.ViewModels public double PasswordComplexityIndicator => QualityEstimation.EstimatePasswordBits(Password?.ToCharArray()); + private bool _hasPassword; + private bool _hasKeyFile; + private bool _isOpening; + private string _password = string.Empty; + private string _status; + private StatusTypes _statusType; + private StorageFile _keyFile; + private string _keyFileText; + private readonly IResource _resource; + public CompositeKeyVm() : this((Application.Current as App)?.Database, new ResourcesService()) { } public CompositeKeyVm(IDatabase database, IResource resource) @@ -115,12 +115,17 @@ namespace ModernKeePass.ViewModels var error = string.Empty; try { + _isOpening = true; Database.Open(CreateCompositeKey(), createNew); } catch (Exception e) { error = $"{_resource.GetResourceValue("CompositeKeyErrorOpen")}: {e.Message}"; } + finally + { + _isOpening = false; + } switch ((DatabaseService.DatabaseStatus)Database.Status) { case DatabaseService.DatabaseStatus.Opened: diff --git a/ModernKeePass/ViewModels/MainVm.cs b/ModernKeePass/ViewModels/MainVm.cs index 6c1ee99..5ac97c0 100644 --- a/ModernKeePass/ViewModels/MainVm.cs +++ b/ModernKeePass/ViewModels/MainVm.cs @@ -111,6 +111,8 @@ namespace ModernKeePass.ViewModels }; // Auto-select the Recent Items menu item if the conditions are met SelectedItem = mainMenuItems.FirstOrDefault(m => m.IsSelected); + + // Add currently opened database to the menu if (database != null && database.Status == (int) DatabaseService.DatabaseStatus.Opened) mainMenuItems.Add(new MainMenuItemVm { diff --git a/ModernKeePass/ViewModels/RecentVm.cs b/ModernKeePass/ViewModels/RecentVm.cs index aba549f..338f4e0 100644 --- a/ModernKeePass/ViewModels/RecentVm.cs +++ b/ModernKeePass/ViewModels/RecentVm.cs @@ -7,6 +7,7 @@ namespace ModernKeePass.ViewModels { public class RecentVm : NotifyPropertyChangedBase, IHasSelectableObject { + private readonly IRecent _recent; private ISelectableModel _selectedItem; private ObservableCollection _recentItems = new ObservableCollection(); @@ -39,10 +40,16 @@ namespace ModernKeePass.ViewModels public RecentVm(IRecent recent) { - RecentItems = recent.GetAllFiles(); + _recent = recent; + RecentItems = _recent.GetAllFiles(); if (RecentItems.Count > 0) SelectedItem = RecentItems[0] as RecentItemVm; } + public void ClearAll() + { + _recent.ClearAll(); + RecentItems.Clear(); + } } }