diff --git a/ModernKeePass/App.xaml.cs b/ModernKeePass/App.xaml.cs index 03a88dd..f5c009e 100644 --- a/ModernKeePass/App.xaml.cs +++ b/ModernKeePass/App.xaml.cs @@ -99,7 +99,7 @@ namespace ModernKeePass #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { - DebugSettings.EnableFrameRateCounter = true; + //DebugSettings.EnableFrameRateCounter = true; } #endif diff --git a/ModernKeePass/Converters/IntToSymbolConverter.cs b/ModernKeePass/Converters/IntToSymbolConverter.cs index 4abace5..a9e1243 100644 --- a/ModernKeePass/Converters/IntToSymbolConverter.cs +++ b/ModernKeePass/Converters/IntToSymbolConverter.cs @@ -75,6 +75,7 @@ namespace ModernKeePass.Converters public object ConvertBack(object value, Type targetType, object parameter, string language) { var symbol = (Symbol) value; + var defaultIcon = (int?) parameter ?? -1; switch (symbol) { case Symbol.Delete: return (int)PwIcon.TrashBin; @@ -123,7 +124,7 @@ namespace ModernKeePass.Converters case Symbol.ZeroBars: return (int) PwIcon.Energy; case Symbol.FourBars: return (int) PwIcon.EnergyCareful; case Symbol.Scan: return (int) PwIcon.Scanner; - default: return (int) PwIcon.Key; + default: return defaultIcon; } } } diff --git a/ModernKeePass/Interfaces/IFormat.cs b/ModernKeePass/Interfaces/IFormat.cs new file mode 100644 index 0000000..b96cd17 --- /dev/null +++ b/ModernKeePass/Interfaces/IFormat.cs @@ -0,0 +1,9 @@ +using Windows.Storage; + +namespace ModernKeePass.Interfaces +{ + public interface IFormat + { + IPwEntity Import(IStorageFile source); + } +} \ No newline at end of file diff --git a/ModernKeePass/Interfaces/IImportService.cs b/ModernKeePass/Interfaces/IImportService.cs new file mode 100644 index 0000000..226db19 --- /dev/null +++ b/ModernKeePass/Interfaces/IImportService.cs @@ -0,0 +1,9 @@ +using Windows.Storage; + +namespace ModernKeePass.Interfaces +{ + public interface IImportService where T: IFormat + { + void Import(T format, IStorageFile source, IDatabaseService database); + } +} \ No newline at end of file diff --git a/ModernKeePass/ModernKeePass.App.csproj b/ModernKeePass/ModernKeePass.App.csproj index 308ca1a..e69740b 100644 --- a/ModernKeePass/ModernKeePass.App.csproj +++ b/ModernKeePass/ModernKeePass.App.csproj @@ -117,10 +117,13 @@ + + + diff --git a/ModernKeePass/Services/DatabaseService.cs b/ModernKeePass/Services/DatabaseService.cs index 9df5ce2..edc4cc9 100644 --- a/ModernKeePass/Services/DatabaseService.cs +++ b/ModernKeePass/Services/DatabaseService.cs @@ -5,11 +5,9 @@ using ModernKeePass.Exceptions; using ModernKeePass.Interfaces; using ModernKeePass.ViewModels; using ModernKeePassLib; -using ModernKeePassLib.Collections; using ModernKeePassLib.Cryptography.KeyDerivation; using ModernKeePassLib.Interfaces; using ModernKeePassLib.Keys; -using ModernKeePassLib.Security; using ModernKeePassLib.Serialization; namespace ModernKeePass.Services @@ -73,7 +71,7 @@ namespace ModernKeePass.Services { _settings = settings; } - + /// /// Open a KeePass database @@ -100,9 +98,7 @@ namespace ModernKeePass.Services if (createNew) { _pwDatabase.New(ioConnection, key); - - //Get settings default values - if (_settings.GetSetting("Sample")) CreateSampleData(); + var fileFormat = _settings.GetSetting("DefaultFileFormat"); switch (fileFormat) { @@ -122,7 +118,7 @@ namespace ModernKeePass.Services throw new ArgumentException(ex.Message, ex); } } - + public void ReOpen() { Open(_databaseFile, _compositeKey); @@ -190,37 +186,5 @@ namespace ModernKeePass.Services _compositeKey = newCompositeKey; _pwDatabase.MasterKey = newCompositeKey; } - - private void CreateSampleData() - { - _pwDatabase.RootGroup.AddGroup(new PwGroup(true, true, "Banking", PwIcon.Count), true); - _pwDatabase.RootGroup.AddGroup(new PwGroup(true, true, "Email", PwIcon.EMail), true); - _pwDatabase.RootGroup.AddGroup(new PwGroup(true, true, "Internet", PwIcon.World), true); - - var pe = new PwEntry(true, true); - pe.Strings.Set(PwDefs.TitleField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectTitle, - "Sample Entry")); - pe.Strings.Set(PwDefs.UserNameField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectUserName, - "Username")); - pe.Strings.Set(PwDefs.UrlField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectUrl, - PwDefs.HomepageUrl)); - pe.Strings.Set(PwDefs.PasswordField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectPassword, - "Password")); - pe.Strings.Set(PwDefs.NotesField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectNotes, - "You may safely delete this sample")); - _pwDatabase.RootGroup.AddEntry(pe, true); - - pe = new PwEntry(true, true); - pe.Strings.Set(PwDefs.TitleField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectTitle, - "Sample Entry #2")); - pe.Strings.Set(PwDefs.UserNameField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectUserName, - "Michael321")); - pe.Strings.Set(PwDefs.UrlField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectUrl, - PwDefs.HelpUrl + "kb/testform.html")); - pe.Strings.Set(PwDefs.PasswordField, new ProtectedString(_pwDatabase.MemoryProtection.ProtectPassword, - "12345")); - pe.AutoType.Add(new AutoTypeAssociation("*Test Form - KeePass*", string.Empty)); - _pwDatabase.RootGroup.AddEntry(pe, true); - } } } diff --git a/ModernKeePass/Services/ImportService.cs b/ModernKeePass/Services/ImportService.cs new file mode 100644 index 0000000..d29fee9 --- /dev/null +++ b/ModernKeePass/Services/ImportService.cs @@ -0,0 +1,24 @@ +using ModernKeePass.Interfaces; +using Windows.Storage; +using ModernKeePass.ViewModels; + +namespace ModernKeePass.Services +{ + public class ImportService : IImportService + { + public void Import(IFormat format, IStorageFile source, IDatabaseService databaseService) + { + var entities = (GroupVm)format.Import(source); + + foreach (var entry in entities.Entries) + { + databaseService.RootGroup.Entries.Add(entry); + } + + foreach (var subGroup in entities.Groups) + { + databaseService.RootGroup.Groups.Add(subGroup); + } + } + } +} \ No newline at end of file diff --git a/ModernKeePass/Strings/en-US/Resources.resw b/ModernKeePass/Strings/en-US/Resources.resw index 3fb91f0..845621b 100644 --- a/ModernKeePass/Strings/en-US/Resources.resw +++ b/ModernKeePass/Strings/en-US/Resources.resw @@ -483,4 +483,7 @@ Group restored to its original position + + Import existing data + \ No newline at end of file diff --git a/ModernKeePass/Strings/fr-FR/Resources.resw b/ModernKeePass/Strings/fr-FR/Resources.resw index 90e7605..b1870aa 100644 --- a/ModernKeePass/Strings/fr-FR/Resources.resw +++ b/ModernKeePass/Strings/fr-FR/Resources.resw @@ -483,4 +483,7 @@ Groupe replacée à son emplacement d'origine + + Importer des données existantes + \ No newline at end of file diff --git a/ModernKeePass/ViewModels/NewVm.cs b/ModernKeePass/ViewModels/NewVm.cs index 66c5866..bfe2334 100644 --- a/ModernKeePass/ViewModels/NewVm.cs +++ b/ModernKeePass/ViewModels/NewVm.cs @@ -1,7 +1,49 @@ -namespace ModernKeePass.ViewModels +using Windows.Storage; +using Windows.UI.Xaml.Controls; +using ModernKeePass.Interfaces; +using ModernKeePassLib; + +namespace ModernKeePass.ViewModels { public class NewVm : OpenVm { public string Password { get; set; } + + public bool IsImportChecked { get; set; } + + public IStorageFile ImportFile { get; set; } + + public IFormat ImportFormat { get; set; } + + public void PopulateInitialData(IDatabaseService database, ISettingsService settings, IImportService importService) + { + if (settings.GetSetting("Sample") && !IsImportChecked) CreateSampleData(database); + else if (IsImportChecked && ImportFile != null) importService.Import(ImportFormat, ImportFile, database); + } + + private void CreateSampleData(IDatabaseService database) + { + var bankingGroup = database.RootGroup.AddNewGroup("Banking"); + bankingGroup.IconId = (int) Symbol.Calculator; + + var emailGroup = database.RootGroup.AddNewGroup("Email"); + emailGroup.IconId = (int) Symbol.Mail; + + var internetGroup = database.RootGroup.AddNewGroup("Internet"); + internetGroup.IconId = (int) Symbol.World; + + var sample1 = database.RootGroup.AddNewEntry(); + sample1.Name = "Sample Entry"; + sample1.UserName = "Username"; + sample1.Url = PwDefs.HomepageUrl; + sample1.Password = "Password"; + sample1.Notes = "You may safely delete this sample"; + + var sample2 = database.RootGroup.AddNewEntry(); + sample2.Name = "Sample Entry #2"; + sample2.UserName = "Michael321"; + sample2.Url = PwDefs.HelpUrl + "kb/testform.html"; + sample2.Password = "12345"; + } } } diff --git a/ModernKeePass/Views/EntryDetailPage.xaml b/ModernKeePass/Views/EntryDetailPage.xaml index 9ce341c..50cfe11 100644 --- a/ModernKeePass/Views/EntryDetailPage.xaml +++ b/ModernKeePass/Views/EntryDetailPage.xaml @@ -19,7 +19,6 @@ -