diff --git a/ModernKeePass/Common/DatabaseHelper.cs b/ModernKeePass/Common/DatabaseHelper.cs index 8881712..d966e22 100644 --- a/ModernKeePass/Common/DatabaseHelper.cs +++ b/ModernKeePass/Common/DatabaseHelper.cs @@ -21,7 +21,7 @@ namespace ModernKeePass.Common public GroupVm RootGroup { get; set; } public DatabaseStatus Status { get; private set; } = DatabaseStatus.Closed; - public string Name => _pwDatabase?.Name; + public string Name => DatabaseFile?.Name; public StorageFile DatabaseFile { diff --git a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs index c1f25e5..ce99f2c 100644 --- a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs +++ b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using Windows.System; using Windows.UI.Core; using Windows.UI.Xaml; @@ -30,11 +31,14 @@ namespace ModernKeePass.Controls InitializeComponent(); } + public event PasswordCheckingEventHandler ValidationChecking; + public delegate void PasswordCheckingEventHandler(object sender, EventArgs e); public event PasswordCheckedEventHandler ValidationChecked; public delegate void PasswordCheckedEventHandler(object sender, PasswordEventArgs e); private void OpenButton_OnClick(object sender, RoutedEventArgs e) { + ValidationChecking?.Invoke(this, new EventArgs()); var app = (App)Application.Current; StatusTextBlock.Text = app.Database.Open(PasswordBox.Password, CreateNew); if (app.Database.Status == DatabaseHelper.DatabaseStatus.Opened) diff --git a/ModernKeePass/Pages/RecentDatabasesPage.xaml b/ModernKeePass/Pages/RecentDatabasesPage.xaml index 27bda3a..e2751c7 100644 --- a/ModernKeePass/Pages/RecentDatabasesPage.xaml +++ b/ModernKeePass/Pages/RecentDatabasesPage.xaml @@ -22,8 +22,9 @@ - - + + + diff --git a/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs b/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs index 66ee557..e74df14 100644 --- a/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs +++ b/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs @@ -1,6 +1,9 @@ -using Windows.UI.Xaml.Controls; +using System; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; using ModernKeePass.Events; +using ModernKeePass.ViewModels; // Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238 @@ -28,5 +31,13 @@ namespace ModernKeePass.Pages { _mainFrame.Navigate(typeof(GroupDetailPage), e.RootGroup); } + + private void OpenDatabaseUserControl_OnValidationChecking(object sender, EventArgs e) + { + //throw new NotImplementedException(); + var viewModel = DataContext as RecentVm; + var app = (App)Application.Current; + app.Database.DatabaseFile = viewModel.SelectedItem.DatabaseFile; + } } } diff --git a/ModernKeePass/ViewModels/Items/RecentItemVm.cs b/ModernKeePass/ViewModels/Items/RecentItemVm.cs index b09a268..412e04e 100644 --- a/ModernKeePass/ViewModels/Items/RecentItemVm.cs +++ b/ModernKeePass/ViewModels/Items/RecentItemVm.cs @@ -1,13 +1,25 @@ -using Windows.Storage; +using System; +using Windows.Storage; using ModernKeePass.Common; +using Windows.Storage.AccessCache; namespace ModernKeePass.ViewModels { public class RecentItemVm: NotifyPropertyChangedBase { private bool _isSelected; - public string Token { get; set; } - public string Name { get; set; } + + public RecentItemVm(AccessListEntry entry, StorageFile file) + { + Token = entry.Token; + Name = entry.Metadata; + DatabaseFile = file; + } + + public StorageFile DatabaseFile { get; private set; } + public string Token { get; private set; } + public string Name { get; private set; } + public string Path => DatabaseFile.Path; public bool IsSelected { diff --git a/ModernKeePass/ViewModels/RecentVm.cs b/ModernKeePass/ViewModels/RecentVm.cs index 6e09966..03d0925 100644 --- a/ModernKeePass/ViewModels/RecentVm.cs +++ b/ModernKeePass/ViewModels/RecentVm.cs @@ -1,8 +1,6 @@ using System; using System.Collections.ObjectModel; -using System.Linq; using Windows.Storage.AccessCache; -using Windows.UI.Xaml; using ModernKeePass.Common; namespace ModernKeePass.ViewModels @@ -10,7 +8,7 @@ namespace ModernKeePass.ViewModels public class RecentVm : NotifyPropertyChangedBase { private RecentItemVm _selectedItem; - private ObservableCollection _recentItems; + private ObservableCollection _recentItems = new ObservableCollection(); public ObservableCollection RecentItems { @@ -30,30 +28,27 @@ namespace ModernKeePass.ViewModels } SetProperty(ref _selectedItem, value); - - if (_selectedItem != null) - { - _selectedItem.IsSelected = true; - } - - var mru = StorageApplicationPermissions.MostRecentlyUsedList; - var database = ((App)Application.Current).Database; - try - { - database.DatabaseFile = mru.GetFileAsync(SelectedItem.Token).GetAwaiter().GetResult(); - } - catch (Exception e) - { - } + + if (_selectedItem == null) return; + _selectedItem.IsSelected = true; } } public RecentVm() { var mru = StorageApplicationPermissions.MostRecentlyUsedList; - RecentItems = new ObservableCollection( - from entry in mru.Entries - select new RecentItemVm { Name = entry.Metadata, Token = entry.Token }); + foreach (var entry in mru.Entries) + { + try + { + var file = mru.GetFileAsync(entry.Token).GetAwaiter().GetResult(); + RecentItems.Add(new RecentItemVm(entry, file)); + } + catch (Exception) + { + mru.Remove(entry.Token); + } + } if (RecentItems.Count > 0) SelectedItem = RecentItems[0]; }