From 1df9cbce1c4288ebd9836682b813e5eadff78306 Mon Sep 17 00:00:00 2001 From: Geoffroy BONNEVILLE Date: Tue, 21 Apr 2020 19:12:26 +0200 Subject: [PATCH] WIP DeleteCommand WIP DataContexts binding (Main and Settings are broken) --- ModernKeePass/DependencyInjection.cs | 1 + ModernKeePass/ViewModels/EntryDetailVm.cs | 16 +++++++- ModernKeePass/ViewModels/GroupDetailVm.cs | 40 +++++++++++++++++-- ModernKeePass/Views/EntryDetailPage.xaml | 6 +-- ModernKeePass/Views/EntryDetailPage.xaml.cs | 11 +---- ModernKeePass/Views/GroupDetailPage.xaml | 6 +-- ModernKeePass/Views/GroupDetailPage.xaml.cs | 20 ++-------- ModernKeePass/Views/MainPage.xaml | 13 +++--- ModernKeePass/Views/MainPage.xaml.cs | 4 +- ModernKeePass/Views/SettingsPage.xaml | 10 ++--- ModernKeePass/Views/SettingsPage.xaml.cs | 2 +- .../SettingsDatabasePage.xaml | 6 +-- .../SettingsNewDatabasePage.xaml | 7 ++-- .../SettingsPageFrames/SettingsSavePage.xaml | 8 ++-- .../UserControls/TopMenuUserControl.xaml | 8 ++-- .../UserControls/TopMenuUserControl.xaml.cs | 25 +----------- 16 files changed, 84 insertions(+), 99 deletions(-) diff --git a/ModernKeePass/DependencyInjection.cs b/ModernKeePass/DependencyInjection.cs index 048e4b4..7420f02 100644 --- a/ModernKeePass/DependencyInjection.cs +++ b/ModernKeePass/DependencyInjection.cs @@ -26,6 +26,7 @@ namespace ModernKeePass return nav; }); services.AddSingleton(provider => Messenger.Default); + services.AddTransient(typeof(IDialogService), typeof(DialogService)); services.AddSingleton(provider => { diff --git a/ModernKeePass/ViewModels/EntryDetailVm.cs b/ModernKeePass/ViewModels/EntryDetailVm.cs index ad53837..c8faaa5 100644 --- a/ModernKeePass/ViewModels/EntryDetailVm.cs +++ b/ModernKeePass/ViewModels/EntryDetailVm.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; using GalaSoft.MvvmLight.Command; +using GalaSoft.MvvmLight.Views; using MediatR; using Microsoft.Extensions.DependencyInjection; using ModernKeePass.Application.Database.Commands.SaveDatabase; @@ -219,10 +220,13 @@ namespace ModernKeePass.ViewModels public RelayCommand GeneratePasswordCommand { get; } public RelayCommand MoveCommand { get; } public RelayCommand RestoreCommand { get; } + public RelayCommand DeleteCommand { get; } + public RelayCommand GoBackCommand { get; } private DatabaseVm Database => _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult(); private readonly IMediator _mediator; + private readonly INavigationService _navigation; private readonly GroupVm _parent; private EntryVm _selectedItem; private int _selectedIndex; @@ -233,11 +237,12 @@ namespace ModernKeePass.ViewModels public EntryDetailVm() { } - internal EntryDetailVm(string entryId) : this(entryId, App.Services.GetRequiredService()) { } + internal EntryDetailVm(string entryId) : this(entryId, App.Services.GetRequiredService(), App.Services.GetRequiredService()) { } - public EntryDetailVm(string entryId, IMediator mediator) + public EntryDetailVm(string entryId, IMediator mediator, INavigationService navigation) { _mediator = mediator; + _navigation = navigation; SelectedItem = _mediator.Send(new GetEntryQuery { Id = entryId }).GetAwaiter().GetResult(); _parent = _mediator.Send(new GetGroupQuery { Id = SelectedItem.ParentGroupId }).GetAwaiter().GetResult(); History = new ObservableCollection { SelectedItem }; @@ -251,6 +256,13 @@ namespace ModernKeePass.ViewModels GeneratePasswordCommand = new RelayCommand(async () => await GeneratePassword()); MoveCommand = new RelayCommand(async () => await Move(_parent), () => _parent != null); RestoreCommand = new RelayCommand(async () => await RestoreHistory()); + DeleteCommand = new RelayCommand(async () => await AskForDelete()); + GoBackCommand = new RelayCommand(() => _navigation.GoBack()); + } + + private async Task AskForDelete() + { + throw new NotImplementedException(); } public async Task GeneratePassword() diff --git a/ModernKeePass/ViewModels/GroupDetailVm.cs b/ModernKeePass/ViewModels/GroupDetailVm.cs index bb867b3..4b14db4 100644 --- a/ModernKeePass/ViewModels/GroupDetailVm.cs +++ b/ModernKeePass/ViewModels/GroupDetailVm.cs @@ -8,6 +8,7 @@ using Windows.UI.Xaml.Controls; using GalaSoft.MvvmLight.Views; using MediatR; using Microsoft.Extensions.DependencyInjection; +using ModernKeePass.Application.Common.Interfaces; using ModernKeePass.Application.Database.Commands.SaveDatabase; using ModernKeePass.Application.Database.Models; using ModernKeePass.Application.Database.Queries.GetDatabase; @@ -92,11 +93,15 @@ namespace ModernKeePass.ViewModels public RelayCommand MoveCommand { get; } public RelayCommand CreateEntryCommand { get; } public RelayCommand CreateGroupCommand { get; } + public RelayCommand DeleteCommand { get; set; } + public RelayCommand GoBackCommand { get; set; } private DatabaseVm Database => _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult(); private readonly IMediator _mediator; + private readonly IResourceProxy _resource; private readonly INavigationService _navigation; + private readonly IDialogService _dialog; private readonly GroupVm _group; private readonly GroupVm _parent; private bool _isEditMode; @@ -104,13 +109,19 @@ namespace ModernKeePass.ViewModels public GroupDetailVm() {} - internal GroupDetailVm(string groupId) : this(groupId, App.Services.GetRequiredService(), App.Services.GetRequiredService()) + internal GroupDetailVm(string groupId) : this(groupId, + App.Services.GetRequiredService(), + App.Services.GetRequiredService(), + App.Services.GetRequiredService(), + App.Services.GetRequiredService()) { } - public GroupDetailVm(string groupId, IMediator mediator, INavigationService navigation) + public GroupDetailVm(string groupId, IMediator mediator, IResourceProxy resource, INavigationService navigation, IDialogService dialog) { _mediator = mediator; + _resource = resource; _navigation = navigation; + _dialog = dialog; _group = _mediator.Send(new GetGroupQuery { Id = groupId }).GetAwaiter().GetResult(); if (!string.IsNullOrEmpty(_group.ParentGroupId)) { @@ -124,12 +135,33 @@ namespace ModernKeePass.ViewModels MoveCommand = new RelayCommand(async () => await Move(_parent), () => IsNotRoot); CreateEntryCommand = new RelayCommand(async () => await AddNewEntry(), () => !IsInRecycleBin && Database.RecycleBinId != Id); CreateGroupCommand = new RelayCommand(async () => await AddNewGroup(), () => !IsInRecycleBin && Database.RecycleBinId != Id); - + DeleteCommand = new RelayCommand(async () => await AskForDelete()); + GoBackCommand = new RelayCommand(() => _navigation.GoBack()); + Entries = new ObservableCollection(_group.Entries); Entries.CollectionChanged += Entries_CollectionChanged; Groups = new ObservableCollection(_group.SubGroups); } - + + private async Task AskForDelete() + { + var message = IsRecycleOnDelete + ? _resource.GetResourceValue("GroupRecyclingConfirmation") + : _resource.GetResourceValue("GroupDeletingConfirmation"); + + await _dialog.ShowMessage(message, _resource.GetResourceValue("EntityDeleteTitle"), + _resource.GetResourceValue("EntityDeleteActionButton"), + _resource.GetResourceValue("EntityDeleteCancelButton"), + async isOk => + { + var text = IsRecycleOnDelete ? _resource.GetResourceValue("GroupRecycled") : _resource.GetResourceValue("GroupDeleted"); + //ToastNotificationHelper.ShowMovedToast(Entity, resource.GetResourceValue("EntityDeleting"), text); + await MarkForDelete(_resource.GetResourceValue("RecycleBinTitle")); + _navigation.GoBack(); + }); + } + + public async Task AddNewGroup(string name = "") { var group = await _mediator.Send(new CreateGroupCommand {Name = name, ParentGroup = _group}); diff --git a/ModernKeePass/Views/EntryDetailPage.xaml b/ModernKeePass/Views/EntryDetailPage.xaml index de553c5..ac4fcf5 100644 --- a/ModernKeePass/Views/EntryDetailPage.xaml +++ b/ModernKeePass/Views/EntryDetailPage.xaml @@ -481,7 +481,7 @@ - -