diff --git a/ModernKeePass.Application/Application.csproj b/ModernKeePass.Application/Application.csproj
index af1fc37..5cee244 100644
--- a/ModernKeePass.Application/Application.csproj
+++ b/ModernKeePass.Application/Application.csproj
@@ -119,7 +119,7 @@
-
+
diff --git a/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs b/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs
index 561e988..1657f15 100644
--- a/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs
+++ b/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs
@@ -27,7 +27,7 @@ namespace ModernKeePass.Application.Common.Interfaces
void CloseDatabase();
Task AddEntry(string parentGroupId, string entryId);
- Task InsertEntry(string parentGroupId, string entryId, int index);
+ Task MoveEntry(string parentGroupId, string entryId, int index);
Task AddGroup(string parentGroupId, string groupId);
void UpdateEntry(string entryId, string fieldName, object fieldValue);
void UpdateGroup(string groupId);
diff --git a/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs b/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs
index dd97e65..d165de0 100644
--- a/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs
+++ b/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs
@@ -8,7 +8,7 @@ namespace ModernKeePass.Application.Common.Interfaces
{
int EntryCount { get; }
Task Get(string token, bool updateAccessTime = false);
- Task> GetAll();
+ IEnumerable GetAll();
Task Add(FileInfo recentItem);
void ClearAll();
}
diff --git a/ModernKeePass.Application/Database/Queries/GetDatabase/GetDatabaseQuery.cs b/ModernKeePass.Application/Database/Queries/GetDatabase/GetDatabaseQuery.cs
index 0bf6b0d..4d207a8 100644
--- a/ModernKeePass.Application/Database/Queries/GetDatabase/GetDatabaseQuery.cs
+++ b/ModernKeePass.Application/Database/Queries/GetDatabase/GetDatabaseQuery.cs
@@ -1,6 +1,7 @@
using MediatR;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Models;
+using ModernKeePass.Domain.Common;
namespace ModernKeePass.Application.Database.Queries.GetDatabase
{
@@ -26,7 +27,7 @@ namespace ModernKeePass.Application.Database.Queries.GetDatabase
database.Name = _databaseProxy.Name;
database.RootGroupId = _databaseProxy.RootGroupId;
database.IsRecycleBinEnabled = _databaseProxy.IsRecycleBinEnabled;
- database.RecycleBinId = _databaseProxy.RecycleBinId;
+ database.RecycleBinId = _databaseProxy.RecycleBinId == Constants.EmptyId ? null : _databaseProxy.RecycleBinId;
database.Compression = _databaseProxy.Compression;
database.CipherId = _databaseProxy.CipherId;
database.KeyDerivationId = _databaseProxy.KeyDerivationId;
diff --git a/ModernKeePass.Application/Group/Commands/InsertEntry/InsertEntryCommand.cs b/ModernKeePass.Application/Group/Commands/MoveEntry/MoveEntryCommand.cs
similarity index 61%
rename from ModernKeePass.Application/Group/Commands/InsertEntry/InsertEntryCommand.cs
rename to ModernKeePass.Application/Group/Commands/MoveEntry/MoveEntryCommand.cs
index db3e417..46a4f82 100644
--- a/ModernKeePass.Application/Group/Commands/InsertEntry/InsertEntryCommand.cs
+++ b/ModernKeePass.Application/Group/Commands/MoveEntry/MoveEntryCommand.cs
@@ -5,28 +5,28 @@ using ModernKeePass.Application.Entry.Models;
using ModernKeePass.Application.Group.Models;
using ModernKeePass.Domain.Exceptions;
-namespace ModernKeePass.Application.Group.Commands.InsertEntry
+namespace ModernKeePass.Application.Group.Commands.MoveEntry
{
- public class InsertEntryCommand : IRequest
+ public class MoveEntryCommand : IRequest
{
public GroupVm ParentGroup { get; set; }
public EntryVm Entry { get; set; }
public int Index { get; set; }
- public class InsertEntryCommandHandler : IAsyncRequestHandler
+ public class MoveEntryCommandHandler : IAsyncRequestHandler
{
private readonly IDatabaseProxy _database;
- public InsertEntryCommandHandler(IDatabaseProxy database)
+ public MoveEntryCommandHandler(IDatabaseProxy database)
{
_database = database;
}
- public async Task Handle(InsertEntryCommand message)
+ public async Task Handle(MoveEntryCommand message)
{
if (!_database.IsOpen) throw new DatabaseClosedException();
- await _database.InsertEntry(message.ParentGroup.Id, message.Entry.Id, message.Index);
+ await _database.MoveEntry(message.ParentGroup.Id, message.Entry.Id, message.Index);
message.ParentGroup.Entries.Insert(message.Index, message.Entry);
}
}
diff --git a/ModernKeePass.Application/Parameters/Commands/SetRecycleBin/SetRecycleBinCommand.cs b/ModernKeePass.Application/Parameters/Commands/SetRecycleBin/SetRecycleBinCommand.cs
index 2725adb..82f3c63 100644
--- a/ModernKeePass.Application/Parameters/Commands/SetRecycleBin/SetRecycleBinCommand.cs
+++ b/ModernKeePass.Application/Parameters/Commands/SetRecycleBin/SetRecycleBinCommand.cs
@@ -1,5 +1,6 @@
using MediatR;
using ModernKeePass.Application.Common.Interfaces;
+using ModernKeePass.Domain.Common;
using ModernKeePass.Domain.Exceptions;
namespace ModernKeePass.Application.Parameters.Commands.SetRecycleBin
@@ -19,8 +20,8 @@ namespace ModernKeePass.Application.Parameters.Commands.SetRecycleBin
public void Handle(SetRecycleBinCommand message)
{
- if (_database.IsOpen) _database.RecycleBinId = message.RecycleBinId;
- else throw new DatabaseClosedException();
+ if (!_database.IsOpen) throw new DatabaseClosedException();
+ _database.RecycleBinId = message.RecycleBinId ?? Constants.EmptyId;
}
}
}
diff --git a/ModernKeePass.Domain/Common/Constants.cs b/ModernKeePass.Domain/Common/Constants.cs
new file mode 100644
index 0000000..6cbe1ee
--- /dev/null
+++ b/ModernKeePass.Domain/Common/Constants.cs
@@ -0,0 +1,7 @@
+namespace ModernKeePass.Domain.Common
+{
+ public static class Constants
+ {
+ public static string EmptyId => "00000000000000000000000000000000";
+ }
+}
\ No newline at end of file
diff --git a/ModernKeePass.Domain/Domain.csproj b/ModernKeePass.Domain/Domain.csproj
index fc54a22..e75a3d8 100644
--- a/ModernKeePass.Domain/Domain.csproj
+++ b/ModernKeePass.Domain/Domain.csproj
@@ -76,6 +76,7 @@
+
diff --git a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
index e32e0df..f889343 100644
--- a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
+++ b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
@@ -45,18 +45,13 @@ namespace ModernKeePass.Infrastructure.KeePass
public string RecycleBinId
{
- get
+ get
{
- if (_pwDatabase.RecycleBinEnabled && !_pwDatabase.RecycleBinUuid.Equals(PwUuid.Zero))
- {
- return _pwDatabase.RecycleBinUuid.ToHexString();
- }
-
- return null;
+ return _pwDatabase.RecycleBinUuid.ToHexString();
}
set
{
- _pwDatabase.RecycleBinUuid = value != null ? BuildIdFromString(value) : PwUuid.Zero;
+ _pwDatabase.RecycleBinUuid = BuildIdFromString(value);
_pwDatabase.RecycleBinChanged = _dateTime.Now;
}
}
@@ -152,7 +147,7 @@ namespace ModernKeePass.Infrastructure.KeePass
});
}
- public async Task SaveDatabase(byte[] newFileContents)
+ public async Task SaveDatabase(byte[] newFileContents)
{
return await Task.Run(() =>
{
@@ -176,12 +171,15 @@ namespace ModernKeePass.Infrastructure.KeePass
});
}
- public async Task InsertEntry(string parentGroupId, string entryId, int index)
+ public async Task MoveEntry(string parentGroupId, string entryId, int index)
{
await Task.Run(() =>
{
var parentPwGroup = _pwDatabase.RootGroup.FindGroup(BuildIdFromString(parentGroupId), true);
var pwEntry = _pwDatabase.RootGroup.FindEntry(BuildIdFromString(entryId), true);
+ var currentIndex = (uint)parentPwGroup.Entries.IndexOf(pwEntry);
+
+ parentPwGroup.Entries.RemoveAt(currentIndex);
parentPwGroup.Entries.Insert((uint)index, pwEntry);
});
}
diff --git a/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs b/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs
index 4337d42..d4cb136 100644
--- a/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs
+++ b/ModernKeePass.Infrastructure/UWP/StorageFileClient.cs
@@ -12,15 +12,15 @@ namespace ModernKeePass.Infrastructure.UWP
{
public async Task OpenBinaryFile(string path)
{
- var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path);
- var result = await FileIO.ReadBufferAsync(file);
+ var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path).AsTask();
+ var result = await FileIO.ReadBufferAsync(file).AsTask();
return result.ToArray();
}
public async Task> OpenTextFile(string path)
{
- var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path);
- var result = await FileIO.ReadLinesAsync(file);
+ var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path).AsTask();
+ var result = await FileIO.ReadLinesAsync(file).AsTask();
return result;
}
@@ -31,8 +31,8 @@ namespace ModernKeePass.Infrastructure.UWP
public async Task WriteBinaryContentsToFile(string path, byte[] contents)
{
- var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path);
- await FileIO.WriteBytesAsync(file, contents);
+ var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(path).AsTask();
+ await FileIO.WriteBytesAsync(file, contents).AsTask();
}
}
}
\ No newline at end of file
diff --git a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs
index 3dbf956..9a1d952 100644
--- a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs
+++ b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using Windows.Storage.AccessCache;
using ModernKeePass.Application.Common.Interfaces;
@@ -10,51 +11,52 @@ namespace ModernKeePass.Infrastructure.UWP
public class UwpRecentFilesClient: IRecentProxy
{
private readonly StorageItemMostRecentlyUsedList _mru = StorageApplicationPermissions.MostRecentlyUsedList;
+ private readonly StorageItemAccessList _fal = StorageApplicationPermissions.FutureAccessList;
public int EntryCount => _mru.Entries.Count;
public async Task Get(string token, bool updateAccessTime = false)
{
- var file = await _mru.GetFileAsync(token, updateAccessTime ? AccessCacheOptions.None : AccessCacheOptions.SuppressAccessTimeUpdate);
- StorageApplicationPermissions.FutureAccessList.AddOrReplace(token, file);
- return new FileInfo
+ try
{
- Id = token,
- Name = file.DisplayName,
- Path = file.Path
- };
+ var file = await _mru.GetFileAsync(token,
+ updateAccessTime ? AccessCacheOptions.None : AccessCacheOptions.SuppressAccessTimeUpdate).AsTask().ConfigureAwait(false);
+ _fal.AddOrReplace(token, file);
+ return new FileInfo
+ {
+ Id = token,
+ Name = file.DisplayName,
+ Path = file.Path
+ };
+ }
+ catch (Exception)
+ {
+ _mru.Remove(token);
+ return null;
+ }
}
- public async Task> GetAll()
+ public IEnumerable GetAll()
{
- var result = new List();
- foreach (var entry in _mru.Entries)
+ return _mru.Entries.Select(e => new FileInfo
{
- try
- {
- var recentItem = await Get(entry.Token);
- result.Add(recentItem);
- }
- catch (Exception)
- {
- _mru.Remove(entry.Token);
- }
- }
- return result;
+ Id = e.Token,
+ Name = e.Metadata?.Substring(e.Metadata.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase) + 1),
+ Path = e.Metadata
+ });
}
public async Task Add(FileInfo recentItem)
{
- var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(recentItem.Id);
- _mru.Add(file);
+ var file = await _fal.GetFileAsync(recentItem.Id).AsTask();
+ _mru.Add(file, file.Path);
}
public void ClearAll()
{
- for (var i = _mru.Entries.Count; i > 0; i--)
+ foreach (var entry in _mru.Entries)
{
- var entry = _mru.Entries[i];
- StorageApplicationPermissions.FutureAccessList.Remove(entry.Token);
+ if (_fal.ContainsItem(entry.Token)) _fal.Remove(entry.Token);
_mru.Remove(entry.Token);
}
}
diff --git a/ModernKeePass/Actions/DeleteEntityAction.cs b/ModernKeePass/Actions/DeleteEntityAction.cs
index b0032be..2da4459 100644
--- a/ModernKeePass/Actions/DeleteEntityAction.cs
+++ b/ModernKeePass/Actions/DeleteEntityAction.cs
@@ -34,7 +34,7 @@ namespace ModernKeePass.Actions
DependencyProperty.Register("Command", typeof(ICommand), typeof(DeleteEntityAction),
new PropertyMetadata(null));
- public DeleteEntityAction() : this(App.Services.GetService()) { }
+ public DeleteEntityAction() : this(App.Services.GetRequiredService()) { }
public DeleteEntityAction(IMediator mediator)
{
@@ -58,7 +58,7 @@ namespace ModernKeePass.Actions
ToastNotificationHelper.ShowMovedToast(Entity, resource.GetResourceValue("EntityDeleting"), text);
Entity.MarkForDelete(resource.GetResourceValue("RecycleBinTitle"));
Command.Execute(null);
- }, null).GetAwaiter();
+ }, null).GetAwaiter().GetResult();
return null;
}
diff --git a/ModernKeePass/App.xaml.cs b/ModernKeePass/App.xaml.cs
index 7a3cdea..fa58839 100644
--- a/ModernKeePass/App.xaml.cs
+++ b/ModernKeePass/App.xaml.cs
@@ -101,7 +101,7 @@ namespace ModernKeePass
savePicker.FileTypeChoices.Add(_resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"),
new List {".kdbx"});
- var file = await savePicker.PickSaveFileAsync();
+ var file = await savePicker.PickSaveFileAsync().AsTask();
if (file != null)
{
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
@@ -213,15 +213,20 @@ namespace ModernKeePass
{
if (_settings.GetSetting("SaveSuspend", true))
{
- await _mediator.Send(new SaveDatabaseCommand());
+ await _mediator.Send(new SaveDatabaseCommand()).ConfigureAwait(false);
}
- await _mediator.Send(new CloseDatabaseCommand());
+
+ await _mediator.Send(new CloseDatabaseCommand()).ConfigureAwait(false);
+ }
+ catch (DatabaseClosedException)
+ {
+ // Do nothing on purpose
}
catch (Exception exception)
{
ToastNotificationHelper.ShowErrorToast(exception);
}
- await SuspensionManager.SaveAsync();
+ await SuspensionManager.SaveAsync().ConfigureAwait(false);
deferral.Complete();
}
diff --git a/ModernKeePass/Common/MessageDialogHelper.cs b/ModernKeePass/Common/MessageDialogHelper.cs
index 385ef4d..7fd6010 100644
--- a/ModernKeePass/Common/MessageDialogHelper.cs
+++ b/ModernKeePass/Common/MessageDialogHelper.cs
@@ -15,7 +15,7 @@ namespace ModernKeePass.Common
messageDialog.Commands.Add(new UICommand(actionButtonText, actionCommand));
// Show the message dialog
- await messageDialog.ShowAsync();
+ await messageDialog.ShowAsync().AsTask();
}
public static async Task ShowErrorDialog(Exception exception)
@@ -25,7 +25,7 @@ namespace ModernKeePass.Common
var messageDialog = CreateBasicDialog(exception.Message, exception.StackTrace, "OK");
// Show the message dialog
- await messageDialog.ShowAsync();
+ await messageDialog.ShowAsync().AsTask();;
}
public static async Task ShowNotificationDialog(string title, string message)
@@ -33,7 +33,7 @@ namespace ModernKeePass.Common
var dialog = CreateBasicDialog(title, message, "OK");
// Show the message dialog
- await dialog.ShowAsync();
+ await dialog.ShowAsync().AsTask();;
}
private static MessageDialog CreateBasicDialog(string title, string message, string dismissActionText, UICommandInvokedHandler cancelCommand = null)
diff --git a/ModernKeePass/Strings/en-US/Resources.resw b/ModernKeePass/Strings/en-US/Resources.resw
index 4c5c79e..0b0bba4 100644
--- a/ModernKeePass/Strings/en-US/Resources.resw
+++ b/ModernKeePass/Strings/en-US/Resources.resw
@@ -492,4 +492,10 @@
Format
+
+ Close without saving
+
+
+ This will close the currently opened database without saving the changes.
+
\ No newline at end of file
diff --git a/ModernKeePass/Strings/fr-FR/Resources.resw b/ModernKeePass/Strings/fr-FR/Resources.resw
index e4635f6..ab51db7 100644
--- a/ModernKeePass/Strings/fr-FR/Resources.resw
+++ b/ModernKeePass/Strings/fr-FR/Resources.resw
@@ -495,4 +495,10 @@
Le fichier CSV doit être formatté de la façon suivante: Nom du compte;Login;Mot de passe:URL;Commentaires
+
+ Fermer sans sauvegarder
+
+
+ Cela va fermer la base de données ouverte sans sauvegarder les changements.
+
\ No newline at end of file
diff --git a/ModernKeePass/ViewModels/CompositeKeyVm.cs b/ModernKeePass/ViewModels/CompositeKeyVm.cs
index a5c80b0..9aa887f 100644
--- a/ModernKeePass/ViewModels/CompositeKeyVm.cs
+++ b/ModernKeePass/ViewModels/CompositeKeyVm.cs
@@ -115,7 +115,7 @@ namespace ModernKeePass.ViewModels
private readonly ISettingsProxy _settings;
private readonly ResourceHelper _resource;
- public CompositeKeyVm() : this(App.Services.GetService(), App.Services.GetService()) { }
+ public CompositeKeyVm() : this(App.Services.GetRequiredService(), App.Services.GetRequiredService()) { }
public CompositeKeyVm(IMediator mediator, ISettingsProxy settings)
{
diff --git a/ModernKeePass/ViewModels/EntryDetailVm.cs b/ModernKeePass/ViewModels/EntryDetailVm.cs
index 9c4e852..1ce5ca4 100644
--- a/ModernKeePass/ViewModels/EntryDetailVm.cs
+++ b/ModernKeePass/ViewModels/EntryDetailVm.cs
@@ -219,7 +219,7 @@ namespace ModernKeePass.ViewModels
public EntryDetailVm() { }
- internal EntryDetailVm(string entryId, bool isNewEntry = false) : this(entryId, App.Services.GetService(), isNewEntry) { }
+ internal EntryDetailVm(string entryId, bool isNewEntry = false) : this(entryId, App.Services.GetRequiredService(), isNewEntry) { }
public EntryDetailVm(string entryId, IMediator mediator, bool isNewEntry = false)
{
@@ -232,7 +232,7 @@ namespace ModernKeePass.ViewModels
if (isNewEntry) GeneratePassword().GetAwaiter().GetResult();
IsSelected = true;
- SaveCommand = new RelayCommand(() => _mediator.Send(new SaveDatabaseCommand()));
+ SaveCommand = new RelayCommand(async () => await _mediator.Send(new SaveDatabaseCommand()));
GeneratePasswordCommand = new RelayCommand(async () => await GeneratePassword());
UndoDeleteCommand = new RelayCommand(async () => await Move(_parent), () => _parent != null);
}
diff --git a/ModernKeePass/ViewModels/GroupDetailVm.cs b/ModernKeePass/ViewModels/GroupDetailVm.cs
index df5159e..4875d92 100644
--- a/ModernKeePass/ViewModels/GroupDetailVm.cs
+++ b/ModernKeePass/ViewModels/GroupDetailVm.cs
@@ -16,8 +16,7 @@ using ModernKeePass.Application.Group.Commands.AddGroup;
using ModernKeePass.Application.Group.Commands.CreateEntry;
using ModernKeePass.Application.Group.Commands.CreateGroup;
using ModernKeePass.Application.Group.Commands.DeleteGroup;
-using ModernKeePass.Application.Group.Commands.InsertEntry;
-using ModernKeePass.Application.Group.Commands.RemoveEntry;
+using ModernKeePass.Application.Group.Commands.MoveEntry;
using ModernKeePass.Application.Group.Commands.RemoveGroup;
using ModernKeePass.Application.Group.Commands.SortEntries;
using ModernKeePass.Application.Group.Commands.SortGroups;
@@ -33,9 +32,9 @@ namespace ModernKeePass.ViewModels
{
public class GroupDetailVm : NotifyPropertyChangedBase, IVmEntity, ISelectableModel
{
- public ObservableCollection Entries => new ObservableCollection(_group.Entries);
+ public ObservableCollection Entries { get; }
- public ObservableCollection Groups => new ObservableCollection(_group.SubGroups);
+ public ObservableCollection Groups { get; }
public IEnumerable SubEntries
{
@@ -124,7 +123,7 @@ namespace ModernKeePass.ViewModels
public GroupDetailVm() {}
- internal GroupDetailVm(string groupId) : this(groupId, App.Services.GetService())
+ internal GroupDetailVm(string groupId) : this(groupId, App.Services.GetRequiredService())
{ }
public GroupDetailVm(string groupId, IMediator mediator, bool isEditMode = false)
@@ -141,12 +140,14 @@ namespace ModernKeePass.ViewModels
SaveCommand = new RelayCommand(async () => await _mediator.Send(new SaveDatabaseCommand()));
SortEntriesCommand = new RelayCommand(async () =>
- await SortEntriesAsync().ConfigureAwait(false), () => IsEditMode);
+ await SortEntriesAsync(), () => IsEditMode);
SortGroupsCommand = new RelayCommand(async () =>
- await SortGroupsAsync().ConfigureAwait(false), () => IsEditMode);
+ await SortGroupsAsync(), () => IsEditMode);
UndoDeleteCommand = new RelayCommand(async () => await Move(_parent), () => _parent != null);
+ Entries = new ObservableCollection(_group.Entries);
Entries.CollectionChanged += Entries_CollectionChanged;
+ Groups = new ObservableCollection(_group.SubGroups);
}
private async void Entries_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
@@ -156,7 +157,6 @@ namespace ModernKeePass.ViewModels
case NotifyCollectionChangedAction.Remove:
var oldIndex = e.OldStartingIndex;
_reorderedEntry = _group.Entries[oldIndex];
- await _mediator.Send(new RemoveEntryCommand {Entry = _reorderedEntry, ParentGroup = _group});
break;
case NotifyCollectionChangedAction.Add:
if (_reorderedEntry == null)
@@ -166,7 +166,7 @@ namespace ModernKeePass.ViewModels
}
else
{
- await _mediator.Send(new InsertEntryCommand {Entry = _reorderedEntry, ParentGroup = _group, Index = e.NewStartingIndex});
+ await _mediator.Send(new MoveEntryCommand {Entry = _reorderedEntry, ParentGroup = _group, Index = e.NewStartingIndex});
}
break;
}
diff --git a/ModernKeePass/ViewModels/Items/RecentItemVm.cs b/ModernKeePass/ViewModels/Items/RecentItemVm.cs
index d91bb1b..842a57d 100644
--- a/ModernKeePass/ViewModels/Items/RecentItemVm.cs
+++ b/ModernKeePass/ViewModels/Items/RecentItemVm.cs
@@ -38,7 +38,7 @@ namespace ModernKeePass.ViewModels
set { SetProperty(ref _isSelected, value); }
}
- public RecentItemVm(FileInfo file): this(App.Services.GetService(), file) {}
+ public RecentItemVm(FileInfo file): this(App.Services.GetRequiredService(), file) {}
public RecentItemVm(IRecentProxy recent, FileInfo file)
{
_recent = recent;
diff --git a/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs b/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
index dee3b78..1818b57 100644
--- a/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
+++ b/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
@@ -77,7 +77,7 @@ namespace ModernKeePass.ViewModels
}
}
- public SettingsDatabaseVm() : this(App.Services.GetService()) { }
+ public SettingsDatabaseVm() : this(App.Services.GetRequiredService()) { }
public SettingsDatabaseVm(IMediator mediator)
{
diff --git a/ModernKeePass/ViewModels/Items/SettingsNewVm.cs b/ModernKeePass/ViewModels/Items/SettingsNewVm.cs
index c44074a..decc9e3 100644
--- a/ModernKeePass/ViewModels/Items/SettingsNewVm.cs
+++ b/ModernKeePass/ViewModels/Items/SettingsNewVm.cs
@@ -8,7 +8,7 @@ namespace ModernKeePass.ViewModels
{
private readonly ISettingsProxy _settings;
- public SettingsNewVm() : this(App.Services.GetService())
+ public SettingsNewVm() : this(App.Services.GetRequiredService())
{ }
public SettingsNewVm(ISettingsProxy settings)
diff --git a/ModernKeePass/ViewModels/Items/SettingsSaveVm.cs b/ModernKeePass/ViewModels/Items/SettingsSaveVm.cs
index 9da7961..4289d7f 100644
--- a/ModernKeePass/ViewModels/Items/SettingsSaveVm.cs
+++ b/ModernKeePass/ViewModels/Items/SettingsSaveVm.cs
@@ -7,7 +7,7 @@ namespace ModernKeePass.ViewModels
{
private readonly ISettingsProxy _settings;
- public SettingsSaveVm() : this(App.Services.GetService())
+ public SettingsSaveVm() : this(App.Services.GetRequiredService())
{ }
public SettingsSaveVm(ISettingsProxy settings)
diff --git a/ModernKeePass/ViewModels/MainVm.cs b/ModernKeePass/ViewModels/MainVm.cs
index f3bd7ea..faadf5d 100644
--- a/ModernKeePass/ViewModels/MainVm.cs
+++ b/ModernKeePass/ViewModels/MainVm.cs
@@ -50,7 +50,7 @@ namespace ModernKeePass.ViewModels
public MainVm() {}
internal MainVm(Frame referenceFrame, Frame destinationFrame, FileInfo databaseFile = null) : this(referenceFrame, destinationFrame,
- App.Services.GetService(), App.Services.GetService(), databaseFile)
+ App.Services.GetRequiredService(), App.Services.GetRequiredService(), databaseFile)
{ }
public MainVm(Frame referenceFrame, Frame destinationFrame, IMediator mediator, IRecentProxy recent, FileInfo databaseFile = null)
diff --git a/ModernKeePass/ViewModels/OpenVm.cs b/ModernKeePass/ViewModels/OpenVm.cs
index 090dd83..230040f 100644
--- a/ModernKeePass/ViewModels/OpenVm.cs
+++ b/ModernKeePass/ViewModels/OpenVm.cs
@@ -32,7 +32,7 @@ namespace ModernKeePass.ViewModels
private set { SetProperty(ref _path, value); }
}
- public OpenVm(): this(App.Services.GetService()) { }
+ public OpenVm(): this(App.Services.GetRequiredService()) { }
public OpenVm(IRecentProxy recent)
{
diff --git a/ModernKeePass/ViewModels/RecentVm.cs b/ModernKeePass/ViewModels/RecentVm.cs
index 77edabb..246ae42 100644
--- a/ModernKeePass/ViewModels/RecentVm.cs
+++ b/ModernKeePass/ViewModels/RecentVm.cs
@@ -1,5 +1,6 @@
using System.Collections.ObjectModel;
using System.Linq;
+using System.Threading.Tasks;
using System.Windows.Input;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
@@ -41,15 +42,15 @@ namespace ModernKeePass.ViewModels
public ICommand ClearAllCommand { get; }
- public RecentVm() : this (App.Services.GetService())
+ public RecentVm() : this (App.Services.GetRequiredService())
{ }
public RecentVm(IRecentProxy recent)
{
_recent = recent;
ClearAllCommand = new RelayCommand(ClearAll);
-
- var recentItems = _recent.GetAll().GetAwaiter().GetResult().Select(r => new RecentItemVm(r));
+
+ var recentItems = _recent.GetAll().Select(r => new RecentItemVm(r));
RecentItems = new ObservableCollection(recentItems);
if (RecentItems.Count > 0)
SelectedItem = RecentItems[0];
diff --git a/ModernKeePass/ViewModels/SaveVm.cs b/ModernKeePass/ViewModels/SaveVm.cs
index 91bb274..1294eff 100644
--- a/ModernKeePass/ViewModels/SaveVm.cs
+++ b/ModernKeePass/ViewModels/SaveVm.cs
@@ -11,7 +11,7 @@ namespace ModernKeePass.ViewModels
public class SaveVm
{
private readonly IMediator _mediator;
- public SaveVm() : this(App.Services.GetService()) { }
+ public SaveVm() : this(App.Services.GetRequiredService()) { }
public SaveVm(IMediator mediator)
{
@@ -21,7 +21,7 @@ namespace ModernKeePass.ViewModels
public async Task Save(bool close = true)
{
await _mediator.Send(new SaveDatabaseCommand());
- if (close) await _mediator.Send(new CloseDatabaseCommand());
+ if (close) await Close();
}
public async Task Save(StorageFile file)
@@ -29,5 +29,10 @@ namespace ModernKeePass.ViewModels
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
await _mediator.Send(new SaveDatabaseCommand { FilePath = token });
}
+
+ public async Task Close()
+ {
+ await _mediator.Send(new CloseDatabaseCommand());
+ }
}
}
\ No newline at end of file
diff --git a/ModernKeePass/ViewModels/SettingsVm.cs b/ModernKeePass/ViewModels/SettingsVm.cs
index 89f6cdc..c5c1340 100644
--- a/ModernKeePass/ViewModels/SettingsVm.cs
+++ b/ModernKeePass/ViewModels/SettingsVm.cs
@@ -43,7 +43,7 @@ namespace ModernKeePass.ViewModels
}
}
- public SettingsVm() : this(App.Services.GetService()) { }
+ public SettingsVm() : this(App.Services.GetRequiredService()) { }
public SettingsVm(IMediator mediator)
{
diff --git a/ModernKeePass/Views/MainPageFrames/ImportExportPage.xaml.cs b/ModernKeePass/Views/MainPageFrames/ImportExportPage.xaml.cs
index 84d43b6..2ebe284 100644
--- a/ModernKeePass/Views/MainPageFrames/ImportExportPage.xaml.cs
+++ b/ModernKeePass/Views/MainPageFrames/ImportExportPage.xaml.cs
@@ -27,7 +27,7 @@ namespace ModernKeePass.Views
picker.FileTypeFilter.Add(".csv");
// Application now has read/write access to the picked file
- var file = await picker.PickSingleFileAsync();
+ var file = await picker.PickSingleFileAsync().AsTask();
if (file == null) return;
}
diff --git a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs
index 7e78eca..c03790c 100644
--- a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs
+++ b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs
@@ -34,7 +34,7 @@ namespace ModernKeePass.Views
};
savePicker.FileTypeChoices.Add("KeePass 2.x database", new List { ".kdbx" });
- var file = await savePicker.PickSaveFileAsync();
+ var file = await savePicker.PickSaveFileAsync().AsTask();
if (file == null) return;
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
@@ -72,7 +72,7 @@ namespace ModernKeePass.Views
picker.FileTypeFilter.Add(Model.ImportFileExtensionFilter);
// Application now has read/write access to the picked file
- Model.ImportFile = await picker.PickSingleFileAsync();
+ Model.ImportFile = await picker.PickSingleFileAsync().AsTask();
if (Model.ImportFile != null) ImportFileLink.Content = Model.ImportFile.Name;
}
}
diff --git a/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs
index 436d0c5..09538cd 100644
--- a/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs
+++ b/ModernKeePass/Views/MainPageFrames/OpenDatabasePage.xaml.cs
@@ -42,7 +42,7 @@ namespace ModernKeePass.Views
picker.FileTypeFilter.Add(".kdbx");
// Application now has read/write access to the picked file
- var file = await picker.PickSingleFileAsync();
+ var file = await picker.PickSingleFileAsync().AsTask();
if (file == null) return;
diff --git a/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml b/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml
index d306e04..338c9fb 100644
--- a/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml
+++ b/ModernKeePass/Views/MainPageFrames/RecentDatabasesPage.xaml
@@ -12,12 +12,10 @@
mc:Ignorable="d">
-
+
+
-
-
-
-
+
@@ -29,7 +27,7 @@
@@ -47,8 +45,10 @@
-
+
+
+
diff --git a/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml b/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml
index f86a4fe..38213cb 100644
--- a/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml
+++ b/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml
@@ -15,5 +15,7 @@
+
+
diff --git a/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs
index 116ae58..cdcec13 100644
--- a/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs
+++ b/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs
@@ -43,11 +43,17 @@ namespace ModernKeePass.Views
};
savePicker.FileTypeChoices.Add("KeePass 2.x database", new List { ".kdbx" });
- var file = await savePicker.PickSaveFileAsync();
+ var file = await savePicker.PickSaveFileAsync().AsTask();
if (file == null) return;
await Model.Save(file);
_mainFrame.Navigate(typeof(MainPage));
}
+
+ private async void CloseButton_OnClick(object sender, RoutedEventArgs e)
+ {
+ await Model.Close();
+ _mainFrame.Navigate(typeof(MainPage));
+ }
}
}
diff --git a/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs b/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs
index a7c3baf..a66bb7d 100644
--- a/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs
+++ b/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs
@@ -77,7 +77,7 @@ namespace ModernKeePass.Views.UserControls
public bool ShowComplexityIndicator => CreateNew || UpdateKey;
- public CompositeKeyUserControl(): this(App.Services.GetService())
+ public CompositeKeyUserControl(): this(App.Services.GetRequiredService())
{ }
public CompositeKeyUserControl(IMediator mediator)