diff --git a/ModernKeePass.Application/Application.csproj b/ModernKeePass.Application/Application.csproj
index e32898d..1b819ed 100644
--- a/ModernKeePass.Application/Application.csproj
+++ b/ModernKeePass.Application/Application.csproj
@@ -39,7 +39,6 @@
-
diff --git a/ModernKeePass.Application/ApplicationModule.cs b/ModernKeePass.Application/ApplicationModule.cs
deleted file mode 100644
index b891e03..0000000
--- a/ModernKeePass.Application/ApplicationModule.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System.Reflection;
-using Autofac;
-using AutoMapper;
-using MediatR;
-using ModernKeePass.Application.Common.Mappings;
-using Module = Autofac.Module;
-
-namespace ModernKeePass.Application
-{
- public class ApplicationModule: Module
- {
- protected override void Load(ContainerBuilder builder)
- {
- // Register Automapper profiles
- builder.RegisterType().As();
-
- // Register Mediatr
- builder
- .RegisterType()
- .As()
- .InstancePerLifetimeScope();
-
- // request & notification handlers
- builder.Register(context =>
- {
- var c = context.Resolve();
- return t => c.Resolve(t);
- });
- builder.RegisterAssemblyTypes(typeof(ApplicationModule).GetTypeInfo().Assembly).AsImplementedInterfaces();
- }
- }
-}
\ No newline at end of file
diff --git a/ModernKeePass.Application/Common/Interfaces/IEntityVm.cs b/ModernKeePass.Application/Common/Interfaces/IEntityVm.cs
index f221062..d334bd7 100644
--- a/ModernKeePass.Application/Common/Interfaces/IEntityVm.cs
+++ b/ModernKeePass.Application/Common/Interfaces/IEntityVm.cs
@@ -1,4 +1,6 @@
-using ModernKeePass.Domain.Enums;
+using System.Collections.Generic;
+using ModernKeePass.Application.Group.Models;
+using ModernKeePass.Domain.Enums;
namespace ModernKeePass.Application.Common.Interfaces
{
@@ -7,5 +9,7 @@ namespace ModernKeePass.Application.Common.Interfaces
string Id { get; set; }
string Title { get; set; }
Icon Icon { get; set; }
+ List Breadcrumb { get; }
+ GroupVm ParentGroup { get; set; }
}
}
\ No newline at end of file
diff --git a/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs b/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs
index 7715553..daa5bf8 100644
--- a/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs
+++ b/ModernKeePass.Application/Database/Queries/OpenDatabase/OpenDatabaseQuery.cs
@@ -1,9 +1,12 @@
-using System.Threading.Tasks;
+using System.Linq;
+using System.Threading.Tasks;
using AutoMapper;
using MediatR;
using ModernKeePass.Application.Common.Interfaces;
+using ModernKeePass.Application.Entry.Models;
using ModernKeePass.Application.Group.Models;
using ModernKeePass.Domain.Dtos;
+using ModernKeePass.Domain.Entities;
using ModernKeePass.Domain.Exceptions;
namespace ModernKeePass.Application.Database.Queries.OpenDatabase
@@ -39,7 +42,29 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase
KeyFilePath = request.KeyFilePath,
Password = request.Password
});
- return _mapper.Map(rootGroup);
+ return BuildHierarchy(null, rootGroup);
+ }
+
+ private GroupVm BuildHierarchy(GroupVm parentGroup, GroupEntity groupEntity)
+ {
+ var groupVm = _mapper.Map(groupEntity);
+ groupVm.ParentGroup = parentGroup;
+ if (parentGroup != null)
+ {
+ groupVm.Breadcrumb.AddRange(parentGroup.Breadcrumb);
+ groupVm.Breadcrumb.Add(parentGroup);
+ }
+ groupVm.Entries = groupEntity.Entries.Select(e =>
+ {
+ var entry = _mapper.Map(e);
+ entry.ParentGroup = groupVm;
+ entry.Breadcrumb.AddRange(groupVm.Breadcrumb);
+ entry.Breadcrumb.Add(groupVm);
+ return entry;
+ }).OrderBy(e => e.Title).ToList();
+ groupVm.SubGroups = groupEntity.SubGroups.Select(g => BuildHierarchy(groupVm, g)).ToList();
+
+ return groupVm;
}
}
}
diff --git a/ModernKeePass.Application/Entry/Models/EntryVm.cs b/ModernKeePass.Application/Entry/Models/EntryVm.cs
index e07deb5..e6bdac5 100644
--- a/ModernKeePass.Application/Entry/Models/EntryVm.cs
+++ b/ModernKeePass.Application/Entry/Models/EntryVm.cs
@@ -13,6 +13,7 @@ namespace ModernKeePass.Application.Entry.Models
public class EntryVm: IEntityVm, IMapFrom
{
public GroupVm ParentGroup { get; set; }
+ public List Breadcrumb { get; } = new List();
public string Id { get; set; }
public string Title { get; set; }
public string Username { get; set; }
@@ -24,14 +25,19 @@ namespace ModernKeePass.Application.Entry.Models
public Icon Icon { get; set; }
public Color ForegroundColor { get; set; }
public Color BackgroundColor { get; set; }
- public bool HasExpirationDate { get; internal set; }
- public DateTimeOffset ExpirationDate { get; internal set; }
- public DateTimeOffset ModificationDate { get; internal set; }
+ public bool HasExpirationDate { get; set; }
+ public DateTimeOffset ExpirationDate { get; set; }
+ public DateTimeOffset ModificationDate { get; set; }
+
+ public override string ToString()
+ {
+ return ModificationDate.ToString("g");
+ }
public void Mapping(Profile profile)
{
profile.CreateMap()
- .ForMember(d => d.ParentGroup, opts => opts.MapFrom(s => s.Parent))
+ //.ForMember(d => d.ParentGroup, opts => opts.MapFrom(s => s.Parent))
.ForMember(d => d.Id, opts => opts.MapFrom(s => s.Id))
.ForMember(d => d.Title, opts => opts.MapFrom(s => s.Name))
.ForMember(d => d.Username, opts => opts.MapFrom(s => s.UserName))
diff --git a/ModernKeePass.Application/Group/Models/GroupVm.cs b/ModernKeePass.Application/Group/Models/GroupVm.cs
index e99ff1f..8871267 100644
--- a/ModernKeePass.Application/Group/Models/GroupVm.cs
+++ b/ModernKeePass.Application/Group/Models/GroupVm.cs
@@ -16,10 +16,11 @@ namespace ModernKeePass.Application.Group.Models
public string Id { get; set; }
public string Title { get; set; }
public Icon Icon { get; set; }
+ public List Breadcrumb { get; } = new List();
public List SubGroups { get; set; }
public List Entries { get; set; }
public bool IsSelected { get; set; }
-
+
public override string ToString()
{
return Title;
@@ -28,12 +29,12 @@ namespace ModernKeePass.Application.Group.Models
public void Mapping(Profile profile)
{
profile.CreateMap()
- .ForMember(d => d.ParentGroup, opts => opts.MapFrom(s => s.Parent))
+ //.ForMember(d => d.ParentGroup, opts => opts.MapFrom(s => s.Parent))
.ForMember(d => d.Id, opts => opts.MapFrom(s => s.Id))
.ForMember(d => d.Title, opts => opts.MapFrom(s => s.Name))
- .ForMember(d => d.Icon, opts => opts.MapFrom(s => s.Icon))
- .ForMember(d => d.Entries, opts => opts.MapFrom(s => s.Entries.OrderBy(e => e.Name)))
- .ForMember(d => d.SubGroups, opts => opts.MapFrom(s => s.SubGroups));
+ .ForMember(d => d.Icon, opts => opts.MapFrom(s => s.Icon));
+ //.ForMember(d => d.Entries, opts => opts.MapFrom(s => s.Entries.OrderBy(e => e.Name)))
+ //.ForMember(d => d.SubGroups, opts => opts.MapFrom(s => s.SubGroups));
}
}
diff --git a/ModernKeePass.Application/project.json b/ModernKeePass.Application/project.json
index 9661f58..193b228 100644
--- a/ModernKeePass.Application/project.json
+++ b/ModernKeePass.Application/project.json
@@ -1,10 +1,7 @@
{
"supports": {},
"dependencies": {
- "Autofac": "4.9.4",
- "Autofac.Extensions.DependencyInjection": "4.4.0",
- "AutoMapper": "6.0.2",
- "AutoMapper.Extensions.Microsoft.DependencyInjection": "2.0.1",
+ "AutoMapper": "5.2.0",
"FluentValidation": "8.6.2",
"MediatR": "3.0.1",
"MediatR.Extensions.Microsoft.DependencyInjection": "2.0.0",
diff --git a/ModernKeePass.Domain/Entities/BaseEntity.cs b/ModernKeePass.Domain/Entities/BaseEntity.cs
index 367dd62..dd1cb8f 100644
--- a/ModernKeePass.Domain/Entities/BaseEntity.cs
+++ b/ModernKeePass.Domain/Entities/BaseEntity.cs
@@ -7,6 +7,7 @@ namespace ModernKeePass.Domain.Entities
public string Id { get; set; }
public string Name { get; set; }
public GroupEntity Parent { get; set; }
+ public string ParentId { get; set; }
public DateTimeOffset LastModificationDate { get; set; }
}
}
\ No newline at end of file
diff --git a/ModernKeePass.Infrastructure/Infrastructure.csproj b/ModernKeePass.Infrastructure/Infrastructure.csproj
index 1a05db5..722cc20 100644
--- a/ModernKeePass.Infrastructure/Infrastructure.csproj
+++ b/ModernKeePass.Infrastructure/Infrastructure.csproj
@@ -42,7 +42,6 @@
-
diff --git a/ModernKeePass.Infrastructure/InfrastructureModule.cs b/ModernKeePass.Infrastructure/InfrastructureModule.cs
deleted file mode 100644
index c479d57..0000000
--- a/ModernKeePass.Infrastructure/InfrastructureModule.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Autofac;
-using AutoMapper;
-using ModernKeePass.Application.Common.Interfaces;
-using ModernKeePass.Infrastructure.KeePass;
-using ModernKeePass.Infrastructure.UWP;
-
-namespace ModernKeePass.Infrastructure
-{
- public class InfrastructureModule: Module
- {
- protected override void Load(ContainerBuilder builder)
- {
- builder.RegisterType().As().SingleInstance();
- builder.RegisterType().As().SingleInstance();
- builder.RegisterType().As();
- builder.RegisterType().As();
- builder.RegisterType().As();
- builder.RegisterType().As();
- builder.RegisterType().As();
-
- // Register Automapper profiles
- builder.RegisterType().As();
- }
- }
-}
\ No newline at end of file
diff --git a/ModernKeePass.Infrastructure/KeePass/EntryMappingProfile.cs b/ModernKeePass.Infrastructure/KeePass/EntryMappingProfile.cs
index 123e2bc..bcb03a1 100644
--- a/ModernKeePass.Infrastructure/KeePass/EntryMappingProfile.cs
+++ b/ModernKeePass.Infrastructure/KeePass/EntryMappingProfile.cs
@@ -19,7 +19,7 @@ namespace ModernKeePass.Infrastructure.KeePass
{
Uri url;
CreateMap()
- //.ForMember(dest => dest.Parent, opt => opt.MapFrom(src => src.ParentGroup))
+ .ForMember(dest => dest.ParentId, opt => opt.MapFrom(src => src.ParentGroup.Uuid.ToHexString()))
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Uuid.ToHexString()))
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => GetEntryValue(src, PwDefs.TitleField)))
.ForMember(dest => dest.UserName, opt => opt.MapFrom(src => GetEntryValue(src, PwDefs.UserNameField)))
@@ -38,7 +38,6 @@ namespace ModernKeePass.Infrastructure.KeePass
.ForMember(dest => dest.AdditionalFields, opt => opt.MapFrom(src =>
src.Strings.Where(s => !PwDefs.GetStandardFields().Contains(s.Key)).ToDictionary(s => s.Key, s => GetEntryValue(src, s.Key))))
.ForMember(dest => dest.LastModificationDate, opt => opt.MapFrom(src => new DateTimeOffset(src.LastModificationTime)));
- //.MaxDepth(1);
}
private void FromModelToDto()
diff --git a/ModernKeePass.Infrastructure/KeePass/GroupMappingProfile.cs b/ModernKeePass.Infrastructure/KeePass/GroupMappingProfile.cs
index 04d6efa..2abe23f 100644
--- a/ModernKeePass.Infrastructure/KeePass/GroupMappingProfile.cs
+++ b/ModernKeePass.Infrastructure/KeePass/GroupMappingProfile.cs
@@ -15,14 +15,13 @@ namespace ModernKeePass.Infrastructure.KeePass
private void FromDtoToModel()
{
CreateMap()
- //.ForMember(d => d.Parent, opts => opts.MapFrom(s => s.ParentGroup))
+ .ForMember(d => d.ParentId, opts => opts.MapFrom(s => s.ParentGroup.Uuid.ToHexString()))
.ForMember(d => d.Id, opts => opts.MapFrom(s => s.Uuid.ToHexString()))
.ForMember(d => d.Name, opts => opts.MapFrom(s => s.Name))
.ForMember(d => d.Icon, opts => opts.MapFrom(s => IconMapper.MapPwIconToIcon(s.IconId)))
- .ForMember(d => d.LastModificationDate, opts => opts.MapFrom(s => s.LastModificationTime))
- .ForMember(d => d.Entries, opts => opts.MapFrom(s => s.Entries))
- .ForMember(d => d.SubGroups, opts => opts.MapFrom(s => s.Groups));
- //.MaxDepth(1);
+ .ForMember(d => d.LastModificationDate, opts => opts.MapFrom(s => s.LastModificationTime));
+ //.ForMember(d => d.Entries, opts => opts.MapFrom(s => s.Entries))
+ //.ForMember(d => d.SubGroups, opts => opts.MapFrom(s => s.Groups));
}
private void FromModelToDto()
diff --git a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
index 1ad1935..63527c9 100644
--- a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
+++ b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs
@@ -95,7 +95,7 @@ namespace ModernKeePass.Infrastructure.KeePass
_credentials = credentials;
_fileAccessToken = fileInfo.Path;
- RootGroup = _mapper.Map(_pwDatabase.RootGroup);
+ RootGroup = BuildHierarchy(null, _pwDatabase.RootGroup);
return RootGroup;
}
catch (InvalidCompositeKeyException ex)
@@ -125,7 +125,7 @@ namespace ModernKeePass.Infrastructure.KeePass
_fileAccessToken = fileInfo.Path;
- RootGroup = _mapper.Map(_pwDatabase.RootGroup);
+ RootGroup = BuildHierarchy(null, _pwDatabase.RootGroup);
return RootGroup;
}
@@ -337,7 +337,29 @@ namespace ModernKeePass.Infrastructure.KeePass
var fileContents = await _fileService.OpenBinaryFile(fileInfo.Path);
return IOConnectionInfo.FromByteArray(fileContents);
}
-
+ private GroupEntity BuildHierarchy(GroupEntity parentGroup, PwGroup pwGroup)
+ {
+ var group = _mapper.Map(pwGroup);
+ group.Parent = parentGroup;
+ group.Entries = pwGroup.Entries.Select(e =>
+ {
+ var entry = _mapper.Map(e);
+ entry.Parent = group;
+ return entry;
+ }).ToList();
+ group.SubGroups = pwGroup.Groups.Select(g => BuildHierarchy(group, g)).ToList();
+
+ /*var group = new GroupEntity
+ {
+ Id = pwGroup.Uuid.ToHexString(),
+ Name = pwGroup.Name,
+ Icon = IconMapper.MapPwIconToIcon(pwGroup.IconId),
+ Entries = pwGroup.Entries.Select(e => _mapper.Map(e)).ToList(),
+ SubGroups = pwGroup.Groups.Select(BuildHierarchy).ToList()
+ };*/
+ return group;
+ }
+
private PwUuid BuildIdFromString(string id)
{
return new PwUuid(MemUtil.HexStringToByteArray(id));
diff --git a/ModernKeePass.Infrastructure/project.json b/ModernKeePass.Infrastructure/project.json
index 28259f4..1236a05 100644
--- a/ModernKeePass.Infrastructure/project.json
+++ b/ModernKeePass.Infrastructure/project.json
@@ -1,8 +1,7 @@
{
"supports": {},
"dependencies": {
- "AutoMapper": "6.0.2",
- "AutoMapper.Extensions.Microsoft.DependencyInjection": "2.0.1",
+ "AutoMapper": "5.2.0",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"ModernKeePassLib": "2.44.2",
"NETStandard.Library": "2.0.3"
diff --git a/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs b/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs
index d20f3e4..03a23ca 100644
--- a/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs
+++ b/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs
@@ -3,7 +3,6 @@ using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using ModernKeePass.Application.Common.Interfaces;
-using ModernKeePass.Application.Services;
using ModernKeePass.Domain.Dtos;
using ModernKeePass.Domain.Entities;
using ModernKeePass.Domain.Interfaces;
@@ -27,7 +26,7 @@ namespace ModernKeePass.KeePassDatabaseTests
[SetUp]
public void SetUp()
{
- var settingsService = Substitute.For();
+ var dateTime = Substitute.For();
var fileProxy = Substitute.For();
fileProxy.OpenBinaryFile(Arg.Any()).Returns(async parameters =>
{
@@ -42,9 +41,8 @@ namespace ModernKeePass.KeePassDatabaseTests
var contents = (byte[]) parameters[1];
await stream.WriteAsync(contents, 0, contents.Length);
});
- var fileService = new FileService(fileProxy);
var mapper = new Mapper(new MapperConfiguration(cfg => { cfg.AddProfile(typeof(EntryMappingProfile)); }));
- _database = new KeePassDatabaseClient(settingsService, fileService, mapper);
+ _database = new KeePassDatabaseClient(fileProxy, mapper, dateTime);
}
[TearDown]
@@ -57,12 +55,12 @@ namespace ModernKeePass.KeePassDatabaseTests
[Test]
public async Task TestOpen()
{
- var FileInfo = new FileInfo
+ var fileInfo = new FileInfo
{
Path = Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx")
};
- var rootGroup = await _database.Open(FileInfo, _credentials);
+ var rootGroup = await _database.Open(fileInfo, _credentials);
Assert.That(rootGroup.Name, Is.EqualTo("TestDatabase"));
Assert.That(rootGroup.Entries.Count(), Is.EqualTo(2));
}
@@ -95,7 +93,7 @@ namespace ModernKeePass.KeePassDatabaseTests
};
await _database.Open(originalFileInfo, _credentials);
- await _database.SaveDatabase(_fileInfo);
+ await _database.SaveDatabase(_fileInfo.Path);
_database.CloseDatabase();
Assert.DoesNotThrowAsync(async () => { await _database.Open(_fileInfo, _credentials); });
@@ -115,8 +113,8 @@ namespace ModernKeePass.KeePassDatabaseTests
var newGroup = new GroupEntity {Name = "New Group Test"};
var rootGroup = await _database.Open(originalFileInfo, _credentials);
- await _database.AddEntity(rootGroup, newGroup);
- await _database.SaveDatabase(_fileInfo);
+ await _database.AddGroup(rootGroup.Id, newGroup.Id);
+ await _database.SaveDatabase(_fileInfo.Path);
_database.CloseDatabase();
rootGroup = await _database.Open(_fileInfo, _credentials);
@@ -142,8 +140,8 @@ namespace ModernKeePass.KeePassDatabaseTests
};
var rootGroup = await _database.Open(originalFileInfo, _credentials);
- await _database.AddEntity(rootGroup, newEntry);
- await _database.SaveDatabase(_fileInfo);
+ await _database.AddEntry(rootGroup.Id, newEntry.Id);
+ await _database.SaveDatabase(_fileInfo.Path);
_database.CloseDatabase();
rootGroup = await _database.Open(_fileInfo, _credentials);
diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs
index cd0f944..09c6a1e 100644
--- a/ModernKeePass/ViewModels/EntryVm.cs
+++ b/ModernKeePass/ViewModels/EntryVm.cs
@@ -16,9 +16,9 @@ using ModernKeePass.Application.Group.Commands.RemoveEntry;
using ModernKeePass.Application.Security.Commands.GeneratePassword;
using ModernKeePass.Application.Security.Queries.EstimatePasswordComplexity;
using ModernKeePass.Common;
+using ModernKeePass.Domain.Enums;
using ModernKeePass.Domain.Interfaces;
using ModernKeePass.Interfaces;
-using ModernKeePass.Services;
namespace ModernKeePass.ViewModels
{
@@ -38,21 +38,7 @@ namespace ModernKeePass.ViewModels
public string CustomChars { get; set; } = string.Empty;
public string Id => _entry.Id;
- public IEnumerable BreadCrumb
- {
- get
- {
- var groups = new Stack();
- var group = _entry.ParentGroup;
- while (group.ParentGroup != null)
- {
- group = group.ParentGroup;
- groups.Push(group);
- }
-
- return groups;
- }
- }
+ public IEnumerable BreadCrumb => _entry.Breadcrumb;
///
/// Determines if the Entry is current or from history
@@ -72,14 +58,21 @@ namespace ModernKeePass.ViewModels
public string Title
{
get { return _entry.Title; }
- set { _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Title), FieldValue = value}); }
+ set
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Title), FieldValue = value}).Wait();
+ _entry.Title = value;
+ }
}
-
public string UserName
{
get { return _entry.Username; }
- set { _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(UserName), FieldValue = value }); }
+ set
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(UserName), FieldValue = value }).Wait();
+ _entry.Username = value;
+ }
}
public string Password
@@ -87,7 +80,8 @@ namespace ModernKeePass.ViewModels
get { return _entry.Password; }
set
{
- _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Password), FieldValue = value });
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Password), FieldValue = value }).Wait();
+ _entry.Password = value;
OnPropertyChanged();
OnPropertyChanged(nameof(PasswordComplexityIndicator));
}
@@ -95,14 +89,22 @@ namespace ModernKeePass.ViewModels
public string Url
{
- get { return _entry.Url.ToString();}
- set { _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Url), FieldValue = value }); }
+ get { return _entry.Url?.ToString(); }
+ set
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Url), FieldValue = value }).Wait();
+ _entry.Url = new Uri(value);
+ }
}
public string Notes
{
get { return _entry.Notes; }
- set { _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Notes), FieldValue = value }); }
+ set
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Notes), FieldValue = value }).Wait();
+ _entry.Notes = value;
+ }
}
public Symbol Icon
@@ -112,7 +114,11 @@ namespace ModernKeePass.ViewModels
if (HasExpired) return Symbol.ReportHacked;
return (Symbol) _entry.Icon;
}
- set { _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Icon), FieldValue = value }); }
+ set
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(Icon), FieldValue = value }).Wait();
+ _entry.Icon = (Icon)value;
+ }
}
public DateTimeOffset ExpiryDate
@@ -121,7 +127,8 @@ namespace ModernKeePass.ViewModels
set
{
if (!HasExpirationDate) return;
- _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = "ExpirationDate", FieldValue = value.Date });
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = "ExpirationDate", FieldValue = value.Date }).Wait();
+ _entry.ExpirationDate = value.Date;
}
}
@@ -131,9 +138,48 @@ namespace ModernKeePass.ViewModels
set
{
if (!HasExpirationDate) return;
- _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = "ExpirationDate", FieldValue = ExpiryDate.Date.Add(value) });
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = "ExpirationDate", FieldValue = ExpiryDate.Date.Add(value) }).Wait();
+ _entry.ExpirationDate = _entry.ExpirationDate.Date.Add(value);
}
}
+
+ public bool HasExpirationDate
+ {
+ get { return _entry.HasExpirationDate; }
+ set
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(HasExpirationDate), FieldValue = value }).Wait();
+ _entry.HasExpirationDate = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public Color? BackgroundColor
+ {
+ get { return _entry?.BackgroundColor; }
+ set
+ {
+ if (value != null)
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(BackgroundColor), FieldValue = value }).Wait();
+ _entry.BackgroundColor = (Color)value;
+ }
+ }
+ }
+
+ public Color? ForegroundColor
+ {
+ get { return _entry?.ForegroundColor; }
+ set
+ {
+ if (value != null)
+ {
+ _mediator.Send(new SetFieldValueCommand { EntryId = Id, FieldName = nameof(ForegroundColor), FieldValue = value }).Wait();
+ _entry.ForegroundColor = (Color)value;
+ }
+ }
+ }
+ public IEnumerable History => _entry.History;
public bool IsEditMode
{
@@ -164,36 +210,6 @@ namespace ModernKeePass.ViewModels
OnPropertyChanged();
}
}
- public bool HasExpirationDate
- {
- get { return _entry.HasExpirationDate; }
- set
- {
- _mediator.Send(new SetFieldValueCommand {EntryId = Id, FieldName = nameof(HasExpirationDate), FieldValue = value});
- OnPropertyChanged();
- }
- }
-
- public IEnumerable History => _entry.History;
-
-
- public Color? BackgroundColor
- {
- get { return _entry?.BackgroundColor; }
- set
- {
- if (value != null) _entry.BackgroundColor = (Color) value;
- }
- }
-
- public Color? ForegroundColor
- {
- get { return _entry?.ForegroundColor; }
- set
- {
- if (value != null) _entry.ForegroundColor = (Color)value;
- }
- }
public bool CanRestore => _entry.ParentGroup == _database.RecycleBin;
@@ -203,7 +219,6 @@ namespace ModernKeePass.ViewModels
private readonly Application.Entry.Models.EntryVm _entry;
private readonly IMediator _mediator;
- private readonly IResourceService _resource;
private readonly DatabaseVm _database;
private bool _isEditMode;
private bool _isRevealPassword;
@@ -212,13 +227,12 @@ namespace ModernKeePass.ViewModels
public EntryVm() { }
- internal EntryVm(Application.Entry.Models.EntryVm entry, bool isNewEntry = false) : this(entry, App.Mediator, new ResourcesService(), isNewEntry) { }
+ internal EntryVm(Application.Entry.Models.EntryVm entry, bool isNewEntry = false) : this(entry, App.Mediator, isNewEntry) { }
- public EntryVm(Application.Entry.Models.EntryVm entry, IMediator mediator, IResourceService resource, bool isNewEntry = false)
+ public EntryVm(Application.Entry.Models.EntryVm entry, IMediator mediator, bool isNewEntry = false)
{
_entry = entry;
_mediator = mediator;
- _resource = resource;
_database = _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
_isEditMode = isNewEntry;
if (isNewEntry) GeneratePassword().GetAwaiter().GetResult();
@@ -246,7 +260,6 @@ namespace ModernKeePass.ViewModels
OnPropertyChanged(nameof(IsRevealPasswordEnabled));
}
-
public async Task MarkForDelete(string recycleBinTitle)
{
if (_database.IsRecycleBinEnabled && _database.RecycleBin == null)
@@ -274,12 +287,5 @@ namespace ModernKeePass.ViewModels
{
return _entry;
}
-
- public override string ToString()
- {
- return IsSelected ?
- _resource.GetResourceValue("EntryCurrent") :
- _entry.ModificationDate.ToString("g");
- }
}
}
diff --git a/ModernKeePass/ViewModels/GroupVm.cs b/ModernKeePass/ViewModels/GroupVm.cs
index 78cb14a..9142f68 100644
--- a/ModernKeePass/ViewModels/GroupVm.cs
+++ b/ModernKeePass/ViewModels/GroupVm.cs
@@ -103,21 +103,7 @@ namespace ModernKeePass.ViewModels
set { SetProperty(ref _isMenuClosed, value); }
}
- public IEnumerable BreadCrumb
- {
- get
- {
- var groups = new Stack();
- var group = _group;
- while (group.ParentGroup != null)
- {
- group = group.ParentGroup;
- groups.Push(group);
- }
-
- return groups;
- }
- }
+ public IEnumerable BreadCrumb => _group.Breadcrumb;
public ICommand SaveCommand { get; }
public ICommand SortEntriesCommand { get; }
@@ -209,11 +195,6 @@ namespace ModernKeePass.ViewModels
{
await _mediator.Send(new DeleteGroupCommand { Group = _group });
}
-
- public override string ToString()
- {
- return Title;
- }
private async Task SortEntriesAsync()
{
diff --git a/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs b/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
index ba50b05..230bf33 100644
--- a/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
+++ b/ModernKeePass/ViewModels/Items/SettingsDatabaseVm.cs
@@ -30,7 +30,7 @@ namespace ModernKeePass.ViewModels
get { return _database.IsRecycleBinEnabled; }
set
{
- _mediator.Send(new SetHasRecycleBinCommand {HasRecycleBin = value}).GetAwaiter().GetResult();
+ _mediator.Send(new SetHasRecycleBinCommand {HasRecycleBin = value}).Wait();
OnPropertyChanged(nameof(HasRecycleBin));
}
}
@@ -40,7 +40,7 @@ namespace ModernKeePass.ViewModels
get { return _database.RecycleBin == null; }
set
{
- if (value) _mediator.Send(new SetRecycleBinCommand { RecycleBin = null }).GetAwaiter().GetResult();
+ if (value) _mediator.Send(new SetRecycleBinCommand { RecycleBin = null }).Wait();
}
}
@@ -53,19 +53,19 @@ namespace ModernKeePass.ViewModels
public CipherVm SelectedCipher
{
get { return Ciphers.FirstOrDefault(c => c.Id == _database.CipherId); }
- set { _mediator.Send(new SetCipherCommand {CipherId = value.Id}).GetAwaiter().GetResult(); }
+ set { _mediator.Send(new SetCipherCommand {CipherId = value.Id}).Wait(); }
}
public string SelectedCompression
{
get { return Compressions.FirstOrDefault(c => c == _database.Compression); }
- set { _mediator.Send(new SetCompressionCommand {Compression = value}).GetAwaiter().GetResult(); }
+ set { _mediator.Send(new SetCompressionCommand {Compression = value}).Wait(); }
}
public KeyDerivationVm SelectedKeyDerivation
{
get { return KeyDerivations.FirstOrDefault(c => c.Id == _database.KeyDerivationId); }
- set { _mediator.Send(new SetKeyDerivationCommand {KeyDerivationId = value.Id}).GetAwaiter().GetResult(); }
+ set { _mediator.Send(new SetKeyDerivationCommand {KeyDerivationId = value.Id}).Wait(); }
}
/*public int CipherIndex
diff --git a/ModernKeePass/Views/GroupDetailPage.xaml.cs b/ModernKeePass/Views/GroupDetailPage.xaml.cs
index a38e14b..74bb480 100644
--- a/ModernKeePass/Views/GroupDetailPage.xaml.cs
+++ b/ModernKeePass/Views/GroupDetailPage.xaml.cs
@@ -55,7 +55,7 @@ namespace ModernKeePass.Views
{
var vm = e.Parameter as Application.Group.Models.GroupVm;
if (vm != null)
- DataContext = vm;
+ DataContext = new GroupVm(vm);
}
}
@@ -103,13 +103,13 @@ namespace ModernKeePass.Views
e.DestinationItem.Item = e.SourceItem.Item;
}
}
- private void CreateEntry_ButtonClick(object sender, RoutedEventArgs e)
+ private async void CreateEntry_ButtonClick(object sender, RoutedEventArgs e)
{
- Frame.Navigate(typeof(EntryDetailPage), Model.AddNewEntry());
+ Frame.Navigate(typeof(EntryDetailPage), await Model.AddNewEntry());
}
- private void CreateGroup_ButtonClick(object sender, RoutedEventArgs e)
+ private async void CreateGroup_ButtonClick(object sender, RoutedEventArgs e)
{
- Frame.Navigate(typeof(GroupDetailPage), Model.AddNewGroup());
+ Frame.Navigate(typeof(GroupDetailPage), await Model.AddNewGroup());
}
private void GridView_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
diff --git a/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs
index 404b12d..116ae58 100644
--- a/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs
+++ b/ModernKeePass/Views/MainPageFrames/SaveDatabasePage.xaml.cs
@@ -28,9 +28,9 @@ namespace ModernKeePass.Views
_mainFrame = e.Parameter as Frame;
}
- private void SaveButton_OnClick(object sender, RoutedEventArgs e)
+ private async void SaveButton_OnClick(object sender, RoutedEventArgs e)
{
- Model.Save();
+ await Model.Save();
_mainFrame.Navigate(typeof(MainPage));
}
@@ -45,7 +45,7 @@ namespace ModernKeePass.Views
var file = await savePicker.PickSaveFileAsync();
if (file == null) return;
- Model.Save(file);
+ await Model.Save(file);
_mainFrame.Navigate(typeof(MainPage));
}
diff --git a/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml b/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml
index f1247ff..9a3de5b 100644
--- a/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml
+++ b/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml
@@ -16,7 +16,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml.cs b/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml.cs
index ad01a1f..9b50c61 100644
--- a/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml.cs
+++ b/ModernKeePass/Views/UserControls/BreadCrumbUserControl.xaml.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
using Windows.UI.Xaml;
-using ModernKeePass.Interfaces;
+using ModernKeePass.Application.Common.Interfaces;
// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236
@@ -13,17 +13,17 @@ namespace ModernKeePass.Views.UserControls
InitializeComponent();
}
- public IEnumerable ItemsSource
+ public IEnumerable ItemsSource
{
- get { return (IEnumerable)GetValue(ItemsSourceProperty); }
+ get { return (IEnumerable)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register(
"ItemsSource",
- typeof(IEnumerable),
+ typeof(IEnumerable),
typeof(BreadCrumbUserControl),
- new PropertyMetadata(new Stack(), (o, args) => { }));
+ new PropertyMetadata(new Stack(), (o, args) => { }));
}
}
diff --git a/ModernKeePass/Win81App.csproj b/ModernKeePass/Win81App.csproj
index aec44d5..eadbce6 100644
--- a/ModernKeePass/Win81App.csproj
+++ b/ModernKeePass/Win81App.csproj
@@ -388,15 +388,12 @@
-
- ..\..\..\..\..\.nuget\packages\Autofac\4.9.4\lib\netstandard1.1\Autofac.dll
-
-
- ..\packages\AutoMapper.6.0.2\lib\netstandard1.1\AutoMapper.dll
+
+ ..\packages\AutoMapper.5.2.0\lib\netstandard1.1\AutoMapper.dll
True
-
- ..\packages\AutoMapper.Extensions.Microsoft.DependencyInjection.2.0.1\lib\netstandard1.1\AutoMapper.Extensions.Microsoft.DependencyInjection.dll
+
+ ..\packages\AutoMapper.Extensions.Microsoft.DependencyInjection.1.2.0\lib\netstandard1.1\AutoMapper.Extensions.Microsoft.DependencyInjection.dll
True
diff --git a/ModernKeePass/packages.config b/ModernKeePass/packages.config
index a58024d..c2fd7a0 100644
--- a/ModernKeePass/packages.config
+++ b/ModernKeePass/packages.config
@@ -1,7 +1,7 @@
-
-
+
+