diff --git a/ModernKeePass.Application/Application.csproj b/ModernKeePass.Application/Application.csproj
index e48f95d..612419f 100644
--- a/ModernKeePass.Application/Application.csproj
+++ b/ModernKeePass.Application/Application.csproj
@@ -75,7 +75,7 @@
-
+
diff --git a/ModernKeePass.Application/Common/Behaviors/SetDirtyBehavior.cs b/ModernKeePass.Application/Common/Behaviors/DirtyStatusBehavior.cs
similarity index 75%
rename from ModernKeePass.Application/Common/Behaviors/SetDirtyBehavior.cs
rename to ModernKeePass.Application/Common/Behaviors/DirtyStatusBehavior.cs
index d2034ed..05c4555 100644
--- a/ModernKeePass.Application/Common/Behaviors/SetDirtyBehavior.cs
+++ b/ModernKeePass.Application/Common/Behaviors/DirtyStatusBehavior.cs
@@ -7,14 +7,14 @@ using ModernKeePass.Application.Database.Commands.SaveDatabase;
namespace ModernKeePass.Application.Common.Behaviors
{
- public class SetDirtyBehavior : IPipelineBehavior
+ public class DirtyStatusBehavior : IPipelineBehavior
{
private readonly List _excludedCommands = new List
{nameof(SaveDatabaseCommand), nameof(CloseDatabaseCommand)};
private readonly IDatabaseProxy _database;
- public SetDirtyBehavior(IDatabaseProxy database)
+ public DirtyStatusBehavior(IDatabaseProxy database)
{
_database = database;
}
@@ -23,9 +23,9 @@ namespace ModernKeePass.Application.Common.Behaviors
{
var response = await next();
var queryName = typeof(TRequest).Name;
- if (queryName.Contains("Command") && !_excludedCommands.Contains(queryName))
+ if (queryName.Contains("Command"))
{
- _database.IsDirty = true;
+ _database.IsDirty = !_excludedCommands.Contains(queryName);
}
return response;
diff --git a/ModernKeePass.Application/Database/Commands/CloseDatabase/CloseDatabaseCommand.cs b/ModernKeePass.Application/Database/Commands/CloseDatabase/CloseDatabaseCommand.cs
index 96c5040..f17d97f 100644
--- a/ModernKeePass.Application/Database/Commands/CloseDatabase/CloseDatabaseCommand.cs
+++ b/ModernKeePass.Application/Database/Commands/CloseDatabase/CloseDatabaseCommand.cs
@@ -21,7 +21,6 @@ namespace ModernKeePass.Application.Database.Commands.CloseDatabase
// Cleanup
_database.FileAccessToken = null;
- _database.IsDirty = false;
_database.Size = 0;
}
}
diff --git a/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs b/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs
index 94cc86f..6b57a1d 100644
--- a/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs
+++ b/ModernKeePass.Application/Database/Commands/SaveDatabase/SaveDatabaseCommand.cs
@@ -47,8 +47,6 @@ namespace ModernKeePass.Application.Database.Commands.SaveDatabase
_file.ReleaseFile(_database.FileAccessToken);
_database.FileAccessToken = message.FilePath;
}
-
- _database.IsDirty = false;
}
catch (Exception exception)
{
diff --git a/ModernKeePass.Application/DependencyInjection.cs b/ModernKeePass.Application/DependencyInjection.cs
index 8b02a02..5ec0c9d 100644
--- a/ModernKeePass.Application/DependencyInjection.cs
+++ b/ModernKeePass.Application/DependencyInjection.cs
@@ -12,7 +12,7 @@ namespace ModernKeePass.Application
{
var assembly = typeof(DependencyInjection).GetTypeInfo().Assembly;
services.AddMediatR(assembly);
- services.AddTransient(typeof(IPipelineBehavior<,>), typeof(SetDirtyBehavior<,>));
+ services.AddTransient(typeof(IPipelineBehavior<,>), typeof(DirtyStatusBehavior<,>));
//services.AddValidatorsFromAssembly(assembly);
return services;
diff --git a/ModernKeePass/ViewModels/GroupDetailVm.cs b/ModernKeePass/ViewModels/GroupDetailVm.cs
index 7667a08..0d34d9d 100644
--- a/ModernKeePass/ViewModels/GroupDetailVm.cs
+++ b/ModernKeePass/ViewModels/GroupDetailVm.cs
@@ -137,25 +137,34 @@ namespace ModernKeePass.ViewModels
Entries.CollectionChanged += Entries_CollectionChanged;
Groups = new ObservableCollection(_group.SubGroups);
}
+
+ public void GoToEntry(string entryId, bool isNew = false)
+ {
+ _navigation.NavigateTo(Constants.Navigation.EntryPage, new NavigationItem
+ {
+ Id = entryId,
+ IsNew = isNew
+ });
+ }
+ public void GoToGroup(string entryId, bool isNew = false)
+ {
+ _navigation.NavigateTo(Constants.Navigation.GroupPage, new NavigationItem
+ {
+ Id = entryId,
+ IsNew = isNew
+ });
+ }
public async Task AddNewGroup(string name = "")
{
var group = await _mediator.Send(new CreateGroupCommand {Name = name, ParentGroup = _group});
- _navigation.NavigateTo(Constants.Navigation.GroupPage, new NavigationItem
- {
- Id = group.Id,
- IsNew = true
- });
+ GoToGroup(group.Id, true);
}
public async Task AddNewEntry()
{
var entry = await _mediator.Send(new CreateEntryCommand { ParentGroup = _group });
- _navigation.NavigateTo(Constants.Navigation.EntryPage, new NavigationItem
- {
- Id = entry.Id,
- IsNew = true
- });
+ GoToEntry(entry.Id, true);
}
public async Task Move(GroupVm destination)
diff --git a/ModernKeePass/Views/GroupDetailPage.xaml.cs b/ModernKeePass/Views/GroupDetailPage.xaml.cs
index 8de42b3..46f1079 100644
--- a/ModernKeePass/Views/GroupDetailPage.xaml.cs
+++ b/ModernKeePass/Views/GroupDetailPage.xaml.cs
@@ -5,10 +5,7 @@ using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
-using GalaSoft.MvvmLight.Views;
-using Microsoft.Extensions.DependencyInjection;
using ModernKeePass.Application.Entry.Models;
-using ModernKeePass.Common;
using ModernKeePass.Models;
using ModernKeePass.ViewModels;
@@ -22,15 +19,11 @@ namespace ModernKeePass.Views
///
public sealed partial class GroupDetailPage
{
- private readonly INavigationService _navigation;
-
public GroupDetailVm Model => (GroupDetailVm)DataContext;
- public GroupDetailPage(): this (App.Services.GetRequiredService()) { }
- public GroupDetailPage(INavigationService navigation)
+ public GroupDetailPage()
{
InitializeComponent();
- _navigation = navigation;
}
#region NavigationHelper registration
@@ -58,7 +51,7 @@ namespace ModernKeePass.Views
return;
default:
var group = listView?.SelectedItem as Application.Group.Models.GroupVm;
- _navigation.NavigateTo(Constants.Navigation.GroupPage, new NavigationItem { Id = group?.Id });
+ Model.GoToGroup(group?.Id);
break;
}
}
@@ -71,7 +64,7 @@ namespace ModernKeePass.Views
return;
default:
var entry = GridView.SelectedItem as EntryVm;
- _navigation.NavigateTo(Constants.Navigation.EntryPage, new NavigationItem { Id = entry?.Id });
+ Model.GoToEntry(entry?.Id);
break;
}
}
@@ -103,7 +96,7 @@ namespace ModernKeePass.Views
private void SearchBox_OnResultSuggestionChosen(SearchBox sender, SearchBoxResultSuggestionChosenEventArgs args)
{
- _navigation.NavigateTo(Constants.Navigation.EntryPage, new NavigationItem { Id = args.Tag });
+ Model.GoToEntry(args.Tag);
}
private void GroupDetailPage_OnSizeChanged(object sender, SizeChangedEventArgs e)
diff --git a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml
index 0e04cfd..756cd32 100644
--- a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml
+++ b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml
@@ -21,30 +21,6 @@
-
-
-
-
-
-
- CSV
-
-
-
-
-
-
diff --git a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs
index 0d3fa7d..0dd56c1 100644
--- a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs
+++ b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs
@@ -3,11 +3,7 @@ using System.Collections.Generic;
using Windows.Storage.AccessCache;
using Windows.Storage.Pickers;
using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-using Microsoft.Extensions.DependencyInjection;
-using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Domain.Dtos;
-using ModernKeePass.Infrastructure.File;
using ModernKeePass.ViewModels;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
@@ -19,13 +15,10 @@ namespace ModernKeePass.Views
///
public sealed partial class NewDatabasePage
{
- private readonly IResourceProxy _resource;
private NewVm Model => (NewVm)DataContext;
-
- public NewDatabasePage(): this(App.Services.GetRequiredService()) { }
- public NewDatabasePage(IResourceProxy resource)
+
+ public NewDatabasePage()
{
- _resource = resource;
InitializeComponent();
}
@@ -50,33 +43,5 @@ namespace ModernKeePass.Views
};
Model.OpenFile(fileInfo);
}
-
- private void ImportFormatComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- var comboBox = sender as ComboBox;
- switch (comboBox?.SelectedIndex)
- {
- case 0:
- Model.ImportFormat = new CsvImportFormat();
- Model.ImportFileExtensionFilter = ".csv";
- Model.ImportFormatHelp = _resource.GetResourceValue("NewImportFormatHelpCSV");
- break;
- }
- }
-
- private async void ImportFileButton_OnClick(object sender, RoutedEventArgs e)
- {
- var picker = new FileOpenPicker
- {
- ViewMode = PickerViewMode.List,
- SuggestedStartLocation = PickerLocationId.DocumentsLibrary
- };
- if (!string.IsNullOrEmpty(Model.ImportFileExtensionFilter))
- picker.FileTypeFilter.Add(Model.ImportFileExtensionFilter);
-
- // Application now has read/write access to the picked file
- Model.ImportFile = await picker.PickSingleFileAsync().AsTask();
- if (Model.ImportFile != null) ImportFileLink.Content = Model.ImportFile.Name;
- }
}
}
diff --git a/README.md b/README.md
index 503ae42..1f1af84 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ You can get it [here](https://www.microsoft.com/en-us/store/p/modernkeepass/9mwq
- Change database compression
- Change database key derivation
- Displays and change entry colors and icons
-- Import existing CSV data
+- Move entries from a group to another
# Build and Test
1. Clone the repository
@@ -38,7 +38,7 @@ Otherwise, there are still many things left to implement:
- Entry custom fields
- Entry attachments
- Multi entry selection (for delete, or move)
-- Move entries from a group to another
+- Import existing data from CSV, JSON, or XML
- Open database from URL (and maybe some clouds?)
# Credits
diff --git a/WinAppCommon/ViewModels/NewVm.cs b/WinAppCommon/ViewModels/NewVm.cs
index 28e4095..d97fd00 100644
--- a/WinAppCommon/ViewModels/NewVm.cs
+++ b/WinAppCommon/ViewModels/NewVm.cs
@@ -1,5 +1,4 @@
using System.Threading.Tasks;
-using Windows.Storage;
using GalaSoft.MvvmLight.Views;
using MediatR;
using Messages;
@@ -16,25 +15,6 @@ namespace ModernKeePass.ViewModels
private readonly IMediator _mediator;
private readonly ISettingsProxy _settings;
private readonly INavigationService _navigation;
- private string _importFormatHelp;
-
- public bool IsImportChecked { get; set; }
-
- public IStorageFile ImportFile { get; set; }
-
- public string ImportFileExtensionFilter { get; set; } = "*";
-
- public IImportFormat ImportFormat { get; set; }
-
- public string ImportFormatHelp
- {
- get { return _importFormatHelp; }
- set
- {
- _importFormatHelp = value;
- RaisePropertyChanged(nameof(ImportFormatHelp));
- }
- }
public NewVm(IMediator mediator, IRecentProxy recent, ISettingsProxy settings, INavigationService navigation)
{
@@ -67,6 +47,7 @@ namespace ModernKeePass.ViewModels
Version = _settings.GetSetting(Constants.Settings.DefaultFileFormat, "4"),
CreateSampleData = _settings.GetSetting(Constants.Settings.Sample)
});
+
var database = await _mediator.Send(new GetDatabaseQuery());
_navigation.NavigateTo(Constants.Navigation.GroupPage, new NavigationItem { Id = database.RootGroupId });
}