Removed database status in favor of much cleaner code

Implemented (but deactivated) anti corruption mechanism
WIP detect changes and save them if opening another database
This commit is contained in:
BONNEVILLE Geoffroy
2018-01-08 18:52:03 +01:00
parent 4a3f36d38b
commit a19519fa73
17 changed files with 220 additions and 101 deletions

View File

@@ -124,37 +124,31 @@ namespace ModernKeePass.ViewModels
public async Task<bool> OpenDatabase(bool createNew)
{
var error = string.Empty;
try
{
_isOpening = true;
Database.Open(CreateCompositeKey(), createNew);
await Database.Open(CreateCompositeKey(), createNew);
await Task.Run(() => RootGroup = Database.RootGroup);
return true;
}
catch (ArgumentException)
{
var errorMessage = new StringBuilder(_resource.GetResourceValue("CompositeKeyErrorUserStart"));
if (HasPassword) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserPassword"));
if (HasPassword && HasKeyFile) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserOr"));
if (HasKeyFile) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserKeyFile"));
if (HasKeyFile) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserAccount"));
UpdateStatus(errorMessage.ToString(), StatusTypes.Error);
}
catch (Exception e)
{
error = $"{_resource.GetResourceValue("CompositeKeyErrorOpen")}: {e.Message}";
var error = $"{_resource.GetResourceValue("CompositeKeyErrorOpen")}: {e.Message}";
UpdateStatus(error, StatusTypes.Error);
}
finally
{
_isOpening = false;
}
switch ((DatabaseService.DatabaseStatus)Database.Status)
{
case DatabaseService.DatabaseStatus.Opened:
await Task.Run(() => RootGroup = Database.RootGroup);
return true;
case DatabaseService.DatabaseStatus.CompositeKeyError:
var errorMessage = new StringBuilder(_resource.GetResourceValue("CompositeKeyErrorUserStart"));
if (HasPassword) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserPassword"));
if (HasPassword && HasKeyFile) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserOr"));
if (HasKeyFile) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserKeyFile"));
if (HasKeyFile) errorMessage.Append(_resource.GetResourceValue("CompositeKeyErrorUserAccount"));
UpdateStatus(errorMessage.ToString(), StatusTypes.Error);
break;
case DatabaseService.DatabaseStatus.Error:
UpdateStatus(error, StatusTypes.Error);
break;
}
return false;
}

View File

@@ -51,7 +51,7 @@ namespace ModernKeePass.ViewModels
public MainVm(Frame referenceFrame, Frame destinationFrame, IDatabase database, IResource resource, IRecent recent)
{
var isDatabaseOpen = database != null && database.Status == (int) DatabaseService.DatabaseStatus.Opened;
var isDatabaseOpen = database != null && database.IsOpen;
var mainMenuItems = new ObservableCollection<MainMenuItemVm>
{
@@ -62,7 +62,7 @@ namespace ModernKeePass.ViewModels
Destination = destinationFrame,
Parameter = referenceFrame,
SymbolIcon = Symbol.Page2,
IsSelected = database != null && database.Status == (int) DatabaseService.DatabaseStatus.Opening
IsSelected = database != null && database.IsFileOpen
},
new MainMenuItemVm
{
@@ -90,7 +90,7 @@ namespace ModernKeePass.ViewModels
Parameter = referenceFrame,
SymbolIcon = Symbol.Copy,
IsSelected =
(database == null || database.Status == (int) DatabaseService.DatabaseStatus.Closed) &&
(database == null || database.IsClosed) &&
recent.EntryCount > 0,
IsEnabled = recent.EntryCount > 0
},
@@ -120,7 +120,7 @@ namespace ModernKeePass.ViewModels
SelectedItem = mainMenuItems.FirstOrDefault(m => m.IsSelected);
// Add currently opened database to the menu
if (database != null && database.Status == (int) DatabaseService.DatabaseStatus.Opened)
if (database != null && database.IsOpen)
mainMenuItems.Add(new MainMenuItemVm
{
Title = database.Name,

View File

@@ -8,7 +8,7 @@ namespace ModernKeePass.ViewModels
{
public class OpenVm: NotifyPropertyChangedBase
{
public bool ShowPasswordBox => _database?.Status == (int) DatabaseService.DatabaseStatus.Opening;
public bool ShowPasswordBox => _database.IsFileOpen;
public string Name => _database?.Name;
@@ -19,7 +19,7 @@ namespace ModernKeePass.ViewModels
public OpenVm(IDatabase database)
{
_database = database;
if (database == null || database.Status != (int) DatabaseService.DatabaseStatus.Opening) return;
if (database == null || !database.IsFileOpen) return;
OpenFile(database.DatabaseFile);
}

View File

@@ -1,4 +1,5 @@
using Windows.Storage;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.UI.Xaml;
using ModernKeePass.Interfaces;
@@ -14,10 +15,11 @@ namespace ModernKeePass.ViewModels
_database = database;
}
public void Save(bool close = true)
public async Task Save(bool close = true)
{
_database.Save();
if (close) _database.Close();
if (close)
await _database.Close();
}
public void Save(StorageFile file)

View File

@@ -61,7 +61,7 @@ namespace ModernKeePass.ViewModels
Group = resource.GetResourceValue("SettingsMenuGroupDatabase"),
SymbolIcon = Symbol.Setting,
PageType = typeof(SettingsDatabasePage),
IsEnabled = database?.Status == 2
IsEnabled = database.IsOpen
},
new ListMenuItemVm
{
@@ -69,7 +69,7 @@ namespace ModernKeePass.ViewModels
Group = resource.GetResourceValue("SettingsMenuGroupDatabase"),
SymbolIcon = Symbol.Permissions,
PageType = typeof(SettingsSecurityPage),
IsEnabled = database?.Status == 2
IsEnabled = database.IsOpen
}
};
SelectedItem = menuItems.FirstOrDefault(m => m.IsSelected);