diff --git a/ModernKeePass/Controls/CompositeKeyUserControl.xaml b/ModernKeePass/Controls/CompositeKeyUserControl.xaml
index 124d848..3260145 100644
--- a/ModernKeePass/Controls/CompositeKeyUserControl.xaml
+++ b/ModernKeePass/Controls/CompositeKeyUserControl.xaml
@@ -9,15 +9,14 @@
xmlns:actions="using:ModernKeePass.Actions"
xmlns:converters="using:ModernKeePass.Converters"
xmlns:viewModels="using:ModernKeePass.ViewModels"
- mc:Ignorable="d"
- d:DesignHeight="120"
- d:DesignWidth="550" >
+ mc:Ignorable="d" >
+
@@ -31,6 +30,7 @@
+
@@ -49,9 +49,13 @@
-
+
+
+
+
+
-
-
+
+
diff --git a/ModernKeePass/Controls/CompositeKeyUserControl.xaml.cs b/ModernKeePass/Controls/CompositeKeyUserControl.xaml.cs
index d5225a1..a212610 100644
--- a/ModernKeePass/Controls/CompositeKeyUserControl.xaml.cs
+++ b/ModernKeePass/Controls/CompositeKeyUserControl.xaml.cs
@@ -1,10 +1,13 @@
using System;
using System.Collections.Generic;
+using System.Threading.Tasks;
using Windows.Storage.Pickers;
using Windows.System;
+using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Input;
using ModernKeePass.Events;
+using ModernKeePass.Extensions;
using ModernKeePass.ViewModels;
// Pour en savoir plus sur le modèle d'élément Contrôle utilisateur, consultez la page http://go.microsoft.com/fwlink/?LinkId=234236
@@ -39,6 +42,19 @@ namespace ModernKeePass.Controls
typeof(CompositeKeyUserControl),
new PropertyMetadata(false, (o, args) => { }));
+ public string ButtonLabel
+ {
+ get { return (string)GetValue(ButtonLabelProperty); }
+ set { SetValue(ButtonLabelProperty, value); }
+ }
+ public static readonly DependencyProperty ButtonLabelProperty =
+ DependencyProperty.Register(
+ "ButtonLabel",
+ typeof(string),
+ typeof(CompositeKeyUserControl),
+ new PropertyMetadata("OK", (o, args) => { }));
+
+
public bool ShowComplexityIndicator => CreateNew || UpdateKey;
public CompositeKeyUserControl()
@@ -51,14 +67,20 @@ namespace ModernKeePass.Controls
public event PasswordCheckedEventHandler ValidationChecked;
public delegate void PasswordCheckedEventHandler(object sender, PasswordEventArgs e);
- private void OpenButton_OnClick(object sender, RoutedEventArgs e)
+ private async void OpenButton_OnClick(object sender, RoutedEventArgs e)
{
ValidationChecking?.Invoke(this, new EventArgs());
if (UpdateKey) Model.UpdateKey();
- else if (Model.OpenDatabase(CreateNew))
+ else
{
- ValidationChecked?.Invoke(this, new PasswordEventArgs(Model.RootGroup));
+ var oldLabel = ButtonLabel;
+ ButtonLabel = "Opening...";
+ if (await Dispatcher.RunTaskAsync(async () => await Model.OpenDatabase(CreateNew)))
+ {
+ ValidationChecked?.Invoke(this, new PasswordEventArgs(Model.RootGroup));
+ }
+ ButtonLabel = oldLabel;
}
}
diff --git a/ModernKeePass/Converters/EmptyStringToVisibilityConverter.cs b/ModernKeePass/Converters/EmptyStringToVisibilityConverter.cs
new file mode 100644
index 0000000..dc73ae4
--- /dev/null
+++ b/ModernKeePass/Converters/EmptyStringToVisibilityConverter.cs
@@ -0,0 +1,20 @@
+using System;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Data;
+
+namespace ModernKeePass.Converters
+{
+ class EmptyStringToVisibilityConverter: IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, string language)
+ {
+ var text = value is string ? value.ToString() : string.Empty;
+ return string.IsNullOrEmpty(text) ? Visibility.Collapsed : Visibility.Visible;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, string language)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/ModernKeePass/Extensions/DispatcherTaskExtensions.cs b/ModernKeePass/Extensions/DispatcherTaskExtensions.cs
new file mode 100644
index 0000000..c0ecb9e
--- /dev/null
+++ b/ModernKeePass/Extensions/DispatcherTaskExtensions.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Threading.Tasks;
+using Windows.UI.Core;
+
+namespace ModernKeePass.Extensions
+{
+ public static class DispatcherTaskExtensions
+ {
+ public static async Task RunTaskAsync(this CoreDispatcher dispatcher,
+ Func> func, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal)
+ {
+ var taskCompletionSource = new TaskCompletionSource();
+ await dispatcher.RunAsync(priority, async () =>
+ {
+ try
+ {
+ taskCompletionSource.SetResult(await func());
+ }
+ catch (Exception ex)
+ {
+ taskCompletionSource.SetException(ex);
+ }
+ });
+ return await taskCompletionSource.Task;
+ }
+
+ // There is no TaskCompletionSource so we use a bool that we throw away.
+ public static async Task RunTaskAsync(this CoreDispatcher dispatcher,
+ Func func, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal) =>
+ await RunTaskAsync(dispatcher, async () => { await func(); return false; }, priority);
+ }
+}
\ No newline at end of file
diff --git a/ModernKeePass/ModernKeePassApp.csproj b/ModernKeePass/ModernKeePassApp.csproj
index 1455439..06212ef 100644
--- a/ModernKeePass/ModernKeePassApp.csproj
+++ b/ModernKeePass/ModernKeePassApp.csproj
@@ -122,8 +122,10 @@
+
+
diff --git a/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml b/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml
index f701d4d..8186346 100644
--- a/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml
+++ b/ModernKeePass/Pages/MainPageFrames/NewDatabasePage.xaml
@@ -23,7 +23,7 @@
-
+
diff --git a/ModernKeePass/Pages/MainPageFrames/OpenDatabasePage.xaml b/ModernKeePass/Pages/MainPageFrames/OpenDatabasePage.xaml
index a777596..c94b795 100644
--- a/ModernKeePass/Pages/MainPageFrames/OpenDatabasePage.xaml
+++ b/ModernKeePass/Pages/MainPageFrames/OpenDatabasePage.xaml
@@ -24,7 +24,7 @@
-
+
diff --git a/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml b/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml
index e56a621..7c9ac06 100644
--- a/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml
+++ b/ModernKeePass/Pages/MainPageFrames/RecentDatabasesPage.xaml
@@ -34,7 +34,7 @@
-
+
diff --git a/ModernKeePass/Pages/SettingsPageFrames/SettingsSecurityPage.xaml b/ModernKeePass/Pages/SettingsPageFrames/SettingsSecurityPage.xaml
index a529276..a6eaf69 100644
--- a/ModernKeePass/Pages/SettingsPageFrames/SettingsSecurityPage.xaml
+++ b/ModernKeePass/Pages/SettingsPageFrames/SettingsSecurityPage.xaml
@@ -9,6 +9,6 @@
-
+
diff --git a/ModernKeePass/ViewModels/CompositeKeyVm.cs b/ModernKeePass/ViewModels/CompositeKeyVm.cs
index 23a4479..b61166d 100644
--- a/ModernKeePass/ViewModels/CompositeKeyVm.cs
+++ b/ModernKeePass/ViewModels/CompositeKeyVm.cs
@@ -1,5 +1,6 @@
using System;
using System.Text;
+using System.Threading.Tasks;
using Windows.Storage;
using Windows.UI.Xaml;
using ModernKeePass.Common;
@@ -73,6 +74,7 @@ namespace ModernKeePass.ViewModels
_password = value;
OnPropertyChanged("PasswordComplexityIndicator");
StatusType = (int)StatusTypes.Normal;
+ Status = string.Empty;
}
}
@@ -104,7 +106,7 @@ namespace ModernKeePass.ViewModels
Database = database;
}
- public bool OpenDatabase(bool createNew)
+ public async Task OpenDatabase(bool createNew)
{
var error = string.Empty;
try
@@ -118,7 +120,7 @@ namespace ModernKeePass.ViewModels
switch ((DatabaseHelper.DatabaseStatus)Database.Status)
{
case DatabaseHelper.DatabaseStatus.Opened:
- RootGroup = Database.RootGroup;
+ await Task.Run( () => RootGroup = Database.RootGroup);
return true;
case DatabaseHelper.DatabaseStatus.CompositeKeyError:
var errorMessage = new StringBuilder("Error: wrong ");
diff --git a/ModernKeePass/ViewModels/GroupVm.cs b/ModernKeePass/ViewModels/GroupVm.cs
index 9570892..4e86f37 100644
--- a/ModernKeePass/ViewModels/GroupVm.cs
+++ b/ModernKeePass/ViewModels/GroupVm.cs
@@ -1,6 +1,7 @@
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
+using System.Threading.Tasks;
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;