diff --git a/ModernKeePass.Application/Application.csproj b/ModernKeePass.Application/Application.csproj
index 2415ebe..33a1a6e 100644
--- a/ModernKeePass.Application/Application.csproj
+++ b/ModernKeePass.Application/Application.csproj
@@ -54,14 +54,16 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs b/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs
index 748f0d1..730bd3e 100644
--- a/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs
+++ b/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs
@@ -14,13 +14,13 @@ namespace ModernKeePass.Application.Common.Interfaces
string CipherId { get; set; }
string KeyDerivationId { get; set; }
string Compression { get; set; }
- bool IsRecycleBinEnabled { get; }
+ bool IsRecycleBinEnabled { get; set; }
Task Open(FileInfo fileInfo, Credentials credentials);
Task ReOpen();
Task Create(FileInfo fileInfo, Credentials credentials);
Task SaveDatabase();
- Task SaveDatabase(FileInfo FileInfo);
+ Task SaveDatabase(string filePath);
Task UpdateCredentials(Credentials credentials);
void CloseDatabase();
diff --git a/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs b/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs
index 3da2c85..71d4785 100644
--- a/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs
+++ b/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs
@@ -1,14 +1,13 @@
using MediatR;
using System.Threading.Tasks;
using ModernKeePass.Application.Common.Interfaces;
-using ModernKeePass.Domain.Dtos;
using ModernKeePass.Domain.Exceptions;
namespace ModernKeePass.Application.Database.Commands.SaveDatabase
{
public class SaveDatabaseCommand : IRequest
{
- public FileInfo FileInfo { get; set; }
+ public string FilePath { get; set; }
public class SaveDatabaseCommandHandler : IAsyncRequestHandler
{
@@ -23,8 +22,8 @@ namespace ModernKeePass.Application.Database.Commands.SaveDatabase
{
if (!_database.IsOpen) throw new DatabaseClosedException();
- if (message.FileInfo != null) await _database.SaveDatabase(message.FileInfo);
- else await _database.SaveDatabase();
+ if (string.IsNullOrEmpty(message.FilePath)) await _database.SaveDatabase();
+ else await _database.SaveDatabase(message.FilePath);
}
}
}
diff --git a/ModernKeePass.Application/Database/Commands/UpdateCredentials/UpdateCredentialsCommand.cs b/ModernKeePass.Application/Database/Commands/UpdateCredentials/UpdateCredentialsCommand.cs
index beb1314..7d08e09 100644
--- a/ModernKeePass.Application/Database/Commands/UpdateCredentials/UpdateCredentialsCommand.cs
+++ b/ModernKeePass.Application/Database/Commands/UpdateCredentials/UpdateCredentialsCommand.cs
@@ -8,7 +8,8 @@ namespace ModernKeePass.Application.Database.Commands.UpdateCredentials
{
public class UpdateCredentialsCommand: IRequest
{
- public Credentials Credentials { get; set; }
+ public string Password { get; set; }
+ public string KeyFilePath { get; set; }
public class UpdateCredentialsCommandHandler : IAsyncRequestHandler
{
@@ -21,7 +22,14 @@ namespace ModernKeePass.Application.Database.Commands.UpdateCredentials
public async Task Handle(UpdateCredentialsCommand message)
{
- if (_database.IsOpen) await _database.UpdateCredentials(message.Credentials);
+ if (_database.IsOpen)
+ {
+ await _database.UpdateCredentials(new Credentials
+ {
+ KeyFilePath = message.KeyFilePath,
+ Password = message.Password
+ });
+ }
else throw new DatabaseClosedException();
}
}
diff --git a/ModernKeePass.Application/Cryptography/Commands/SetCipher/SetCipherCommand.cs b/ModernKeePass.Application/Parameters/Commands/SetCipher/SetCipherCommand.cs
similarity index 91%
rename from ModernKeePass.Application/Cryptography/Commands/SetCipher/SetCipherCommand.cs
rename to ModernKeePass.Application/Parameters/Commands/SetCipher/SetCipherCommand.cs
index 1a5a8fd..b675856 100644
--- a/ModernKeePass.Application/Cryptography/Commands/SetCipher/SetCipherCommand.cs
+++ b/ModernKeePass.Application/Parameters/Commands/SetCipher/SetCipherCommand.cs
@@ -2,7 +2,7 @@
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Domain.Exceptions;
-namespace ModernKeePass.Application.Cryptography.Commands.SetCipher
+namespace ModernKeePass.Application.Parameters.Commands.SetCipher
{
public class SetCipherCommand : IRequest
{
diff --git a/ModernKeePass.Application/Cryptography/Commands/SetCompression/SetCompressionCommand.cs b/ModernKeePass.Application/Parameters/Commands/SetCompression/SetCompressionCommand.cs
similarity index 91%
rename from ModernKeePass.Application/Cryptography/Commands/SetCompression/SetCompressionCommand.cs
rename to ModernKeePass.Application/Parameters/Commands/SetCompression/SetCompressionCommand.cs
index 7a95564..548a90f 100644
--- a/ModernKeePass.Application/Cryptography/Commands/SetCompression/SetCompressionCommand.cs
+++ b/ModernKeePass.Application/Parameters/Commands/SetCompression/SetCompressionCommand.cs
@@ -2,7 +2,7 @@
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Domain.Exceptions;
-namespace ModernKeePass.Application.Cryptography.Commands.SetCompression
+namespace ModernKeePass.Application.Parameters.Commands.SetCompression
{
public class SetCompressionCommand : IRequest
{
diff --git a/ModernKeePass.Application/Parameters/Commands/SetHasRecycleBin/SetHasRecycleBinCommand.cs b/ModernKeePass.Application/Parameters/Commands/SetHasRecycleBin/SetHasRecycleBinCommand.cs
new file mode 100644
index 0000000..5878197
--- /dev/null
+++ b/ModernKeePass.Application/Parameters/Commands/SetHasRecycleBin/SetHasRecycleBinCommand.cs
@@ -0,0 +1,27 @@
+using MediatR;
+using ModernKeePass.Application.Common.Interfaces;
+using ModernKeePass.Domain.Exceptions;
+
+namespace ModernKeePass.Application.Parameters.Commands.SetHasRecycleBin
+{
+ public class SetHasRecycleBinCommand : IRequest
+ {
+ public bool HasRecycleBin { get; set; }
+
+ public class SetHasRecycleBinCommandHandler : IRequestHandler
+ {
+ private readonly IDatabaseProxy _database;
+
+ public SetHasRecycleBinCommandHandler(IDatabaseProxy database)
+ {
+ _database = database;
+ }
+
+ public void Handle(SetHasRecycleBinCommand message)
+ {
+ if (_database.IsOpen) _database.IsRecycleBinEnabled = message.HasRecycleBin;
+ else throw new DatabaseClosedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernKeePass.Application/Cryptography/Commands/SetKeyDerivation/SetKeyDerivationCommand.cs b/ModernKeePass.Application/Parameters/Commands/SetKeyDerivation/SetKeyDerivationCommand.cs
similarity index 91%
rename from ModernKeePass.Application/Cryptography/Commands/SetKeyDerivation/SetKeyDerivationCommand.cs
rename to ModernKeePass.Application/Parameters/Commands/SetKeyDerivation/SetKeyDerivationCommand.cs
index cbeb949..e0c0820 100644
--- a/ModernKeePass.Application/Cryptography/Commands/SetKeyDerivation/SetKeyDerivationCommand.cs
+++ b/ModernKeePass.Application/Parameters/Commands/SetKeyDerivation/SetKeyDerivationCommand.cs
@@ -2,7 +2,7 @@
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Domain.Exceptions;
-namespace ModernKeePass.Application.Cryptography.Commands.SetKeyDerivation
+namespace ModernKeePass.Application.Parameters.Commands.SetKeyDerivation
{
public class SetKeyDerivationCommand : IRequest
{
diff --git a/ModernKeePass.Application/Parameters/Commands/SetRecycleBin/SetRecycleBinCommand.cs b/ModernKeePass.Application/Parameters/Commands/SetRecycleBin/SetRecycleBinCommand.cs
new file mode 100644
index 0000000..2725adb
--- /dev/null
+++ b/ModernKeePass.Application/Parameters/Commands/SetRecycleBin/SetRecycleBinCommand.cs
@@ -0,0 +1,27 @@
+using MediatR;
+using ModernKeePass.Application.Common.Interfaces;
+using ModernKeePass.Domain.Exceptions;
+
+namespace ModernKeePass.Application.Parameters.Commands.SetRecycleBin
+{
+ public class SetRecycleBinCommand : IRequest
+ {
+ public string RecycleBinId { get; set; }
+
+ public class SetRecycleBinCommandHandler : IRequestHandler
+ {
+ private readonly IDatabaseProxy _database;
+
+ public SetRecycleBinCommandHandler(IDatabaseProxy database)
+ {
+ _database = database;
+ }
+
+ public void Handle(SetRecycleBinCommand message)
+ {
+ if (_database.IsOpen) _database.RecycleBinId = message.RecycleBinId;
+ else throw new DatabaseClosedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernKeePass.Application/Cryptography/Models/CipherVm.cs b/ModernKeePass.Application/Parameters/Models/CipherVm.cs
similarity index 100%
rename from ModernKeePass.Application/Cryptography/Models/CipherVm.cs
rename to ModernKeePass.Application/Parameters/Models/CipherVm.cs
diff --git a/ModernKeePass.Application/Cryptography/Models/KeyDerivationVm.cs b/ModernKeePass.Application/Parameters/Models/KeyDerivationVm.cs
similarity index 100%
rename from ModernKeePass.Application/Cryptography/Models/KeyDerivationVm.cs
rename to ModernKeePass.Application/Parameters/Models/KeyDerivationVm.cs
diff --git a/ModernKeePass.Application/Cryptography/Queries/GetCiphers/GetCiphersQuery.cs b/ModernKeePass.Application/Parameters/Queries/GetCiphers/GetCiphersQuery.cs
similarity index 100%
rename from ModernKeePass.Application/Cryptography/Queries/GetCiphers/GetCiphersQuery.cs
rename to ModernKeePass.Application/Parameters/Queries/GetCiphers/GetCiphersQuery.cs
diff --git a/ModernKeePass.Application/Cryptography/Queries/GetCompressions/GetCompressionsQuery.cs b/ModernKeePass.Application/Parameters/Queries/GetCompressions/GetCompressionsQuery.cs
similarity index 100%
rename from ModernKeePass.Application/Cryptography/Queries/GetCompressions/GetCompressionsQuery.cs
rename to ModernKeePass.Application/Parameters/Queries/GetCompressions/GetCompressionsQuery.cs
diff --git a/ModernKeePass.Application/Cryptography/Queries/GetKeyDerivations/GetKeyDerivationsQuery.cs b/ModernKeePass.Application/Parameters/Queries/GetKeyDerivations/GetKeyDerivationsQuery.cs
similarity index 100%
rename from ModernKeePass.Application/Cryptography/Queries/GetKeyDerivations/GetKeyDerivationsQuery.cs
rename to ModernKeePass.Application/Parameters/Queries/GetKeyDerivations/GetKeyDerivationsQuery.cs
diff --git a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
index bcdb38f..17a5f33 100644
--- a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
+++ b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
@@ -32,6 +32,12 @@ namespace ModernKeePass.Infrastructure.KeePass
public GroupEntity RootGroup { get; private set; }
// Settings
+ public bool IsRecycleBinEnabled
+ {
+ get { return _pwDatabase.RecycleBinEnabled; }
+ set { _pwDatabase.RecycleBinEnabled = value; }
+ }
+
public string RecycleBinId
{
get
@@ -68,9 +74,7 @@ namespace ModernKeePass.Infrastructure.KeePass
get { return _pwDatabase.Compression.ToString("G"); }
set { _pwDatabase.Compression = (PwCompressionAlgorithm) Enum.Parse(typeof(PwCompressionAlgorithm), value); }
}
-
- public bool IsRecycleBinEnabled => _pwDatabase.RecycleBinEnabled;
-
+
public KeePassDatabaseClient(ISettingsProxy settings, IFileProxy fileService, IMapper mapper)
{
_settings = settings;
@@ -120,7 +124,6 @@ namespace ModernKeePass.Infrastructure.KeePass
_fileAccessToken = fileInfo.Path;
- // TODO: create sample data depending on settings
return _mapper.Map(_pwDatabase.RootGroup);
}
@@ -138,16 +141,16 @@ namespace ModernKeePass.Infrastructure.KeePass
}
}
- public async Task SaveDatabase(FileInfo fileInfo)
+ public async Task SaveDatabase(string filePath)
{
try
{
- var newFileContents = await _fileService.OpenBinaryFile(fileInfo.Path);
+ var newFileContents = await _fileService.OpenBinaryFile(filePath);
_pwDatabase.SaveAs(IOConnectionInfo.FromByteArray(newFileContents), true, new NullStatusLogger());
- await _fileService.WriteBinaryContentsToFile(fileInfo.Path, _pwDatabase.IOConnectionInfo.Bytes);
+ await _fileService.WriteBinaryContentsToFile(filePath, _pwDatabase.IOConnectionInfo.Bytes);
_fileService.ReleaseFile(_fileAccessToken);
- _fileAccessToken = fileInfo.Path;
+ _fileAccessToken = filePath;
}
catch (Exception e)
{
diff --git a/ModernKeePass/App.xaml.cs b/ModernKeePass/App.xaml.cs
index a26696d..b3940bb 100644
--- a/ModernKeePass/App.xaml.cs
+++ b/ModernKeePass/App.xaml.cs
@@ -174,7 +174,7 @@ namespace ModernKeePass
{
var database = await Mediator.Send(new ReOpenDatabaseQuery());
#if DEBUG
- ToastNotificationHelper.ShowGenericToast(database.Name, "Database reopened (changes were saved)");
+ ToastNotificationHelper.ShowGenericToast(database.Title, "Database reopened (changes were saved)");
#endif
}
catch (Exception)
diff --git a/ModernKeePass/Converters/IntToSymbolConverter.cs b/ModernKeePass/Converters/IntToSymbolConverter.cs
index 9f69a08..8736e66 100644
--- a/ModernKeePass/Converters/IntToSymbolConverter.cs
+++ b/ModernKeePass/Converters/IntToSymbolConverter.cs
@@ -1,7 +1,7 @@
using System;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
-using ModernKeePassLib;
+using ModernKeePass.Domain.Enums;
namespace ModernKeePass.Converters
{
@@ -9,66 +9,59 @@ namespace ModernKeePass.Converters
{
public object Convert(object value, Type targetType, object parameter, string language)
{
- var icon = (PwIcon) value;
+ var icon = (Icon) value;
switch (icon)
{
- case PwIcon.Key: return Symbol.Permissions;
- case PwIcon.WorldSocket:
- case PwIcon.World: return Symbol.World;
- case PwIcon.Warning: return Symbol.Important;
- case PwIcon.WorldComputer:
- case PwIcon.Drive:
- case PwIcon.DriveWindows:
- case PwIcon.NetworkServer: return Symbol.MapDrive;
- case PwIcon.MarkedDirectory: return Symbol.Map;
- case PwIcon.UserCommunication: return Symbol.ContactInfo;
- case PwIcon.Parts: return Symbol.ViewAll;
- case PwIcon.Notepad: return Symbol.Document;
- case PwIcon.Identity: return Symbol.Contact2;
- case PwIcon.PaperReady: return Symbol.SyncFolder;
- case PwIcon.Digicam: return Symbol.Camera;
- case PwIcon.IRCommunication: return Symbol.View;
- case PwIcon.Energy: return Symbol.ZeroBars;
- case PwIcon.Scanner: return Symbol.Scan;
- case PwIcon.CDRom: return Symbol.Rotate;
- case PwIcon.Monitor: return Symbol.Caption;
- case PwIcon.EMailBox:
- case PwIcon.EMail: return Symbol.Mail;
- case PwIcon.Configuration: return Symbol.Setting;
- case PwIcon.ClipboardReady: return Symbol.Paste;
- case PwIcon.PaperNew: return Symbol.Page2;
- case PwIcon.Screen: return Symbol.GoToStart;
- case PwIcon.EnergyCareful: return Symbol.FourBars;
- case PwIcon.Disk: return Symbol.Save;
- case PwIcon.Console: return Symbol.SlideShow;
- case PwIcon.Printer: return Symbol.Scan;
- case PwIcon.ProgramIcons: return Symbol.GoToStart;
- case PwIcon.Settings:
- case PwIcon.Tool: return Symbol.Repair;
- case PwIcon.Archive: return Symbol.Crop;
- case PwIcon.Count: return Symbol.Calculator;
- case PwIcon.Clock: return Symbol.Clock;
- case PwIcon.EMailSearch: return Symbol.Find;
- case PwIcon.PaperFlag: return Symbol.Flag;
- case PwIcon.TrashBin: return Symbol.Delete;
- case PwIcon.Expired: return Symbol.ReportHacked;
- case PwIcon.Info: return Symbol.Help;
- case PwIcon.Folder:
- case PwIcon.FolderOpen:
- case PwIcon.FolderPackage: return Symbol.Folder;
- case PwIcon.PaperLocked: return Symbol.ProtectedDocument;
- case PwIcon.Checked: return Symbol.Accept;
- case PwIcon.Pen: return Symbol.Edit;
- case PwIcon.Thumbnail: return Symbol.BrowsePhotos;
- case PwIcon.Book: return Symbol.Library;
- case PwIcon.List: return Symbol.List;
- case PwIcon.UserKey: return Symbol.ContactPresence;
- case PwIcon.Home: return Symbol.Home;
- case PwIcon.Star: return Symbol.OutlineStar;
- case PwIcon.Money: return Symbol.Shop;
- case PwIcon.Certificate: return Symbol.PreviewLink;
- case PwIcon.BlackBerry: return Symbol.CellPhone;
- default: return Symbol.Stop;
+ case Icon.Delete: return Symbol.Delete;
+ case Icon.Edit: return Symbol.Edit;
+ case Icon.Save: return Symbol.Save;
+ case Icon.Cancel: return Symbol.Cancel;
+ case Icon.Accept: return Symbol.Accept;
+ case Icon.Home: return Symbol.Home;
+ case Icon.Camera: return Symbol.Camera;
+ case Icon.Setting: return Symbol.Setting;
+ case Icon.Mail: return Symbol.Mail;
+ case Icon.Find: return Symbol.Find;
+ case Icon.Help: return Symbol.Help;
+ case Icon.Clock: return Symbol.Clock;
+ case Icon.Crop: return Symbol.Crop;
+ case Icon.World: return Symbol.World;
+ case Icon.Flag: return Symbol.Flag;
+ case Icon.PreviewLink: return Symbol.PreviewLink;
+ case Icon.Document: return Symbol.Document;
+ case Icon.ProtectedDocument: return Symbol.ProtectedDocument;
+ case Icon.ContactInfo: return Symbol.ContactInfo;
+ case Icon.ViewAll: return Symbol.ViewAll;
+ case Icon.Rotate: return Symbol.Rotate;
+ case Icon.List: return Symbol.List;
+ case Icon.Shop: return Symbol.Shop;
+ case Icon.BrowsePhotos: return Symbol.BrowsePhotos;
+ case Icon.Caption: return Symbol.Caption;
+ case Icon.Repair: return Symbol.Repair;
+ case Icon.Page: return Symbol.Page;
+ case Icon.Paste: return Symbol.Paste;
+ case Icon.Important: return Symbol.Important;
+ case Icon.SlideShow: return Symbol.SlideShow;
+ case Icon.MapDrive: return Symbol.MapDrive;
+ case Icon.ContactPresence: return Symbol.ContactPresence;
+ case Icon.Contact: return Symbol.Contact;
+ case Icon.Folder: return Symbol.Folder;
+ case Icon.View: return Symbol.View;
+ case Icon.Permissions: return Symbol.Permissions;
+ case Icon.Map: return Symbol.Map;
+ case Icon.CellPhone: return Symbol.CellPhone;
+ case Icon.OutlineStar: return Symbol.OutlineStar;
+ case Icon.Calculator: return Symbol.Calculator;
+ case Icon.Library: return Symbol.Library;
+ case Icon.SyncFolder: return Symbol.SyncFolder;
+ case Icon.GoToStart: return Symbol.GoToStart;
+ case Icon.ZeroBars: return Symbol.ZeroBars;
+ case Icon.FourBars: return Symbol.FourBars;
+ case Icon.Scan: return Symbol.Scan;
+ case Icon.ReportHacked: return Symbol.ReportHacked;
+ case Icon.Stop: return Symbol.Stop;
+ default:
+ throw new ArgumentOutOfRangeException();
}
}
@@ -78,52 +71,54 @@ namespace ModernKeePass.Converters
var defaultIcon = parameter != null ? int.Parse(parameter as string) : -1;
switch (symbol)
{
- case Symbol.Delete: return (int)PwIcon.TrashBin;
- case Symbol.Edit: return (int) PwIcon.Pen;
- case Symbol.Save: return (int) PwIcon.Disk;
- case Symbol.Cancel: return (int) PwIcon.Expired;
- case Symbol.Accept: return (int) PwIcon.Checked;
- case Symbol.Home: return (int) PwIcon.Home;
- case Symbol.Camera: return (int) PwIcon.Digicam;
- case Symbol.Setting: return (int) PwIcon.Configuration;
- case Symbol.Mail: return (int) PwIcon.EMail;
- case Symbol.Find: return (int) PwIcon.EMailSearch;
- case Symbol.Help: return (int) PwIcon.Info;
- case Symbol.Clock: return (int) PwIcon.Clock;
- case Symbol.Crop: return (int) PwIcon.Archive;
- case Symbol.World: return (int) PwIcon.World;
- case Symbol.Flag: return (int) PwIcon.PaperFlag;
- case Symbol.PreviewLink: return (int) PwIcon.Certificate;
- case Symbol.Document: return (int) PwIcon.Notepad;
- case Symbol.ProtectedDocument: return (int) PwIcon.PaperLocked;
- case Symbol.ContactInfo: return (int) PwIcon.UserCommunication;
- case Symbol.ViewAll: return (int) PwIcon.Parts;
- case Symbol.Rotate: return (int) PwIcon.CDRom;
- case Symbol.List: return (int) PwIcon.List;
- case Symbol.Shop: return (int) PwIcon.Money;
- case Symbol.BrowsePhotos: return (int) PwIcon.Thumbnail;
- case Symbol.Caption: return (int) PwIcon.Monitor;
- case Symbol.Repair: return (int) PwIcon.Tool;
- case Symbol.Page2: return (int) PwIcon.PaperNew;
- case Symbol.Paste: return (int) PwIcon.ClipboardReady;
- case Symbol.Important: return (int) PwIcon.Warning;
- case Symbol.SlideShow: return (int) PwIcon.Console;
- case Symbol.MapDrive: return (int) PwIcon.NetworkServer;
- case Symbol.ContactPresence: return (int) PwIcon.UserKey;
- case Symbol.Contact2: return (int) PwIcon.Identity;
- case Symbol.Folder: return (int) PwIcon.Folder;
- case Symbol.View: return (int) PwIcon.IRCommunication;
- case Symbol.Permissions: return (int) PwIcon.Key;
- case Symbol.Map: return (int) PwIcon.MarkedDirectory;
- case Symbol.CellPhone: return (int) PwIcon.BlackBerry;
- case Symbol.OutlineStar: return (int) PwIcon.Star;
- case Symbol.Calculator: return (int) PwIcon.Count;
- case Symbol.Library: return (int) PwIcon.Book;
- case Symbol.SyncFolder: return (int) PwIcon.PaperReady;
- case Symbol.GoToStart: return (int) PwIcon.Screen;
- case Symbol.ZeroBars: return (int) PwIcon.Energy;
- case Symbol.FourBars: return (int) PwIcon.EnergyCareful;
- case Symbol.Scan: return (int) PwIcon.Scanner;
+ case Symbol.Delete: return Icon.Delete;
+ case Symbol.Edit: return Icon.Edit;
+ case Symbol.Save: return Icon.Save;
+ case Symbol.Cancel: return Icon.Cancel;
+ case Symbol.Accept: return Icon.Accept;
+ case Symbol.Home: return Icon.Home;
+ case Symbol.Camera: return Icon.Camera;
+ case Symbol.Setting: return Icon.Setting;
+ case Symbol.Mail: return Icon.Mail;
+ case Symbol.Find: return Icon.Find;
+ case Symbol.Help: return Icon.Help;
+ case Symbol.Clock: return Icon.Clock;
+ case Symbol.Crop: return Icon.Crop;
+ case Symbol.World: return Icon.World;
+ case Symbol.Flag: return Icon.Flag;
+ case Symbol.PreviewLink: return Icon.PreviewLink;
+ case Symbol.Document: return Icon.Document;
+ case Symbol.ProtectedDocument: return Icon.ProtectedDocument;
+ case Symbol.ContactInfo: return Icon.ContactInfo;
+ case Symbol.ViewAll: return Icon.ViewAll;
+ case Symbol.Rotate: return Icon.Rotate;
+ case Symbol.List: return Icon.List;
+ case Symbol.Shop: return Icon.Shop;
+ case Symbol.BrowsePhotos: return Icon.BrowsePhotos;
+ case Symbol.Caption: return Icon.Caption;
+ case Symbol.Repair: return Icon.Repair;
+ case Symbol.Page: return Icon.Page;
+ case Symbol.Paste: return Icon.Paste;
+ case Symbol.Important: return Icon.Important;
+ case Symbol.SlideShow: return Icon.SlideShow;
+ case Symbol.MapDrive: return Icon.MapDrive;
+ case Symbol.ContactPresence: return Icon.ContactPresence;
+ case Symbol.Contact: return Icon.Contact;
+ case Symbol.Folder: return Icon.Folder;
+ case Symbol.View: return Icon.View;
+ case Symbol.Permissions: return Icon.Permissions;
+ case Symbol.Map: return Icon.Map;
+ case Symbol.CellPhone: return Icon.CellPhone;
+ case Symbol.OutlineStar: return Icon.OutlineStar;
+ case Symbol.Calculator: return Icon.Calculator;
+ case Symbol.Library: return Icon.Library;
+ case Symbol.SyncFolder: return Icon.SyncFolder;
+ case Symbol.GoToStart: return Icon.GoToStart;
+ case Symbol.ZeroBars: return Icon.ZeroBars;
+ case Symbol.FourBars: return Icon.FourBars;
+ case Symbol.Scan: return Icon.Scan;
+ case Symbol.ReportHacked: return Icon.ReportHacked;
+ case Symbol.Stop: return Icon.Stop;
default: return defaultIcon;
}
}
diff --git a/ModernKeePass/Events/PasswordEventArgs.cs b/ModernKeePass/Events/PasswordEventArgs.cs
index 4311503..099a5f9 100644
--- a/ModernKeePass/Events/PasswordEventArgs.cs
+++ b/ModernKeePass/Events/PasswordEventArgs.cs
@@ -1,5 +1,5 @@
using System;
-using ModernKeePass.Application.Group.Models;
+using ModernKeePass.ViewModels;
namespace ModernKeePass.Events
{
diff --git a/ModernKeePass/Interfaces/IVmEntity.cs b/ModernKeePass/Interfaces/IVmEntity.cs
index 7bd1203..2354ca0 100644
--- a/ModernKeePass/Interfaces/IVmEntity.cs
+++ b/ModernKeePass/Interfaces/IVmEntity.cs
@@ -28,7 +28,7 @@ namespace ModernKeePass.Interfaces
/// Move a entity to the destination group
///
/// The destination to move the entity to
- void Move(GroupVm destination);
+ Task Move(GroupVm destination);
///
/// Delete from Model
///
diff --git a/ModernKeePass/ViewModels/CompositeKeyVm.cs b/ModernKeePass/ViewModels/CompositeKeyVm.cs
index 96e939c..2c01870 100644
--- a/ModernKeePass/ViewModels/CompositeKeyVm.cs
+++ b/ModernKeePass/ViewModels/CompositeKeyVm.cs
@@ -1,5 +1,4 @@
using System;
-using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;
using Windows.Storage;
@@ -7,12 +6,11 @@ using Windows.Storage.AccessCache;
using MediatR;
using ModernKeePass.Application.Database.Commands.UpdateCredentials;
using ModernKeePass.Application.Database.Queries.OpenDatabase;
+using ModernKeePass.Application.Security.Commands.GenerateKeyFile;
+using ModernKeePass.Application.Security.Queries.EstimatePasswordComplexity;
using ModernKeePass.Common;
-using ModernKeePass.Domain.Dtos;
using ModernKeePass.Interfaces;
using ModernKeePass.Services;
-using ModernKeePassLib.Cryptography;
-using ModernKeePassLib.Keys;
namespace ModernKeePass.ViewModels
{
@@ -101,8 +99,8 @@ namespace ModernKeePass.ViewModels
public Application.Group.Models.GroupVm RootGroup { get; set; }
- public double PasswordComplexityIndicator => QualityEstimation.EstimatePasswordBits(Password?.ToCharArray());
-
+ public double PasswordComplexityIndicator => _mediator.Send(new EstimatePasswordComplexityQuery { Password = Password }).GetAwaiter().GetResult();
+
private bool _hasPassword;
private bool _hasKeyFile;
private bool _hasUserAccount;
@@ -129,15 +127,13 @@ namespace ModernKeePass.ViewModels
try
{
_isOpening = true;
- OnPropertyChanged("IsValid");
- var fileInfo = new FileInfo
- {
- Name = databaseFile.DisplayName,
- Path = StorageApplicationPermissions.FutureAccessList.Add(databaseFile)
- };
+ OnPropertyChanged(nameof(IsValid));
- var database = await _mediator.Send(new OpenDatabaseQuery { FileInfo = fileInfo, Credentials = CreateCredentials()});
- await Task.Run(() => RootGroup = database.RootGroup);
+ RootGroup = await _mediator.Send(new OpenDatabaseQuery {
+ FilePath = StorageApplicationPermissions.FutureAccessList.Add(databaseFile),
+ KeyFilePath = HasKeyFile && KeyFile != null ? StorageApplicationPermissions.FutureAccessList.Add(KeyFile) : null,
+ Password = Password = HasPassword ? Password : null,
+ });
return true;
}
catch (ArgumentException)
@@ -163,16 +159,19 @@ namespace ModernKeePass.ViewModels
public async Task UpdateKey()
{
- //Database.UpdateCompositeKey(await CreateCompositeKey());
- await _mediator.Send(new UpdateCredentialsCommand {Credentials = CreateCredentials()});
+ await _mediator.Send(new UpdateCredentialsCommand
+ {
+ KeyFilePath = HasKeyFile && KeyFile != null ? StorageApplicationPermissions.FutureAccessList.Add(KeyFile) : null,
+ Password = Password = HasPassword ? Password : null,
+ });
UpdateStatus(_resource.GetResourceValue("CompositeKeyUpdated"), StatusTypes.Success);
}
public async Task CreateKeyFile(StorageFile file)
{
+ var token = StorageApplicationPermissions.FutureAccessList.Add(file);
// TODO: implement entropy generator
- var fileContents = await FileIO.ReadBufferAsync(file);
- KcpKeyFile.Create(fileContents.ToArray());
+ await _mediator.Send(new GenerateKeyFileCommand {KeyFilePath = token});
KeyFile = file;
}
@@ -181,15 +180,5 @@ namespace ModernKeePass.ViewModels
Status = text;
StatusType = (int)type;
}
-
- private Credentials CreateCredentials()
- {
- var credentials = new Credentials
- {
- Password = HasPassword ? Password: null,
- KeyFilePath = HasKeyFile && KeyFile != null ? StorageApplicationPermissions.FutureAccessList.Add(KeyFile) : null
- };
- return credentials;
- }
}
}
diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs
index 1adb5eb..c144088 100644
--- a/ModernKeePass/ViewModels/EntryVm.cs
+++ b/ModernKeePass/ViewModels/EntryVm.cs
@@ -5,7 +5,10 @@ using System.Threading.Tasks;
using System.Windows.Input;
using MediatR;
using ModernKeePass.Application.Database.Commands.SaveDatabase;
+using ModernKeePass.Application.Database.Models;
+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;
@@ -32,7 +35,7 @@ namespace ModernKeePass.ViewModels
public bool BracketsPatternSelected { get; set; }
public string CustomChars { get; set; } = string.Empty;
public string Id => _entry.Id;
- public bool IsRecycleOnDelete => _database.RecycleBinEnabled && !ParentGroup.IsSelected;
+ public bool IsRecycleOnDelete => GetDatabase().IsRecycleBinEnabled && !ParentGroup.IsSelected;
public IEnumerable BreadCrumb => new List(ParentGroup.BreadCrumb) {ParentGroup};
///
/// Determines if the Entry is current or from history
@@ -211,7 +214,7 @@ namespace ModernKeePass.ViewModels
SaveCommand = new RelayCommand(() => _mediator.Send(new SaveDatabaseCommand()));
GeneratePasswordCommand = new RelayCommand(async () => await GeneratePassword());
- UndoDeleteCommand = new RelayCommand(() => Move(PreviousGroup), () => PreviousGroup != null);
+ UndoDeleteCommand = new RelayCommand(async () => await Move(PreviousGroup), () => PreviousGroup != null);
}
public async Task GeneratePassword()
@@ -233,20 +236,21 @@ namespace ModernKeePass.ViewModels
}
- public Task MarkForDelete(string recycleBinTitle)
+ public async Task MarkForDelete(string recycleBinTitle)
{
- if (_database.RecycleBinEnabled && _database.RecycleBin?.IdUuid == null)
- _database.CreateRecycleBin(recycleBinTitle);
- Move(_database.RecycleBinEnabled && !ParentGroup.IsSelected ? _database.RecycleBin : null);
+ 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);
}
- public void Move(GroupVm destination)
+ public async Task Move(GroupVm destination)
{
PreviousGroup = ParentGroup;
PreviousGroup.Entries.Remove(this);
if (destination == null)
{
- _database.AddDeletedItem(IdUuid);
+ await _mediator.Send(new DeleteEntryCommand { Entry = _entry });
return;
}
ParentGroup = destination;
@@ -269,5 +273,10 @@ namespace ModernKeePass.ViewModels
_mediator.Send(new GetResourceQuery{Key = "EntryCurrent"}).GetAwaiter().GetResult() :
_entry.ModificationDate.ToString("g");
}
+
+ private DatabaseVm GetDatabase()
+ {
+ return _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
+ }
}
}
diff --git a/ModernKeePass/ViewModels/GroupVm.cs b/ModernKeePass/ViewModels/GroupVm.cs
index 35bafcb..73e7b6c 100644
--- a/ModernKeePass/ViewModels/GroupVm.cs
+++ b/ModernKeePass/ViewModels/GroupVm.cs
@@ -6,13 +6,16 @@ using System.Threading.Tasks;
using System.Windows.Input;
using MediatR;
using ModernKeePass.Application.Database.Commands.SaveDatabase;
+using ModernKeePass.Application.Database.Models;
using ModernKeePass.Application.Database.Queries.GetDatabase;
using ModernKeePass.Application.Group.Commands.AddEntry;
+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.RemoveGroup;
using ModernKeePass.Application.Group.Commands.SortEntries;
using ModernKeePass.Application.Group.Commands.SortGroups;
using ModernKeePass.Common;
@@ -54,14 +57,18 @@ namespace ModernKeePass.ViewModels
public bool ShowRestore => IsNotRoot && ParentGroup.IsSelected;
- public bool IsRecycleOnDelete => IsRecycleBinEnabled().GetAwaiter().GetResult() && !IsSelected && !ParentGroup.IsSelected;
+ public bool IsRecycleOnDelete => GetDatabase().IsRecycleBinEnabled && !IsSelected && !ParentGroup.IsSelected;
///
/// Is the Group the database Recycle Bin?
///
public bool IsSelected
{
- get { return IsRecycleBinEnabled().GetAwaiter().GetResult() && _database.RecycleBin?.Id == Id; }
+ get
+ {
+ var database = GetDatabase();
+ return database.IsRecycleBinEnabled && database.RecycleBinId == Id;
+ }
set
{
if (value && _group != null) _database.RecycleBin = this;
@@ -150,7 +157,7 @@ namespace ModernKeePass.ViewModels
await SortEntriesAsync().ConfigureAwait(false), () => IsEditMode);
SortGroupsCommand = new RelayCommand(async () =>
await SortGroupsAsync().ConfigureAwait(false), () => IsEditMode);
- UndoDeleteCommand = new RelayCommand(() => Move(PreviousGroup), () => PreviousGroup != null);
+ UndoDeleteCommand = new RelayCommand(async () => await Move(PreviousGroup), () => PreviousGroup != null);
if (recycleBinId != null && _group.Id.Equals(recycleBinId)) _database.RecycleBin = this;
Entries = new ObservableCollection(group.Entries.Select(e => new EntryVm(e, this)));
@@ -200,31 +207,31 @@ namespace ModernKeePass.ViewModels
public async Task MarkForDelete(string recycleBinTitle)
{
- var isRecycleBinEnabled = await IsRecycleBinEnabled();
- if (isRecycleBinEnabled && _database.RecycleBin?.IdUuid == null)
- _database.CreateRecycleBin(recycleBinTitle);
- Move(isRecycleBinEnabled && !IsSelected ? _database.RecycleBin : null);
+ 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 && !IsSelected ? _database.RecycleBin : null);
((RelayCommand)UndoDeleteCommand).RaiseCanExecuteChanged();
}
- public void UndoDelete()
+ public async Task UndoDelete()
{
- Move(PreviousGroup);
+ await Move(PreviousGroup);
}
- public void Move(GroupVm destination)
+ public async Task Move(GroupVm destination)
{
PreviousGroup = ParentGroup;
PreviousGroup.Groups.Remove(this);
- PreviousGroup._group.SubGroups.Remove(_group);
+ await _mediator.Send(new RemoveGroupCommand {ParentGroup = PreviousGroup._group, Group = _group});
if (destination == null)
{
- _database.AddDeletedItem(IdUuid);
+ await _mediator.Send(new DeleteGroupCommand { Group = _group });
return;
}
ParentGroup = destination;
ParentGroup.Groups.Add(this);
- ParentGroup._group.AddGroup(_group, true);
+ await _mediator.Send(new AddGroupCommand {ParentGroup = ParentGroup._group, Group = _group});
}
public async Task CommitDelete()
@@ -251,10 +258,9 @@ namespace ModernKeePass.ViewModels
OnPropertyChanged(nameof(Groups));
}
- private async Task IsRecycleBinEnabled()
+ private DatabaseVm GetDatabase()
{
- var database = await _mediator.Send(new GetDatabaseQuery());
- return database.IsRecycleBinEnabled;
+ return _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
}
}
}
diff --git a/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs b/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
index 486d7bd..0db9fef 100644
--- a/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
+++ b/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
@@ -1,55 +1,74 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
+using MediatR;
+using ModernKeePass.Application.Cryptography.Models;
+using ModernKeePass.Application.Cryptography.Queries.GetCiphers;
+using ModernKeePass.Application.Cryptography.Queries.GetCompressions;
+using ModernKeePass.Application.Cryptography.Queries.GetKeyDerivations;
+using ModernKeePass.Application.Database.Models;
+using ModernKeePass.Application.Database.Queries.GetDatabase;
+using ModernKeePass.Application.Parameters.Commands.SetCipher;
+using ModernKeePass.Application.Parameters.Commands.SetCompression;
+using ModernKeePass.Application.Parameters.Commands.SetHasRecycleBin;
+using ModernKeePass.Application.Parameters.Commands.SetKeyDerivation;
+using ModernKeePass.Application.Parameters.Commands.SetRecycleBin;
using ModernKeePass.Common;
using ModernKeePass.Interfaces;
-using ModernKeePass.Services;
-using ModernKeePassLib;
-using ModernKeePassLib.Cryptography.Cipher;
-using ModernKeePassLib.Cryptography.KeyDerivation;
namespace ModernKeePass.ViewModels
{
// TODO: implement Kdf settings
public class SettingsDatabaseVm: NotifyPropertyChangedBase, IHasSelectableObject
{
- private readonly IDatabaseService _database;
+ private readonly IMediator _mediator;
+ private readonly DatabaseVm _database;
private GroupVm _selectedItem;
public bool HasRecycleBin
{
- get { return _database.RecycleBinEnabled; }
+ get { return _database.IsRecycleBinEnabled; }
set
{
- _database.RecycleBinEnabled = value;
- OnPropertyChanged("HasRecycleBin");
+ _mediator.Send(new SetHasRecycleBinCommand {HasRecycleBin = value}).GetAwaiter().GetResult();
+ OnPropertyChanged(nameof(HasRecycleBin));
}
}
public bool IsNewRecycleBin
{
- get { return _database.RecycleBin == null; }
+ get { return _database.RecycleBinId == null; }
set
{
- if (value) _database.RecycleBin = null;
+ if (value) _mediator.Send(new SetRecycleBinCommand() { RecycleBinId = null }).GetAwaiter().GetResult();
}
}
public ObservableCollection Groups { get; set; }
- public IEnumerable Ciphers
+ public IEnumerable Ciphers => _mediator.Send(new GetCiphersQuery()).GetAwaiter().GetResult();
+ public IEnumerable Compressions => _mediator.Send(new GetCompressionsQuery()).GetAwaiter().GetResult();
+ public IEnumerable KeyDerivations => _mediator.Send(new GetKeyDerivationsQuery()).GetAwaiter().GetResult();
+
+ public CipherVm SelectedCipher
{
- get
- {
- for (var inx = 0; inx < CipherPool.GlobalPool.EngineCount; inx++)
- {
- yield return CipherPool.GlobalPool[inx].DisplayName;
- }
- }
+ get { return Ciphers.FirstOrDefault(c => c.Id == _database.CipherId); }
+ set { _mediator.Send(new SetCipherCommand {CipherId = value.Id}).GetAwaiter().GetResult(); }
}
- public int CipherIndex
+ public string SelectedCompression
+ {
+ get { return Compressions.FirstOrDefault(c => c == _database.Compression); }
+ set { _mediator.Send(new SetCompressionCommand {Compression = value}).GetAwaiter().GetResult(); }
+ }
+
+ public KeyDerivationVm SelectedKeyDerivation
+ {
+ get { return KeyDerivations.FirstOrDefault(c => c.Id == _database.KeyDerivationId); }
+ set { _mediator.Send(new SetKeyDerivationCommand {KeyDerivationId = value.Id}).GetAwaiter().GetResult(); }
+ }
+
+ /*public int CipherIndex
{
get
{
@@ -60,22 +79,19 @@ namespace ModernKeePass.ViewModels
return -1;
}
set { _database.DataCipher = CipherPool.GlobalPool[value].CipherUuid; }
- }
+ }*/
- public IEnumerable Compressions => Enum.GetNames(typeof(PwCompressionAlgorithm)).Take((int)PwCompressionAlgorithm.Count);
- public string CompressionName
+ /*public string CompressionName
{
- get { return Enum.GetName(typeof(PwCompressionAlgorithm), _database.CompressionAlgorithm); }
+ get { return _database.}
set { _database.CompressionAlgorithm = (PwCompressionAlgorithm)Enum.Parse(typeof(PwCompressionAlgorithm), value); }
- }
- public IEnumerable KeyDerivations => KdfPool.Engines.Select(e => e.Name);
-
- public string KeyDerivationName
+ }*/
+ /*public string KeyDerivationName
{
get { return KdfPool.Get(_database.KeyDerivation.KdfUuid).Name; }
set { _database.KeyDerivation = KdfPool.Engines.FirstOrDefault(e => e.Name == value)?.GetDefaultParameters(); }
- }
+ }*/
public ISelectableModel SelectedItem
{
@@ -97,12 +113,13 @@ namespace ModernKeePass.ViewModels
}
}
- public SettingsDatabaseVm() : this(DatabaseService.Instance) { }
+ public SettingsDatabaseVm() : this(App.Mediator) { }
- public SettingsDatabaseVm(IDatabaseService database)
+ public SettingsDatabaseVm(IMediator mediator)
{
- _database = database;
- Groups = _database?.RootGroup.Groups;
+ _mediator = mediator;
+ _database = _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
+ //Groups = _database.RootGroup.SubGroups;
}
}
}
diff --git a/ModernKeePass/ViewModels/NewVm.cs b/ModernKeePass/ViewModels/NewVm.cs
index 9d92a4d..e347dd2 100644
--- a/ModernKeePass/ViewModels/NewVm.cs
+++ b/ModernKeePass/ViewModels/NewVm.cs
@@ -1,14 +1,21 @@
-using Windows.Storage;
+using System.Threading.Tasks;
+using Windows.Storage;
using Windows.UI.Xaml.Controls;
+using MediatR;
+using ModernKeePass.Application.Database.Queries.GetDatabase;
+using ModernKeePass.Application.Entry.Commands.SetFieldValue;
+using ModernKeePass.Application.Group.Commands.CreateEntry;
+using ModernKeePass.Application.Group.Commands.CreateGroup;
using ModernKeePass.Converters;
+using ModernKeePass.Domain.Enums;
using ModernKeePass.ImportFormats;
using ModernKeePass.Interfaces;
-using ModernKeePassLib;
namespace ModernKeePass.ViewModels
{
public class NewVm : OpenVm
{
+ private readonly IMediator _mediator;
private string _importFormatHelp;
public string Password { get; set; }
@@ -30,15 +37,23 @@ namespace ModernKeePass.ViewModels
}
}
- public void PopulateInitialData(IDatabaseService database, ISettingsService settings, IImportService importService)
+ public NewVm(): this(App.Mediator) { }
+
+ public NewVm(IMediator mediator)
{
- if (settings.GetSetting("Sample") && !IsImportChecked) CreateSampleData(database.RootGroup);
+ _mediator = mediator;
+ }
+
+ public async Task PopulateInitialData(ISettingsService settings, IImportService importService)
+ {
+ var database = await _mediator.Send(new GetDatabaseQuery());
+ if (settings.GetSetting("Sample") && !IsImportChecked) await CreateSampleData(database.RootGroup);
else if (IsImportChecked && ImportFile != null && ! (ImportFormat is NullImportFormat)) importService.Import(ImportFormat, ImportFile, database.RootGroup);
}
- private void CreateSampleData(GroupVm group)
+ private async Task CreateSampleData(Application.Group.Models.GroupVm group)
{
- var converter = new IntToSymbolConverter();
+ /*var converter = new IntToSymbolConverter();
var bankingGroup = group.AddNewGroup("Banking");
bankingGroup.Icon = (int)converter.ConvertBack(Symbol.Calculator, null, null, string.Empty);
@@ -60,7 +75,24 @@ namespace ModernKeePass.ViewModels
sample2.Title = "Sample Entry #2";
sample2.UserName = "Michael321";
sample2.Url = PwDefs.HelpUrl + "kb/testform.html";
- sample2.Password = "12345";
+ sample2.Password = "12345";*/
+
+ var bankingGroup = await _mediator.Send(new CreateGroupCommand {ParentGroup = group, Name = "Banking"});
+ var emailGroup = await _mediator.Send(new CreateGroupCommand {ParentGroup = group, Name = "Email" });
+ var internetGroup = await _mediator.Send(new CreateGroupCommand {ParentGroup = group, Name = "Internet" });
+
+ var sample1 = await _mediator.Send(new CreateEntryCommand { ParentGroup = group });
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Title, FieldValue = "Sample Entry"});
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.UserName, FieldValue = "Username" });
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Password, FieldValue = "Password" });
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Url, FieldValue = "https://keepass.info/" });
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Notes, FieldValue = "You may safely delete this sample" });
+
+ var sample2 = await _mediator.Send(new CreateEntryCommand { ParentGroup = group });
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.Title, FieldValue = "Sample Entry #2"});
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.UserName, FieldValue = "Michael321" });
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.Password, FieldValue = "12345" });
+ await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.Url, FieldValue = "https://keepass.info/help/kb/testform.html" });
}
}
}
diff --git a/ModernKeePass/ViewModels/SaveVm.cs b/ModernKeePass/ViewModels/SaveVm.cs
index c10d960..8ac3f78 100644
--- a/ModernKeePass/ViewModels/SaveVm.cs
+++ b/ModernKeePass/ViewModels/SaveVm.cs
@@ -1,28 +1,32 @@
-using Windows.Storage;
-using ModernKeePass.Interfaces;
-using ModernKeePass.Services;
+using System.Threading.Tasks;
+using Windows.Storage;
+using Windows.Storage.AccessCache;
+using MediatR;
+using ModernKeePass.Application.Database.Commands.CloseDatabase;
+using ModernKeePass.Application.Database.Commands.SaveDatabase;
namespace ModernKeePass.ViewModels
{
public class SaveVm
{
- private readonly IDatabaseService _database;
- public SaveVm() : this(DatabaseService.Instance) { }
+ private readonly IMediator _mediator;
+ public SaveVm() : this(App.Mediator) { }
- public SaveVm(IDatabaseService database)
+ public SaveVm(IMediator mediator)
{
- _database = database;
+ _mediator = mediator;
}
- public void Save(bool close = true)
+ public async Task Save(bool close = true)
{
- _database.Save();
- if (close) _database.Close();
+ await _mediator.Send(new SaveDatabaseCommand());
+ if (close) await _mediator.Send(new CloseDatabaseCommand());
}
- public void Save(StorageFile file)
+ public async Task Save(StorageFile file)
{
- _database.Save(file);
+ var token = StorageApplicationPermissions.FutureAccessList.Add(file);
+ await _mediator.Send(new SaveDatabaseCommand { FilePath = token });
}
}
}
\ No newline at end of file
diff --git a/ModernKeePass/ViewModels/SettingsVm.cs b/ModernKeePass/ViewModels/SettingsVm.cs
index 98e092b..bc0f99c 100644
--- a/ModernKeePass/ViewModels/SettingsVm.cs
+++ b/ModernKeePass/ViewModels/SettingsVm.cs
@@ -1,6 +1,8 @@
using System.Collections.ObjectModel;
using System.Linq;
using Windows.UI.Xaml.Controls;
+using MediatR;
+using ModernKeePass.Application.Database.Queries.GetDatabase;
using ModernKeePass.Common;
using ModernKeePass.Interfaces;
using ModernKeePass.Views;
@@ -40,10 +42,11 @@ namespace ModernKeePass.ViewModels
}
}
- public SettingsVm() : this(DatabaseService.Instance, new ResourcesService()) { }
+ public SettingsVm() : this(App.Mediator, new ResourcesService()) { }
- public SettingsVm(IDatabaseService database, IResourceService resource)
+ public SettingsVm(IMediator mediator, IResourceService resource)
{
+ var database = mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
var menuItems = new ObservableCollection
{
new ListMenuItemVm
diff --git a/ModernKeePass/Views/GroupDetailPage.xaml.cs b/ModernKeePass/Views/GroupDetailPage.xaml.cs
index f10e2d3..8d18926 100644
--- a/ModernKeePass/Views/GroupDetailPage.xaml.cs
+++ b/ModernKeePass/Views/GroupDetailPage.xaml.cs
@@ -47,7 +47,7 @@ namespace ModernKeePass.Views
{
NavigationHelper.OnNavigatedTo(e);
- /*var args = e.Parameter as PasswordEventArgs;
+ var args = e.Parameter as PasswordEventArgs;
if (args != null)
DataContext = args.RootGroup;
else
@@ -55,9 +55,7 @@ namespace ModernKeePass.Views
var vm = e.Parameter as GroupVm;
if (vm != null)
DataContext = vm;
- }*/
- var args = e.Parameter as Application.Group.Models.GroupVm;
- if (args != null) DataContext = new GroupVm(args);
+ }
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
diff --git a/ModernKeePass/Views/SettingsPageFrames/SettingsDatabasePage.xaml b/ModernKeePass/Views/SettingsPageFrames/SettingsDatabasePage.xaml
index be9acd0..962fae0 100644
--- a/ModernKeePass/Views/SettingsPageFrames/SettingsDatabasePage.xaml
+++ b/ModernKeePass/Views/SettingsPageFrames/SettingsDatabasePage.xaml
@@ -27,10 +27,10 @@
-
+
-
+
-
+
diff --git a/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs b/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs
index 6ca4515..8a9aa5e 100644
--- a/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs
+++ b/ModernKeePass/Views/UserControls/CompositeKeyUserControl.xaml.cs
@@ -95,7 +95,7 @@ namespace ModernKeePass.Views.UserControls
if (UpdateKey)
{
await Model.UpdateKey();
- ValidationChecked?.Invoke(this, new PasswordEventArgs(Model.RootGroup));
+ ValidationChecked?.Invoke(this, new PasswordEventArgs(new GroupVm(Model.RootGroup, null)));
}
else
{
@@ -175,7 +175,7 @@ namespace ModernKeePass.Views.UserControls
ButtonLabel = resource.GetResourceValue("CompositeKeyOpening");
if (await Dispatcher.RunTaskAsync(async () => await Model.OpenDatabase(DatabaseFile, CreateNew)))
{
- ValidationChecked?.Invoke(this, new PasswordEventArgs(Model.RootGroup));
+ ValidationChecked?.Invoke(this, new PasswordEventArgs(new GroupVm(Model.RootGroup, null)));
}
ButtonLabel = oldLabel;
diff --git a/ModernKeePass/Win81App.csproj b/ModernKeePass/Win81App.csproj
index 8a55e40..40d3fae 100644
--- a/ModernKeePass/Win81App.csproj
+++ b/ModernKeePass/Win81App.csproj
@@ -149,7 +149,7 @@
-
+
@@ -404,10 +404,6 @@
..\packages\AutoMapper.Extensions.Microsoft.DependencyInjection.2.0.1\lib\netstandard1.1\AutoMapper.Extensions.Microsoft.DependencyInjection.dll
True
-
- ..\packages\Portable.BouncyCastle.1.8.5\lib\netstandard1.0\BouncyCastle.Crypto.dll
- True
-
..\packages\FluentValidation.8.6.2\lib\netstandard1.1\FluentValidation.dll
True
@@ -428,6 +424,10 @@
..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.1.1.1\lib\netstandard1.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
True
+
+ ..\packages\Win2D.win81.1.21.0\lib\win\Microsoft.Graphics.Canvas.winmd
+ True
+
..\packages\HockeySDK.Core.4.1.6\lib\portable-net45+win8+wp8+wpa81+win81+uap10.0\Microsoft.HockeyApp.Core45.dll
True
@@ -440,22 +440,6 @@
..\packages\Microsoft.Toolkit.Uwp.Notifications.2.0.0\lib\dotnet\Microsoft.Toolkit.Uwp.Notifications.dll
True
-
- ..\packages\ModernKeePassLib.2.44.1\lib\netstandard1.2\ModernKeePassLib.dll
- True
-
-
- ..\packages\SixLabors.Core.1.0.0-beta0006\lib\netstandard1.1\SixLabors.Core.dll
- True
-
-
- ..\packages\SixLabors.ImageSharp.1.0.0-beta0005\lib\netstandard1.1\SixLabors.ImageSharp.dll
- True
-
-
- ..\packages\Splat.3.0.0\lib\netstandard1.1\Splat.dll
- True
-
..\packages\System.Buffers.4.5.0\lib\netstandard1.1\System.Buffers.dll
True
@@ -594,6 +578,13 @@
12.0
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+