From df973c5f62b21fd28fad4327a5eb21fefd3b0a95 Mon Sep 17 00:00:00 2001 From: Geoffroy BONNEVILLE Date: Fri, 24 Apr 2020 16:16:48 +0200 Subject: [PATCH] StorageFile client more intelligent Save is working again --- .../Common/Interfaces/IRecentProxy.cs | 2 -- .../Queries/OpenDatabase/OpenDatabaseQuery.cs | 6 ++--- .../UWP/StorageFileClient.cs | 15 ++++++++++--- .../UWP/UwpRecentFilesClient.cs | 22 +------------------ ModernKeePass/ViewModels/MainVm.cs | 2 +- 5 files changed, 16 insertions(+), 31 deletions(-) diff --git a/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs b/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs index edea303..f54588e 100644 --- a/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs +++ b/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Threading.Tasks; using ModernKeePass.Domain.Dtos; namespace ModernKeePass.Application.Common.Interfaces @@ -7,7 +6,6 @@ namespace ModernKeePass.Application.Common.Interfaces public interface IRecentProxy { int EntryCount { get; } - Task Get(string token, bool updateAccessTime = true); IEnumerable GetAll(); void ClearAll(); } diff --git a/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs b/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs index 7f4def8..64f035c 100644 --- a/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs +++ b/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs @@ -16,20 +16,18 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase { private readonly IDatabaseProxy _database; private readonly IFileProxy _file; - private readonly IRecentProxy _recent; - public OpenDatabaseQueryHandler(IDatabaseProxy database, IFileProxy file, IRecentProxy recent) + public OpenDatabaseQueryHandler(IDatabaseProxy database, IFileProxy file) { _database = database; _file = file; - _recent = recent; } public async Task Handle(OpenDatabaseQuery message) { if (_database.IsDirty) throw new DatabaseOpenException(); - var file = await _recent.Get(message.FilePath); + var file = await _file.OpenBinaryFile(message.FilePath); var hasKeyFile = !string.IsNullOrEmpty(message.KeyFilePath); await _database.Open(file, new Credentials { diff --git a/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs b/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs index d4cb136..67bef8c 100644 --- a/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs +++ b/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs @@ -12,14 +12,14 @@ namespace ModernKeePass.Infrastructure.UWP { public async Task OpenBinaryFile(string path) { - var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path).AsTask(); + var file = await GetFile(path); var result = await FileIO.ReadBufferAsync(file).AsTask(); return result.ToArray(); } public async Task> OpenTextFile(string path) { - var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path).AsTask(); + var file = await GetFile(path); var result = await FileIO.ReadLinesAsync(file).AsTask(); return result; } @@ -31,8 +31,17 @@ namespace ModernKeePass.Infrastructure.UWP public async Task WriteBinaryContentsToFile(string path, byte[] contents) { - var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path).AsTask(); + var file = await GetFile(path); await FileIO.WriteBytesAsync(file, contents).AsTask(); } + + private async Task GetFile(string token) + { + if (StorageApplicationPermissions.MostRecentlyUsedList.ContainsItem(token)) + return await StorageApplicationPermissions.MostRecentlyUsedList.GetFileAsync(token).AsTask(); + if (StorageApplicationPermissions.FutureAccessList.ContainsItem(token)) + return await StorageApplicationPermissions.FutureAccessList.GetFileAsync(token).AsTask(); + return null; + } } } \ No newline at end of file diff --git a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs index a7eb6cd..c3db06b 100644 --- a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs +++ b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; -using System.Threading.Tasks; using Windows.Storage.AccessCache; using ModernKeePass.Application.Common.Interfaces; using ModernKeePass.Domain.Dtos; -using Windows.Storage; namespace ModernKeePass.Infrastructure.UWP { @@ -15,24 +12,7 @@ namespace ModernKeePass.Infrastructure.UWP private readonly StorageItemMostRecentlyUsedList _mru = StorageApplicationPermissions.MostRecentlyUsedList; public int EntryCount => _mru.Entries.Count; - - public async Task Get(string token, bool updateAccessTime = true) - { - try - { - var file = await _mru.GetFileAsync(token, - updateAccessTime ? AccessCacheOptions.None : AccessCacheOptions.SuppressAccessTimeUpdate).AsTask().ConfigureAwait(false); - - var result = await FileIO.ReadBufferAsync(file).AsTask(); - return result.ToArray(); - } - catch (Exception) - { - _mru.Remove(token); - return null; - } - } - + public IEnumerable GetAll() { return _mru.Entries.Select(e => new FileInfo diff --git a/ModernKeePass/ViewModels/MainVm.cs b/ModernKeePass/ViewModels/MainVm.cs index 1b9317f..f258a7d 100644 --- a/ModernKeePass/ViewModels/MainVm.cs +++ b/ModernKeePass/ViewModels/MainVm.cs @@ -111,7 +111,7 @@ namespace ModernKeePass.ViewModels Destination = destinationFrame, Parameter = databaseFile, SymbolIcon = Symbol.Page2, - IsSelected = databaseFile != null && !database.IsOpen + IsSelected = databaseFile != null }, new MainMenuItemVm {