mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-03 15:40:18 -04:00
Don't use mediator for App services (recent, resource, settings)
WIP in View models
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
using System.Windows.Input;
|
||||
using Windows.UI.Xaml;
|
||||
using Microsoft.Xaml.Interactivity;
|
||||
using ModernKeePass.Application.Resources.Queries;
|
||||
using ModernKeePass.Common;
|
||||
using ModernKeePass.Interfaces;
|
||||
using ModernKeePass.Services;
|
||||
using ModernKeePass.ViewModels;
|
||||
|
||||
namespace ModernKeePass.Actions
|
||||
@@ -32,23 +32,19 @@ namespace ModernKeePass.Actions
|
||||
|
||||
public object Execute(object sender, object parameter)
|
||||
{
|
||||
var mediator = App.Mediator;
|
||||
var resource = new ResourcesService();
|
||||
var type = Entity is GroupVm ? "Group" : "Entry";
|
||||
|
||||
|
||||
var message = Entity.IsRecycleOnDelete
|
||||
? mediator.Send(new GetResourceQuery { Key = $"{type}RecyclingConfirmation" })
|
||||
: mediator.Send(new GetResourceQuery { Key = $"{type}DeletingConfirmation" });
|
||||
var text = Entity.IsRecycleOnDelete ?
|
||||
mediator.Send(new GetResourceQuery { Key = $"{type}Recycled" }) :
|
||||
mediator.Send(new GetResourceQuery { Key = $"{type}Deleted" });
|
||||
MessageDialogHelper.ShowActionDialog(
|
||||
mediator.Send(new GetResourceQuery { Key = "EntityDeleteTitle" }).GetAwaiter().GetResult(),
|
||||
message.GetAwaiter().GetResult(),
|
||||
mediator.Send(new GetResourceQuery { Key = "EntityDeleteActionButton" }).GetAwaiter().GetResult(),
|
||||
mediator.Send(new GetResourceQuery { Key = "EntityDeleteCancelButton" }).GetAwaiter().GetResult(), async a =>
|
||||
? resource.GetResourceValue($"{type}RecyclingConfirmation")
|
||||
: resource.GetResourceValue($"{type}DeletingConfirmation");
|
||||
var text = Entity.IsRecycleOnDelete ? resource.GetResourceValue($"{type}Recycled") : resource.GetResourceValue($"{type}Deleted");
|
||||
MessageDialogHelper.ShowActionDialog(resource.GetResourceValue("EntityDeleteTitle"), message,
|
||||
resource.GetResourceValue("EntityDeleteActionButton"),
|
||||
resource.GetResourceValue("EntityDeleteCancelButton"), a =>
|
||||
{
|
||||
ToastNotificationHelper.ShowMovedToast(Entity, await mediator.Send(new GetResourceQuery { Key = "EntityDeleting" }), await text);
|
||||
await Entity.MarkForDelete(await mediator.Send(new GetResourceQuery { Key = "RecycleBinTitle"}));
|
||||
ToastNotificationHelper.ShowMovedToast(Entity, resource.GetResourceValue("EntityDeleting"), text);
|
||||
Entity.MarkForDelete(resource.GetResourceValue("RecycleBinTitle"));
|
||||
Command.Execute(null);
|
||||
}, null).GetAwaiter();
|
||||
|
||||
|
@@ -1,31 +0,0 @@
|
||||
using System.Threading.Tasks;
|
||||
using Windows.Storage;
|
||||
using ModernKeePass.ViewModels;
|
||||
using ModernKeePassLib;
|
||||
using ModernKeePassLib.Cryptography.KeyDerivation;
|
||||
using ModernKeePassLib.Keys;
|
||||
|
||||
namespace ModernKeePass.Interfaces
|
||||
{
|
||||
public interface IDatabaseService
|
||||
{
|
||||
string Name { get; }
|
||||
bool RecycleBinEnabled { get; set; }
|
||||
GroupVm RootGroup { get; set; }
|
||||
GroupVm RecycleBin { get; set; }
|
||||
PwUuid DataCipher { get; set; }
|
||||
PwCompressionAlgorithm CompressionAlgorithm { get; set; }
|
||||
KdfParameters KeyDerivation { get; set; }
|
||||
bool IsOpen { get; }
|
||||
bool HasChanged { get; set; }
|
||||
|
||||
Task Open(StorageFile databaseFile, CompositeKey key, bool createNew = false);
|
||||
Task ReOpen();
|
||||
void Save();
|
||||
Task Save(StorageFile file);
|
||||
void CreateRecycleBin(string title);
|
||||
void AddDeletedItem(PwUuid id);
|
||||
void Close(bool releaseFile = true);
|
||||
void UpdateCompositeKey(CompositeKey newCompositeKey);
|
||||
}
|
||||
}
|
@@ -1,7 +0,0 @@
|
||||
namespace ModernKeePass.Interfaces
|
||||
{
|
||||
public interface IHasSelectableObject
|
||||
{
|
||||
ISelectableModel SelectedItem { get; set; }
|
||||
}
|
||||
}
|
@@ -1,7 +0,0 @@
|
||||
namespace ModernKeePass.Interfaces
|
||||
{
|
||||
public interface IIsEnabled
|
||||
{
|
||||
bool IsEnabled { get; }
|
||||
}
|
||||
}
|
@@ -1,7 +0,0 @@
|
||||
namespace ModernKeePass.Interfaces
|
||||
{
|
||||
public interface ISelectableModel
|
||||
{
|
||||
bool IsSelected { get; set; }
|
||||
}
|
||||
}
|
@@ -10,18 +10,17 @@ using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||
using ModernKeePass.Application.Entry.Commands.SetFieldValue;
|
||||
using ModernKeePass.Application.Group.Commands.CreateGroup;
|
||||
using ModernKeePass.Application.Group.Commands.DeleteEntry;
|
||||
using ModernKeePass.Application.Resources.Queries;
|
||||
using ModernKeePass.Application.Security.Commands.GeneratePassword;
|
||||
using ModernKeePass.Application.Security.Queries.EstimatePasswordComplexity;
|
||||
using ModernKeePass.Common;
|
||||
using ModernKeePass.Domain.Interfaces;
|
||||
using ModernKeePass.Interfaces;
|
||||
using ModernKeePass.Services;
|
||||
|
||||
namespace ModernKeePass.ViewModels
|
||||
{
|
||||
public class EntryVm : NotifyPropertyChangedBase, IVmEntity, ISelectableModel
|
||||
{
|
||||
public GroupVm ParentGroup { get; private set; }
|
||||
public GroupVm PreviousGroup { get; private set; }
|
||||
public bool IsRevealPasswordEnabled => !string.IsNullOrEmpty(Password);
|
||||
public bool HasExpired => HasExpirationDate && ExpiryDate < DateTime.Now;
|
||||
public double PasswordComplexityIndicator => _mediator.Send(new EstimatePasswordComplexityQuery {Password = Password}).GetAwaiter().GetResult();
|
||||
@@ -35,7 +34,7 @@ namespace ModernKeePass.ViewModels
|
||||
public bool BracketsPatternSelected { get; set; }
|
||||
public string CustomChars { get; set; } = string.Empty;
|
||||
public string Id => _entry.Id;
|
||||
public bool IsRecycleOnDelete => GetDatabase().IsRecycleBinEnabled && !ParentGroup.IsSelected;
|
||||
public bool IsRecycleOnDelete => _database.IsRecycleBinEnabled && !ParentGroup.IsSelected;
|
||||
public IEnumerable<IVmEntity> BreadCrumb => new List<IVmEntity>(ParentGroup.BreadCrumb) {ParentGroup};
|
||||
/// <summary>
|
||||
/// Determines if the Entry is current or from history
|
||||
@@ -197,20 +196,23 @@ namespace ModernKeePass.ViewModels
|
||||
|
||||
private readonly Application.Entry.Models.EntryVm _entry;
|
||||
private readonly IMediator _mediator;
|
||||
private readonly IResourceService _resource;
|
||||
private DatabaseVm _database;
|
||||
private bool _isEditMode;
|
||||
private bool _isRevealPassword;
|
||||
private double _passwordLength = 25;
|
||||
private bool _isVisible = true;
|
||||
|
||||
|
||||
public EntryVm() { }
|
||||
|
||||
internal EntryVm(Application.Entry.Models.EntryVm entry, GroupVm parent) : this(entry, parent, App.Mediator) { }
|
||||
internal EntryVm(Application.Entry.Models.EntryVm entry, Application.Group.Models.GroupVm parent) : this(entry, parent, App.Mediator, new ResourcesService()) { }
|
||||
|
||||
public EntryVm(Application.Entry.Models.EntryVm entry, GroupVm parent, IMediator mediator)
|
||||
public EntryVm(Application.Entry.Models.EntryVm entry, Application.Group.Models.GroupVm parent, IMediator mediator, IResourceService resource)
|
||||
{
|
||||
_entry = entry;
|
||||
_mediator = mediator;
|
||||
ParentGroup = parent;
|
||||
_resource = resource;
|
||||
_database = _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
|
||||
|
||||
SaveCommand = new RelayCommand(() => _mediator.Send(new SaveDatabaseCommand()));
|
||||
GeneratePasswordCommand = new RelayCommand(async () => await GeneratePassword());
|
||||
@@ -238,13 +240,12 @@ namespace ModernKeePass.ViewModels
|
||||
|
||||
public async Task MarkForDelete(string recycleBinTitle)
|
||||
{
|
||||
var database = GetDatabase();
|
||||
if (database.IsRecycleBinEnabled && database.RecycleBinId == null)
|
||||
await _mediator.Send(new CreateGroupCommand { ParentGroup = database.RootGroup, IsRecycleBin = true, Name = recycleBinTitle});
|
||||
await Move(database.IsRecycleBinEnabled && !ParentGroup.IsSelected ? _database.RecycleBin : null);
|
||||
if (_database.IsRecycleBinEnabled && _database.RecycleBin == null)
|
||||
await _mediator.Send(new CreateGroupCommand { ParentGroup = _database.RootGroup, IsRecycleBin = true, Name = recycleBinTitle});
|
||||
await Move(_database.IsRecycleBinEnabled && !ParentGroup.IsSelected ? _database.RecycleBin : null);
|
||||
}
|
||||
|
||||
public async Task Move(GroupVm destination)
|
||||
public async Task Move(Application.Group.Models.GroupVm destination)
|
||||
{
|
||||
PreviousGroup = ParentGroup;
|
||||
PreviousGroup.Entries.Remove(this);
|
||||
@@ -270,13 +271,8 @@ namespace ModernKeePass.ViewModels
|
||||
public override string ToString()
|
||||
{
|
||||
return IsSelected ?
|
||||
_mediator.Send(new GetResourceQuery{Key = "EntryCurrent"}).GetAwaiter().GetResult() :
|
||||
_resource.GetResourceValue("EntryCurrent") :
|
||||
_entry.ModificationDate.ToString("g");
|
||||
}
|
||||
|
||||
private DatabaseVm GetDatabase()
|
||||
{
|
||||
return _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@ using ModernKeePass.Application.Group.Commands.SortEntries;
|
||||
using ModernKeePass.Application.Group.Commands.SortGroups;
|
||||
using ModernKeePass.Common;
|
||||
using ModernKeePass.Domain.Enums;
|
||||
using ModernKeePass.Domain.Interfaces;
|
||||
using ModernKeePass.Interfaces;
|
||||
|
||||
namespace ModernKeePass.ViewModels
|
||||
|
@@ -149,9 +149,6 @@
|
||||
<Compile Include="Converters\EmptyStringToVisibilityConverter.cs" />
|
||||
<Compile Include="Converters\NullToBooleanConverter.cs" />
|
||||
<Compile Include="Extensions\DispatcherTaskExtensions.cs" />
|
||||
<Content Include="Interfaces\IDatabaseService.cs" />
|
||||
<Compile Include="Interfaces\IHasSelectableObject.cs" />
|
||||
<Compile Include="Interfaces\ISelectableModel.cs" />
|
||||
<Compile Include="Views\BasePages\LayoutAwarePageBase.cs" />
|
||||
<Compile Include="Views\MainPageFrames\ImportExportPage.xaml.cs">
|
||||
<DependentUpon>ImportExportPage.xaml</DependentUpon>
|
||||
@@ -191,7 +188,6 @@
|
||||
<Compile Include="Converters\ProgressBarLegalValuesConverter.cs" />
|
||||
<Compile Include="Converters\TextToWidthConverter.cs" />
|
||||
<Compile Include="Events\PasswordEventArgs.cs" />
|
||||
<Compile Include="Interfaces\IIsEnabled.cs" />
|
||||
<Compile Include="Interfaces\IVmEntity.cs" />
|
||||
<Compile Include="Views\MainPage.xaml.cs">
|
||||
<DependentUpon>MainPage.xaml</DependentUpon>
|
||||
|
Reference in New Issue
Block a user