diff --git a/ModernKeePass/MainPage.xaml.cs b/ModernKeePass/MainPage.xaml.cs
index e59b7cb..d6d6b4e 100644
--- a/ModernKeePass/MainPage.xaml.cs
+++ b/ModernKeePass/MainPage.xaml.cs
@@ -29,21 +29,21 @@ namespace ModernKeePass
new MainMenuItem {Title = "Open", PageType = typeof(OpenDatabasePage), Destination = MenuFrame, Parameter = Frame, SymbolIcon = Symbol.Page2},
new MainMenuItem {Title = "New" /*, PageType = typeof(NewDatabasePage)*/, Destination = MenuFrame, SymbolIcon = Symbol.Add},
new MainMenuItem {Title = "Save" , PageType = typeof(SaveDatabasePage), Destination = MenuFrame, Parameter = Frame, SymbolIcon = Symbol.Save},
- new MainMenuItem {Title = "Recent" /*, PageType = typeof(RecentDatabasesPage)*/, Destination = MenuFrame, SymbolIcon = Symbol.Copy}
+ new MainMenuItem {Title = "Recent" , PageType = typeof(RecentDatabasesPage), Destination = MenuFrame, Parameter = Frame, SymbolIcon = Symbol.Copy}
};
var app = (App)Application.Current;
if (app.Database != null && app.Database.IsOpen)
mainMenuItems.Add(new MainMenuItem { Title = app.Database.Name, PageType = typeof(GroupDetailPage), Destination = Frame, Parameter = app.Database.RootGroup, Group = 1, SymbolIcon = Symbol.ProtectedDocument});
- var result = from item in mainMenuItems group item by item.Group into grp orderby grp.Key select grp;
- MenuItemsSource.Source = result;
+
+ var mainVm = DataContext as MainVm;
+ mainVm.MainMenuItems = from item in mainMenuItems group item by item.Group into grp orderby grp.Key select grp;
+ mainVm.NotifyPropertyChanged("MainMenuItems");
}
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
- var listView = sender as ListView;
- if (listView == null) return;
- var selectedItem = listView.SelectedItem as MainMenuItem;
- selectedItem?.Destination.Navigate(selectedItem.PageType, selectedItem.Parameter);
+ var mainMenuItem = e.AddedItems[0] as MainMenuItem;
+ mainMenuItem?.Destination.Navigate(mainMenuItem.PageType, mainMenuItem.Parameter);
}
}
}
diff --git a/ModernKeePass/Models/RecentItem.cs b/ModernKeePass/Models/RecentItem.cs
new file mode 100644
index 0000000..72e3d72
--- /dev/null
+++ b/ModernKeePass/Models/RecentItem.cs
@@ -0,0 +1,8 @@
+namespace ModernKeePass.Models
+{
+ public class RecentItem
+ {
+ public string Token { get; set; }
+ public string Name { get; set; }
+ }
+}
diff --git a/ModernKeePass/ModernKeePass.csproj b/ModernKeePass/ModernKeePass.csproj
index 8f8dbff..5335855 100644
--- a/ModernKeePass/ModernKeePass.csproj
+++ b/ModernKeePass/ModernKeePass.csproj
@@ -123,6 +123,7 @@
+
EntryDetailPage.xaml
@@ -132,6 +133,9 @@
OpenDatabasePage.xaml
+
+ RecentDatabasesPage.xaml
+
SaveDatabasePage.xaml
@@ -140,6 +144,7 @@
+
@@ -173,6 +178,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -183,7 +192,7 @@
..\packages\Portable.BouncyCastle.1.8.1.3\lib\netstandard1.0\BouncyCastle.Crypto.dll
True
-
+
..\packages\ModernKeePassLib.2.28.3000\lib\netstandard1.2\ModernKeePassLib.dll
True
diff --git a/ModernKeePass/Pages/GroupDetailPage.xaml b/ModernKeePass/Pages/GroupDetailPage.xaml
index da7c225..764dfb9 100644
--- a/ModernKeePass/Pages/GroupDetailPage.xaml
+++ b/ModernKeePass/Pages/GroupDetailPage.xaml
@@ -18,7 +18,6 @@
-
-
-
+
-
+
@@ -91,6 +89,12 @@
+
+
+
diff --git a/ModernKeePass/Pages/OpenDatabasePage.xaml.cs b/ModernKeePass/Pages/OpenDatabasePage.xaml.cs
index ab5812c..06a26b2 100644
--- a/ModernKeePass/Pages/OpenDatabasePage.xaml.cs
+++ b/ModernKeePass/Pages/OpenDatabasePage.xaml.cs
@@ -7,6 +7,8 @@ using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Navigation;
using ModernKeePass.Common;
using ModernKeePass.ViewModels;
+using Windows.Storage.AccessCache;
+using Windows.Storage;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
@@ -22,7 +24,6 @@ namespace ModernKeePass.Pages
public OpenDatabasePage()
{
InitializeComponent();
- DataContext = new DatabaseVm();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
@@ -42,9 +43,28 @@ namespace ModernKeePass.Pages
picker.FileTypeFilter.Add(".kdbx");
var file = await picker.PickSingleFileAsync();
- if (file == null) return;
// Application now has read/write access to the picked file
+ if (file == null) return;
+ // Initialize KDBX database
((App)Application.Current).Database = new DatabaseHelper(file);
+ AddToRecentFiles(file);
+ ShowPassword(file);
+ }
+
+ private void AddToRecentFiles(StorageFile file)
+ {
+ var mru = StorageApplicationPermissions.MostRecentlyUsedList;
+ var mruToken = mru.Add(file, file.DisplayName);
+
+ /*var localSettings = ApplicationData.Current.LocalSettings;
+ if (!localSettings.Containers.ContainsKey("Recent"))
+ localSettings.CreateContainer("Recent", ApplicationDataCreateDisposition.Always);
+
+ localSettings.Containers["Recent"].Values[file.DisplayName] = mruToken;*/
+ }
+
+ private void ShowPassword(StorageFile file)
+ {
var databaseVm = DataContext as DatabaseVm;
if (databaseVm == null) return;
databaseVm.SelectedVisibility = Visibility.Visible;
diff --git a/ModernKeePass/Pages/RecentDatabasesPage.xaml b/ModernKeePass/Pages/RecentDatabasesPage.xaml
new file mode 100644
index 0000000..794738e
--- /dev/null
+++ b/ModernKeePass/Pages/RecentDatabasesPage.xaml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs b/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs
new file mode 100644
index 0000000..3fd5aa4
--- /dev/null
+++ b/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.ObjectModel;
+using System.Linq;
+using ModernKeePass.Common;
+using ModernKeePass.Models;
+using ModernKeePass.ViewModels;
+using Windows.Storage;
+using Windows.Storage.AccessCache;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Navigation;
+
+// Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238
+
+namespace ModernKeePass.Pages
+{
+ ///
+ /// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame.
+ ///
+ public sealed partial class RecentDatabasesPage : Page
+ {
+ private Frame _mainFrame;
+
+ public RecentDatabasesPage()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnNavigatedTo(NavigationEventArgs e)
+ {
+ base.OnNavigatedTo(e);
+ _mainFrame = e.Parameter as Frame;
+ //RecentListView.SelectedIndex = -1;
+ var mru = StorageApplicationPermissions.MostRecentlyUsedList;
+ var recentVm = DataContext as RecentVm;
+ recentVm.RecentItems = new ObservableCollection(
+ from entry in mru.Entries
+ select new RecentItem() { Name = entry.Metadata, Token = entry.Token });
+ recentVm.NotifyPropertyChanged("RecentItems");
+ }
+
+ private async void RecentListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ //if (RecentListView == null || e.RemovedItems.Count > 0) return;
+ var recentItem = e.AddedItems[0] as RecentItem;
+ var mru = StorageApplicationPermissions.MostRecentlyUsedList;
+ var file = await mru.GetFileAsync(recentItem.Token) as StorageFile;
+
+ var app = (App)Application.Current;
+ app.Database = new DatabaseHelper(file);
+ app.Database.Open("test");
+ _mainFrame.Navigate(typeof(GroupDetailPage), app.Database.RootGroup);
+ }
+ }
+}
diff --git a/ModernKeePass/Pages/SaveDatabasePage.xaml b/ModernKeePass/Pages/SaveDatabasePage.xaml
index e7a18dc..7a8b14b 100644
--- a/ModernKeePass/Pages/SaveDatabasePage.xaml
+++ b/ModernKeePass/Pages/SaveDatabasePage.xaml
@@ -11,17 +11,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/ModernKeePass/Pages/SaveDatabasePage.xaml.cs b/ModernKeePass/Pages/SaveDatabasePage.xaml.cs
index 3e7f986..110c935 100644
--- a/ModernKeePass/Pages/SaveDatabasePage.xaml.cs
+++ b/ModernKeePass/Pages/SaveDatabasePage.xaml.cs
@@ -16,7 +16,6 @@ namespace ModernKeePass.Pages
public SaveDatabasePage()
{
InitializeComponent();
- DataContext = new DatabaseVm();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs
index c18fce5..a47391d 100644
--- a/ModernKeePass/ViewModels/EntryVm.cs
+++ b/ModernKeePass/ViewModels/EntryVm.cs
@@ -1,12 +1,15 @@
using System.ComponentModel;
+using System.Drawing;
using Windows.UI.Xaml.Controls;
using ModernKeePass.Mappings;
using ModernKeePassLib;
using ModernKeePassLib.Security;
+using Windows.UI.Xaml.Media;
+using Windows.UI;
namespace ModernKeePass.ViewModels
{
- public class EntryVm : INotifyPropertyChanged
+ public class EntryVm
{
public string Title
{
@@ -34,6 +37,10 @@ namespace ModernKeePass.ViewModels
set { SetEntryValue(PwDefs.NotesField, value); }
}
+ public SolidColorBrush BackgroundColor => CreateFromColor(_pwEntry.BackgroundColor, Colors.Transparent);
+
+ public SolidColorBrush ForegroundColor => CreateFromColor(_pwEntry.ForegroundColor, Colors.White);
+
public Symbol IconSymbol
{
get
@@ -42,9 +49,7 @@ namespace ModernKeePass.ViewModels
return result == Symbol.More ? Symbol.Permissions : result;
}
}
-
- public event PropertyChangedEventHandler PropertyChanged;
-
+
private readonly PwEntry _pwEntry;
public EntryVm() { }
@@ -62,5 +67,15 @@ namespace ModernKeePass.ViewModels
{
_pwEntry.Strings.Set(key, new ProtectedString(true, newValue));
}
+
+ private SolidColorBrush CreateFromColor(System.Drawing.Color color, Windows.UI.Color defaultValue)
+ {
+ if (color == System.Drawing.Color.Empty) return new SolidColorBrush(defaultValue);
+ return new SolidColorBrush(Windows.UI.Color.FromArgb(
+ color.A,
+ color.R,
+ color.G,
+ color.B));
+ }
}
}
diff --git a/ModernKeePass/ViewModels/MainVm.cs b/ModernKeePass/ViewModels/MainVm.cs
index aa20c8f..5a03612 100644
--- a/ModernKeePass/ViewModels/MainVm.cs
+++ b/ModernKeePass/ViewModels/MainVm.cs
@@ -1,10 +1,18 @@
using System.Collections.ObjectModel;
using ModernKeePass.Models;
+using System.ComponentModel;
+using System.Linq;
namespace ModernKeePass.ViewModels
{
- public class MainVm
+ public class MainVm : INotifyPropertyChanged
{
- public ObservableCollection MainMenuItems { get; set; }
+ public IOrderedEnumerable> MainMenuItems { get; set; }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+ public void NotifyPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
}
}
diff --git a/ModernKeePass/ViewModels/RecentVm.cs b/ModernKeePass/ViewModels/RecentVm.cs
new file mode 100644
index 0000000..10eae97
--- /dev/null
+++ b/ModernKeePass/ViewModels/RecentVm.cs
@@ -0,0 +1,18 @@
+using ModernKeePass.Models;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+
+namespace ModernKeePass.ViewModels
+{
+ public class RecentVm : INotifyPropertyChanged
+ {
+ public ObservableCollection RecentItems { get; set; }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public void NotifyPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}