diff --git a/ModernKeePass/App.xaml.cs b/ModernKeePass/App.xaml.cs index 42794f3..07941f2 100644 --- a/ModernKeePass/App.xaml.cs +++ b/ModernKeePass/App.xaml.cs @@ -20,7 +20,6 @@ namespace ModernKeePass sealed partial class App { public DatabaseHelper Database { get; set; } = new DatabaseHelper(); - public Dictionary PendingDeleteEntities = new Dictionary(); /// /// Initializes the singleton application object. This is the first line of authored code @@ -89,11 +88,11 @@ namespace ModernKeePass // parameter rootFrame.Navigate(typeof(Pages.MainPage), lauchActivatedEventArgs.Arguments); } - else + /*else { // App is "launched" via the Toast Activation event UndoEntityDelete(lauchActivatedEventArgs.Arguments); - } + }*/ } // This is only available on Windows 10... /*else if (e is ToastNotificationActivatedEventArgs) @@ -145,14 +144,5 @@ namespace ModernKeePass Window.Current.Activate(); } #endregion - - private void UndoEntityDelete(string arguments) - { - if (arguments == null) return; - var args = JsonObject.Parse(arguments); - var entity = PendingDeleteEntities[args["entityId"].GetString()]; - PendingDeleteEntities.Remove(args["entityId"].GetString()); - entity.UndoDelete(); - } } } diff --git a/ModernKeePass/Common/DatabaseHelper.cs b/ModernKeePass/Common/DatabaseHelper.cs index b49f525..d91b5d4 100644 --- a/ModernKeePass/Common/DatabaseHelper.cs +++ b/ModernKeePass/Common/DatabaseHelper.cs @@ -1,5 +1,6 @@ using System; using Windows.Storage; +using Windows.UI.Xaml; using ModernKeePass.ViewModels; using ModernKeePassLib; using ModernKeePassLib.Interfaces; @@ -104,8 +105,15 @@ namespace ModernKeePass.Common /// public void Save() { - if (_pwDatabase != null && _pwDatabase.IsOpen) - _pwDatabase.Save(new NullStatusLogger()); + if (_pwDatabase == null || !_pwDatabase.IsOpen) return; + // Commit real changes to DB + /*var app = (App) Application.Current; + foreach (var entity in app.PendingDeleteEntities) + { + entity.Value.CommitDelete(); + } + app.PendingDeleteEntities.Clear();*/ + _pwDatabase.Save(new NullStatusLogger()); } /// diff --git a/ModernKeePass/Common/MessageDialogHelper.cs b/ModernKeePass/Common/MessageDialogHelper.cs index 1750314..0ad69af 100644 --- a/ModernKeePass/Common/MessageDialogHelper.cs +++ b/ModernKeePass/Common/MessageDialogHelper.cs @@ -1,25 +1,17 @@ using System; using Windows.UI.Popups; -using Windows.UI.Xaml.Controls; -using ModernKeePass.Interfaces; -using ModernKeePass.ViewModels; namespace ModernKeePass.Common { public static class MessageDialogHelper { - public static async void ShowDeleteConfirmationDialog(string text, IPwEntity model, Frame backFrame) + public static async void ShowDeleteConfirmationDialog(string actionText, string contentText, UICommandInvokedHandler action) { // Create the message dialog and set its content - var messageDialog = new MessageDialog(text); + var messageDialog = new MessageDialog(contentText); // Add commands and set their callbacks; both buttons use the same callback function instead of inline event handlers - messageDialog.Commands.Add(new UICommand("Delete", delete => - { - ToastNotificationHelper.ShowUndoToast(model); - model.MarkForDelete(); - if (backFrame.CanGoBack) backFrame.GoBack(); - })); + messageDialog.Commands.Add(new UICommand(actionText, action)); messageDialog.Commands.Add(new UICommand("Cancel")); // Set the command that will be invoked by default diff --git a/ModernKeePass/Common/ToastNotificationHelper.cs b/ModernKeePass/Common/ToastNotificationHelper.cs index a46d783..d81eb73 100644 --- a/ModernKeePass/Common/ToastNotificationHelper.cs +++ b/ModernKeePass/Common/ToastNotificationHelper.cs @@ -10,67 +10,14 @@ namespace ModernKeePass.Common { public static class ToastNotificationHelper { - public static /*async*/ void ShowUndoToast(IPwEntity entity) + public static void ShowMovedToast(IPwEntity entity, string action, string text) { - // This is for Windows 10 - // Construct the visuals of the toast - /*var visual = new ToastVisual - { - BindingGeneric = new ToastBindingGeneric - { - Children = - { - new AdaptiveText - { - Text = $"{entityType} {entity.Name} deleted." - } - } - } - }; - - // Construct the actions for the toast (inputs and buttons) - var actions = new ToastActionsCustom - { - Buttons = - { - new ToastButton("Undo", new QueryString - { - { "action", "undo" }, - { "entityType", entityType }, - { "entityId", entity.Id } - - }.ToString()) - } - }; - - // Now we can construct the final toast content - var toastContent = new ToastContent - { - Visual = visual, - Actions = actions, - // Arguments when the user taps body of toast - Launch = new QueryString() - { - { "action", "undo" }, - { "entityType", "group" }, - { "entityId", entity.Id } - - }.ToString() - }; - - // And create the toast notification - var toastXml = new XmlDocument(); - toastXml.LoadXml(toastContent.GetContent()); - - var toast = new ToastNotification(toastXml) {ExpirationTime = DateTime.Now.AddSeconds(5)}; - toast.Dismissed += Toast_Dismissed; - */ - + var app = (App)Application.Current; var entityType = entity is GroupVm ? "Group" : "Entry"; var notificationXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02); var toastElements = notificationXml.GetElementsByTagName("text"); - toastElements[0].AppendChild(notificationXml.CreateTextNode($"{entityType} {entity.Name} deleted")); - toastElements[1].AppendChild(notificationXml.CreateTextNode("Click me to undo")); + toastElements[0].AppendChild(notificationXml.CreateTextNode($"{action} {entityType} {entity.Name}")); + toastElements[1].AppendChild(notificationXml.CreateTextNode(text)); var toastNode = notificationXml.SelectSingleNode("/toast"); var launch = new JsonObject @@ -84,19 +31,8 @@ namespace ModernKeePass.Common { ExpirationTime = DateTime.Now.AddSeconds(5) }; - toast.Dismissed += Toast_Dismissed; ToastNotificationManager.CreateToastNotifier().Show(toast); } - - private static void Toast_Dismissed(ToastNotification sender, ToastDismissedEventArgs args) - { - var toastNode = sender.Content.SelectSingleNode("/toast"); - if (toastNode == null) return; - var launchArguments = JsonObject.Parse(((XmlElement)toastNode).GetAttribute("launch")); - var app = (App)Application.Current; - var entity = app.PendingDeleteEntities[launchArguments["entityId"].GetString()]; - app.PendingDeleteEntities.Remove(launchArguments["entityId"].GetString()); - entity.CommitDelete(); - } + } } diff --git a/ModernKeePass/Converters/NullToBooleanConverter.cs b/ModernKeePass/Converters/NullToBooleanConverter.cs new file mode 100644 index 0000000..667980f --- /dev/null +++ b/ModernKeePass/Converters/NullToBooleanConverter.cs @@ -0,0 +1,18 @@ +using System; +using Windows.UI.Xaml.Data; + +namespace ModernKeePass.Converters +{ + public class NullToBooleanConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, string language) + { + return value != null; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } +} diff --git a/ModernKeePass/Interfaces/IPwEntity.cs b/ModernKeePass/Interfaces/IPwEntity.cs index b02d413..ff8d634 100644 --- a/ModernKeePass/Interfaces/IPwEntity.cs +++ b/ModernKeePass/Interfaces/IPwEntity.cs @@ -6,12 +6,18 @@ namespace ModernKeePass.Interfaces public interface IPwEntity { GroupVm ParentGroup { get; } + GroupVm PreviousGroup { get; } Symbol IconSymbol { get; } string Id { get; } string Name { get; set; } string Path { get; } bool IsEditMode { get; } + /// + /// Move a entity to the destination group + /// + /// The destination to move the entity to + void Move(GroupVm destination); /// /// Delete from Model /// diff --git a/ModernKeePass/ModernKeePass.csproj b/ModernKeePass/ModernKeePass.csproj index d6b5387..c2833aa 100644 --- a/ModernKeePass/ModernKeePass.csproj +++ b/ModernKeePass/ModernKeePass.csproj @@ -120,6 +120,7 @@ + diff --git a/ModernKeePass/Package.appxmanifest b/ModernKeePass/Package.appxmanifest index 88a5046..ae0a478 100644 --- a/ModernKeePass/Package.appxmanifest +++ b/ModernKeePass/Package.appxmanifest @@ -1,6 +1,6 @@  - + ModernKeePass wismna diff --git a/ModernKeePass/Pages/EntryDetailPage.xaml b/ModernKeePass/Pages/EntryDetailPage.xaml index 4b95ffa..7fb51ab 100644 --- a/ModernKeePass/Pages/EntryDetailPage.xaml +++ b/ModernKeePass/Pages/EntryDetailPage.xaml @@ -17,6 +17,7 @@ +