From 1fa799bdf885744c90ab292a691b72842a443c8d Mon Sep 17 00:00:00 2001 From: Geoffroy BONNEVILLE Date: Tue, 7 Apr 2020 12:48:18 +0200 Subject: [PATCH] FileInfo overhaul Opening DB works again --- .../CreateDatabase/CreateDatabaseCommand.cs | 2 +- .../Queries/OpenDatabase/OpenDatabaseQuery.cs | 2 +- ModernKeePass.Domain/Dtos/FileInfo.cs | 1 + .../UWP/UwpRecentFilesClient.cs | 11 +++--- ModernKeePass/App.xaml.cs | 5 +-- ModernKeePass/ViewModels/CompositeKeyVm.cs | 2 +- .../ViewModels/Items/RecentItemVm.cs | 36 ++++++++++++++----- ModernKeePass/ViewModels/OpenVm.cs | 24 +++++++++++-- ModernKeePass/ViewModels/RecentVm.cs | 2 +- .../Views/MainPageFrames/NewDatabasePage.xaml | 2 +- .../MainPageFrames/NewDatabasePage.xaml.cs | 3 +- .../MainPageFrames/OpenDatabasePage.xaml | 2 +- .../MainPageFrames/OpenDatabasePage.xaml.cs | 5 +-- .../MainPageFrames/RecentDatabasesPage.xaml | 2 +- .../CompositeKeyUserControl.xaml.cs | 5 +-- 15 files changed, 73 insertions(+), 31 deletions(-) diff --git a/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs b/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs index 12df1e9..031f3d0 100644 --- a/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs +++ b/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs @@ -31,7 +31,7 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase await _database.Create(file, new Credentials { - KeyFileContents = await _file.OpenBinaryFile(message.KeyFilePath), + KeyFileContents = !string.IsNullOrEmpty(message.KeyFilePath) ? await _file.OpenBinaryFile(message.KeyFilePath) : null, Password = message.Password }); _database.FileAccessToken = message.FilePath; diff --git a/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs b/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs index c66d446..6f1b5fc 100644 --- a/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs +++ b/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs @@ -30,7 +30,7 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase var file = await _file.OpenBinaryFile(request.FilePath); await _database.Open(file, new Credentials { - KeyFileContents = await _file.OpenBinaryFile(request.KeyFilePath), + KeyFileContents = !string.IsNullOrEmpty(request.KeyFilePath) ? await _file.OpenBinaryFile(request.KeyFilePath): null, Password = request.Password }); _database.FileAccessToken = request.FilePath; diff --git a/ModernKeePass.Domain/Dtos/FileInfo.cs b/ModernKeePass.Domain/Dtos/FileInfo.cs index ad122b6..721feb0 100644 --- a/ModernKeePass.Domain/Dtos/FileInfo.cs +++ b/ModernKeePass.Domain/Dtos/FileInfo.cs @@ -2,6 +2,7 @@ { public class FileInfo { + public string Id { get; set; } public string Name { get; set; } public string Path { get; set; } } diff --git a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs index 7dd750a..7194adc 100644 --- a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs +++ b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs @@ -18,11 +18,12 @@ namespace ModernKeePass.Infrastructure.UWP { var recentEntry = _mru.Entries.FirstOrDefault(e => e.Token == token); var file = await _mru.GetFileAsync(token); - StorageApplicationPermissions.FutureAccessList.AddOrReplace(recentEntry.Metadata, file); + StorageApplicationPermissions.FutureAccessList.AddOrReplace(token, file); return new FileInfo { + Id = token, Name = file.DisplayName, - Path = recentEntry.Metadata + Path = file.Path }; } @@ -46,8 +47,8 @@ namespace ModernKeePass.Infrastructure.UWP public async Task Add(FileInfo recentItem) { - var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(recentItem.Path); - _mru.Add(file, recentItem.Path); + var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(recentItem.Id); + _mru.Add(file); } public void ClearAll() @@ -55,7 +56,7 @@ namespace ModernKeePass.Infrastructure.UWP for (var i = _mru.Entries.Count; i > 0; i--) { var entry = _mru.Entries[i]; - StorageApplicationPermissions.FutureAccessList.Remove(entry.Metadata); + StorageApplicationPermissions.FutureAccessList.Remove(entry.Token); _mru.Remove(entry.Token); } } diff --git a/ModernKeePass/App.xaml.cs b/ModernKeePass/App.xaml.cs index 20b2421..843e0f5 100644 --- a/ModernKeePass/App.xaml.cs +++ b/ModernKeePass/App.xaml.cs @@ -239,8 +239,9 @@ namespace ModernKeePass var token = StorageApplicationPermissions.FutureAccessList.Add(file); var fileInfo = new FileInfo { - Path = token, - Name = file.DisplayName + Id = token, + Name = file.DisplayName, + Path = file.Path }; rootFrame.Navigate(typeof(MainPage), fileInfo); } diff --git a/ModernKeePass/ViewModels/CompositeKeyVm.cs b/ModernKeePass/ViewModels/CompositeKeyVm.cs index 683a1c6..36db774 100644 --- a/ModernKeePass/ViewModels/CompositeKeyVm.cs +++ b/ModernKeePass/ViewModels/CompositeKeyVm.cs @@ -170,7 +170,7 @@ namespace ModernKeePass.ViewModels public async Task CreateKeyFile(FileInfo file) { // TODO: implement entropy generator - await _mediator.Send(new GenerateKeyFileCommand {KeyFilePath = file.Path}); + await _mediator.Send(new GenerateKeyFileCommand {KeyFilePath = file.Id}); KeyFilePath = file.Path; KeyFileText = file.Name; } diff --git a/ModernKeePass/ViewModels/Items/RecentItemVm.cs b/ModernKeePass/ViewModels/Items/RecentItemVm.cs index 2482049..514a570 100644 --- a/ModernKeePass/ViewModels/Items/RecentItemVm.cs +++ b/ModernKeePass/ViewModels/Items/RecentItemVm.cs @@ -1,5 +1,4 @@ -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using ModernKeePass.Application.Common.Interfaces; using ModernKeePass.Domain.AOP; using ModernKeePass.Domain.Dtos; @@ -11,10 +10,27 @@ namespace ModernKeePass.ViewModels { private readonly IRecentProxy _recent; private bool _isSelected; - - public string Token { get; } - public string Name { get; } - public string Path => string.Empty; + private string _name; + private string _token; + private string _path; + + public string Token + { + get { return _token; } + set { SetProperty(ref _token, value); } + } + + public string Name + { + get { return _name; } + set { SetProperty(ref _name, value); } + } + + public string Path + { + get { return _path; } + set { SetProperty(ref _path, value); } + } public bool IsSelected { @@ -26,13 +42,15 @@ namespace ModernKeePass.ViewModels public RecentItemVm(IRecentProxy recent, FileInfo file) { _recent = recent; - Token = file.Path; + Token = file.Id; Name = file.Name; + Path = file.Path; } - public async Task UpdateAccessTime() + // Called from XAML + public void UpdateAccessTime() { - await _recent.Get(Token); + _recent.Get(Token).Wait(); } } } diff --git a/ModernKeePass/ViewModels/OpenVm.cs b/ModernKeePass/ViewModels/OpenVm.cs index 752518e..090dd83 100644 --- a/ModernKeePass/ViewModels/OpenVm.cs +++ b/ModernKeePass/ViewModels/OpenVm.cs @@ -9,10 +9,28 @@ namespace ModernKeePass.ViewModels public class OpenVm: NotifyPropertyChangedBase { private readonly IRecentProxy _recent; + private string _name; + private string _path; + private string _token; public bool IsFileSelected => !string.IsNullOrEmpty(Path); - public string Name { get; private set; } - public string Path { get; private set; } + public string Token + { + get { return _token; } + set { SetProperty(ref _token, value); } + } + + public string Name + { + get { return _name; } + private set { SetProperty(ref _name, value); } + } + + public string Path + { + get { return _path; } + private set { SetProperty(ref _path, value); } + } public OpenVm(): this(App.Services.GetService()) { } @@ -23,9 +41,9 @@ namespace ModernKeePass.ViewModels public async Task OpenFile(FileInfo file) { + Token = file.Id; Name = file.Name; Path = file.Path; - OnPropertyChanged(nameof(Name)); OnPropertyChanged(nameof(IsFileSelected)); await AddToRecentList(file); } diff --git a/ModernKeePass/ViewModels/RecentVm.cs b/ModernKeePass/ViewModels/RecentVm.cs index 36bb79c..1ccee89 100644 --- a/ModernKeePass/ViewModels/RecentVm.cs +++ b/ModernKeePass/ViewModels/RecentVm.cs @@ -52,7 +52,7 @@ namespace ModernKeePass.ViewModels RecentItems = new ObservableCollection(_recent.GetAll().GetAwaiter().GetResult() .Select(r => new RecentItemVm(r))); if (RecentItems.Count > 0) - SelectedItem = RecentItems[0] as RecentItemVm; + SelectedItem = RecentItems[0]; } private void ClearAll() diff --git a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml index 55dbb39..497a9e7 100644 --- a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml +++ b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml @@ -21,7 +21,7 @@ - + diff --git a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs index 2e53719..af060fa 100644 --- a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs +++ b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs @@ -50,7 +50,8 @@ namespace ModernKeePass.Views var token = StorageApplicationPermissions.FutureAccessList.Add(file); var fileInfo = new FileInfo { - Path = token, + Id = token, + Path = file.Path, Name = file.DisplayName }; await Model.OpenFile(fileInfo); diff --git a/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml b/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml index c9f60d1..84b2768 100644 --- a/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml +++ b/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml @@ -25,7 +25,7 @@ - + diff --git a/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs index eb1b3ef..436d0c5 100644 --- a/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs +++ b/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs @@ -49,8 +49,9 @@ namespace ModernKeePass.Views var token = StorageApplicationPermissions.FutureAccessList.Add(file); var fileInfo = new FileInfo { - Path = token, - Name = file.DisplayName + Path = file.Path, + Name = file.DisplayName, + Id = token }; await Model.OpenFile(fileInfo); } diff --git a/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml b/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml index 860da1c..d306e04 100644 --- a/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml +++ b/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml @@ -45,7 +45,7 @@ - + diff --git a/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs b/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs index 92f1767..a7c3baf 100644 --- a/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs +++ b/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs @@ -172,8 +172,9 @@ namespace ModernKeePass.Views.UserControls var token = StorageApplicationPermissions.FutureAccessList.Add(file); await Model.CreateKeyFile(new FileInfo { - Path = token, - Name = file.DisplayName + Id = token, + Name = file.DisplayName, + Path = file.Path }); }