WIP ViewModelLocator - Messenger and Recent issues

Refactoring
Code cleanup
This commit is contained in:
Geoffroy BONNEVILLE
2020-04-23 19:00:38 +02:00
parent 2b8f9bd5f0
commit d211453553
59 changed files with 309 additions and 934 deletions

View File

@@ -3,7 +3,6 @@ using System.Collections.ObjectModel;
using System.Linq;
using GalaSoft.MvvmLight;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Models;
using ModernKeePass.Application.Database.Queries.GetDatabase;
@@ -76,9 +75,7 @@ namespace ModernKeePass.ViewModels.ListItems
if (!IsNewRecycleBin) _mediator.Send(new SetRecycleBinCommand { RecycleBinId = value.Id}).Wait();
}
}
public SettingsDatabaseVm() : this(App.Services.GetRequiredService<IMediator>()) { }
public SettingsDatabaseVm(IMediator mediator)
{
_mediator = mediator;

View File

@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Common;
@@ -9,10 +8,7 @@ namespace ModernKeePass.ViewModels.ListItems
public class SettingsNewVm
{
private readonly ISettingsProxy _settings;
public SettingsNewVm() : this(App.Services.GetRequiredService<ISettingsProxy>())
{ }
public SettingsNewVm(ISettingsProxy settings)
{
_settings = settings;

View File

@@ -1,4 +1,3 @@
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Common;
@@ -7,10 +6,7 @@ namespace ModernKeePass.ViewModels.ListItems
public class SettingsSaveVm
{
private readonly ISettingsProxy _settings;
public SettingsSaveVm() : this(App.Services.GetRequiredService<ISettingsProxy>())
{ }
public SettingsSaveVm(ISettingsProxy settings)
{
_settings = settings;

View File

@@ -1,34 +1,26 @@
using System.Threading.Tasks;
using GalaSoft.MvvmLight.Messaging;
using GalaSoft.MvvmLight.Views;
using GalaSoft.MvvmLight;
using MediatR;
using Messages;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Commands.UpdateCredentials;
using ModernKeePass.Application.Database.Queries.GetDatabase;
namespace ModernKeePass.ViewModels.ListItems
{
public class SettingsSecurityVm
public class SettingsSecurityVm: ViewModelBase
{
private readonly IMediator _mediator;
private readonly IResourceProxy _resource;
private readonly INotificationService _notification;
public SettingsSecurityVm(): this(
App.Services.GetRequiredService<IMediator>(),
App.Services.GetRequiredService<IMessenger>(),
App.Services.GetRequiredService<IResourceProxy>(),
App.Services.GetRequiredService<INotificationService>()) { }
public SettingsSecurityVm(IMediator mediator, IMessenger messenger, IResourceProxy resource, INotificationService notification)
public SettingsSecurityVm(IMediator mediator, IResourceProxy resource, INotificationService notification)
{
_mediator = mediator;
_resource = resource;
_notification = notification;
messenger.Register<CredentialsSetMessage>(this, async message => await UpdateDatabaseCredentials(message));
MessengerInstance.Register<CredentialsSetMessage>(this, async message => await UpdateDatabaseCredentials(message));
}
public async Task UpdateDatabaseCredentials(CredentialsSetMessage message)

View File

@@ -1,10 +1,8 @@
using System.Threading.Tasks;
using Windows.Storage;
using GalaSoft.MvvmLight.Messaging;
using GalaSoft.MvvmLight.Views;
using MediatR;
using Messages;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Commands.CreateDatabase;
using ModernKeePass.Application.Database.Queries.GetDatabase;
@@ -37,23 +35,28 @@ namespace ModernKeePass.ViewModels
RaisePropertyChanged(nameof(ImportFormatHelp));
}
}
public NewVm(): this(
App.Services.GetRequiredService<IMediator>(),
App.Services.GetRequiredService<ISettingsProxy>(),
App.Services.GetRequiredService<IMessenger>(),
App.Services.GetRequiredService<INavigationService>()) { }
public NewVm(IMediator mediator, ISettingsProxy settings, IMessenger messenger, INavigationService navigation)
public NewVm(IMediator mediator, IRecentProxy recent, ISettingsProxy settings, INavigationService navigation) : base(recent)
{
_mediator = mediator;
_settings = settings;
_navigation = navigation;
messenger.Register<CredentialsSetMessage>(this, async message => await CreateDatabase(message));
MessengerInstance.Register<CredentialsSetMessage>(this, async m => await TryCreateDatabase(m));
}
public async Task CreateDatabase(CredentialsSetMessage message)
private async Task TryCreateDatabase(CredentialsSetMessage message)
{
var database = await _mediator.Send(new GetDatabaseQuery());
if (database.IsDirty)
{
MessengerInstance.Register<DatabaseClosedMessage>(this, async m => await CreateDatabase(m.Parameter as CredentialsSetMessage));
MessengerInstance.Send(new DatabaseAlreadyOpenedMessage { Parameter = message });
}
else await CreateDatabase(message);
}
private async Task CreateDatabase(CredentialsSetMessage message)
{
await _mediator.Send(new CreateDatabaseCommand
{

View File

@@ -1,12 +1,11 @@
using System.Threading.Tasks;
using GalaSoft.MvvmLight;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Domain.Dtos;
namespace ModernKeePass.ViewModels
{
public class OpenVm: ObservableObject
public class OpenVm: ViewModelBase
{
private readonly IRecentProxy _recent;
private string _name;
@@ -31,9 +30,7 @@ namespace ModernKeePass.ViewModels
get { return _path; }
private set { Set(() => Path, ref _path, value); }
}
public OpenVm(): this(App.Services.GetRequiredService<IRecentProxy>()) { }
public OpenVm(IRecentProxy recent)
{
_recent = recent;

View File

@@ -1,16 +1,17 @@
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using Messages;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Domain.Interfaces;
using ModernKeePass.ViewModels.ListItems;
namespace ModernKeePass.ViewModels
{
public class RecentVm : ObservableObject, IHasSelectableObject
public class RecentVm : ViewModelBase, IHasSelectableObject
{
private readonly IRecentProxy _recent;
private ISelectableModel _selectedItem;
@@ -41,9 +42,7 @@ namespace ModernKeePass.ViewModels
}
public ICommand ClearAllCommand { get; }
public RecentVm() : this (App.Services.GetRequiredService<IRecentProxy>()) { }
public RecentVm(IRecentProxy recent)
{
_recent = recent;
@@ -53,11 +52,13 @@ namespace ModernKeePass.ViewModels
RecentItems = new ObservableCollection<RecentItemVm>(recentItems);
if (RecentItems.Count > 0)
SelectedItem = RecentItems[0];
MessengerInstance.Register<DatabaseOpeningMessage>(this, async action => await UpdateAccessTime(action.Token));
}
public void UpdateAccessTime(string token)
private async Task UpdateAccessTime(string token)
{
_recent.Get(token, true).Wait();
await _recent.Get(token, true);
}
private void ClearAll()

View File

@@ -3,7 +3,6 @@ using Windows.Storage;
using Windows.Storage.AccessCache;
using GalaSoft.MvvmLight.Views;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Database.Commands.CloseDatabase;
using ModernKeePass.Application.Database.Commands.SaveDatabase;
using ModernKeePass.Application.Database.Queries.GetDatabase;
@@ -21,9 +20,7 @@ namespace ModernKeePass.ViewModels
private readonly IMediator _mediator;
private readonly INavigationService _navigation;
public SaveVm() : this(App.Services.GetRequiredService<IMediator>(), App.Services.GetRequiredService<INavigationService>()) { }
public SaveVm(IMediator mediator, INavigationService navigation)
{
_mediator = mediator;
@@ -41,7 +38,7 @@ namespace ModernKeePass.ViewModels
public async Task Save(StorageFile file)
{
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
var token = StorageApplicationPermissions.FutureAccessList.Add(file, file.Name);
await _mediator.Send(new SaveDatabaseCommand { FilePath = token });
_navigation.NavigateTo(Constants.Navigation.MainPage);
}

View File

@@ -3,20 +3,15 @@ using System.Text;
using System.Threading.Tasks;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;
using GalaSoft.MvvmLight.Views;
using MediatR;
using Messages;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Commands.CloseDatabase;
using ModernKeePass.Application.Database.Commands.SaveDatabase;
using ModernKeePass.Application.Database.Queries.GetDatabase;
using ModernKeePass.Application.Database.Queries.OpenDatabase;
namespace ModernKeePass.ViewModels
{
public class OpenDatabaseControlVm : ObservableObject
public class OpenDatabaseControlVm : ViewModelBase
{
public enum StatusTypes
{
@@ -100,9 +95,6 @@ namespace ModernKeePass.ViewModels
private readonly IMediator _mediator;
private readonly IResourceProxy _resource;
private readonly IMessenger _messenger;
private readonly IDialogService _dialog;
private readonly INotificationService _notification;
private bool _hasPassword;
private bool _hasKeyFile;
private bool _isOpening;
@@ -112,22 +104,11 @@ namespace ModernKeePass.ViewModels
private string _keyFilePath;
private string _keyFileText;
private string _openButtonLabel;
public OpenDatabaseControlVm() : this(
App.Services.GetRequiredService<IMediator>(),
App.Services.GetRequiredService<IResourceProxy>(),
App.Services.GetRequiredService<IMessenger>(),
App.Services.GetRequiredService<IDialogService>(),
App.Services.GetRequiredService<INotificationService>())
{ }
public OpenDatabaseControlVm(IMediator mediator, IResourceProxy resource, IMessenger messenger, IDialogService dialog, INotificationService notification)
public OpenDatabaseControlVm(IMediator mediator, IResourceProxy resource)
{
_mediator = mediator;
_resource = resource;
_messenger = messenger;
_dialog = dialog;
_notification = notification;
OpenDatabaseCommand = new RelayCommand<string>(async databaseFilePath => await TryOpenDatabase(databaseFilePath), _ => IsValid);
_keyFileText = _resource.GetResourceValue("CompositeKeyDefaultKeyFile");
_openButtonLabel = _resource.GetResourceValue("CompositeKeyOpenButtonLabel");
@@ -135,30 +116,13 @@ namespace ModernKeePass.ViewModels
public async Task TryOpenDatabase(string databaseFilePath)
{
_messenger.Send(new DatabaseOpeningMessage {Token = databaseFilePath});
MessengerInstance.Send(new DatabaseOpeningMessage {Token = databaseFilePath});
var database = await _mediator.Send(new GetDatabaseQuery());
if (database.IsOpen)
if (database.IsDirty)
{
await _dialog.ShowMessage(_resource.GetResourceValue("MessageDialogDBOpenTitle"),
string.Format(_resource.GetResourceValue("MessageDialogDBOpenDesc"), database.Name),
_resource.GetResourceValue("MessageDialogDBOpenButtonSave"),
_resource.GetResourceValue("MessageDialogDBOpenButtonDiscard"),
async isOk =>
{
if (isOk)
{
await _mediator.Send(new SaveDatabaseCommand());
_notification.Show(database.Name, _resource.GetResourceValue("ToastSavedMessage"));
await _mediator.Send(new CloseDatabaseCommand());
await OpenDatabase(databaseFilePath);
}
else
{
await _mediator.Send(new CloseDatabaseCommand());
await OpenDatabase(databaseFilePath);
}
});
MessengerInstance.Register<DatabaseClosedMessage>(this, async message => await OpenDatabase(message.Parameter as string));
MessengerInstance.Send(new DatabaseAlreadyOpenedMessage {Parameter = databaseFilePath});
}
else await OpenDatabase(databaseFilePath);
}
@@ -180,7 +144,7 @@ namespace ModernKeePass.ViewModels
});
var rootGroupId = (await _mediator.Send(new GetDatabaseQuery())).RootGroupId;
_messenger.Send(new DatabaseOpenedMessage { RootGroupId = rootGroupId });
MessengerInstance.Send(new DatabaseOpenedMessage { RootGroupId = rootGroupId });
}
catch (ArgumentException)
{

View File

@@ -1,20 +1,17 @@
using System.Threading.Tasks;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;
using MediatR;
using Messages;
using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Security.Commands.GenerateKeyFile;
namespace ModernKeePass.ViewModels
{
public class SetCredentialsVm : ObservableObject
public class SetCredentialsVm : ViewModelBase
{
private readonly IMediator _mediator;
private readonly ICredentialsProxy _credentials;
private readonly IMessenger _messenger;
public bool HasPassword
{
@@ -103,18 +100,11 @@ namespace ModernKeePass.ViewModels
private string _keyFilePath;
private string _keyFileText;
private string _openButtonLabel;
public SetCredentialsVm(): this(
App.Services.GetRequiredService<IMediator>(),
App.Services.GetRequiredService<ICredentialsProxy>(),
App.Services.GetRequiredService<IMessenger>(),
App.Services.GetRequiredService<IResourceProxy>()) { }
public SetCredentialsVm(IMediator mediator, ICredentialsProxy credentials, IMessenger messenger, IResourceProxy resource)
public SetCredentialsVm(IMediator mediator, ICredentialsProxy credentials, IResourceProxy resource)
{
_mediator = mediator;
_credentials = credentials;
_messenger = messenger;
GenerateCredentialsCommand = new RelayCommand(GenerateCredentials, () => IsValid);
_keyFileText = resource.GetResourceValue("CompositeKeyDefaultKeyFile");
@@ -127,7 +117,7 @@ namespace ModernKeePass.ViewModels
private void GenerateCredentials()
{
_messenger.Send(new CredentialsSetMessage
MessengerInstance.Send(new CredentialsSetMessage
{
Password = HasPassword ? Password : null,
KeyFilePath = HasKeyFile ? KeyFilePath : null

View File

@@ -69,17 +69,17 @@ namespace ModernKeePass.ViewModels
SimpleIoc.Default.Register<SaveVm>();
}
public MainVm Main => ServiceLocator.Current.GetInstance<MainVm>();
public SettingsVm Settings => ServiceLocator.Current.GetInstance<SettingsVm>();
public SettingsDatabaseVm SettingsDatabase => ServiceLocator.Current.GetInstance<SettingsDatabaseVm>();
public SettingsNewVm SettingsNew => ServiceLocator.Current.GetInstance<SettingsNewVm>();
public SettingsSaveVm SettingsSave => ServiceLocator.Current.GetInstance<SettingsSaveVm>();
public SettingsSecurityVm SettingsSecurity => ServiceLocator.Current.GetInstance<SettingsSecurityVm>();
public MainVm Main => ServiceLocator.Current.GetInstance<MainVm>(Guid.NewGuid().ToString());
public SettingsVm Settings => ServiceLocator.Current.GetInstance<SettingsVm>(Guid.NewGuid().ToString());
public SettingsDatabaseVm SettingsDatabase => ServiceLocator.Current.GetInstance<SettingsDatabaseVm>(Guid.NewGuid().ToString());
public SettingsNewVm SettingsNew => ServiceLocator.Current.GetInstance<SettingsNewVm>(Guid.NewGuid().ToString());
public SettingsSaveVm SettingsSave => ServiceLocator.Current.GetInstance<SettingsSaveVm>(Guid.NewGuid().ToString());
public SettingsSecurityVm SettingsSecurity => ServiceLocator.Current.GetInstance<SettingsSecurityVm>(Guid.NewGuid().ToString());
public OpenDatabaseControlVm OpenDatabaseControl => ServiceLocator.Current.GetInstance<OpenDatabaseControlVm>(Guid.NewGuid().ToString());
public SetCredentialsVm SetCredentials => ServiceLocator.Current.GetInstance<SetCredentialsVm>(Guid.NewGuid().ToString());
public NewVm New => ServiceLocator.Current.GetInstance<NewVm>();
public OpenVm Open => ServiceLocator.Current.GetInstance<OpenVm>();
public RecentVm Recent => ServiceLocator.Current.GetInstance<RecentVm>();
public RecentVm Recent => ServiceLocator.Current.GetInstance<RecentVm>(Guid.NewGuid().ToString());
public SaveVm Save => ServiceLocator.Current.GetInstance<SaveVm>();
public static void Cleanup()