RecycleBin now uses resources

RecycleBin bugs correction
This commit is contained in:
BONNEVILLE Geoffroy
2018-03-12 17:30:03 +01:00
parent 56129253d9
commit 4aefbcb8b9
17 changed files with 50 additions and 55 deletions

View File

@@ -191,7 +191,9 @@ namespace ModernKeePass
} }
catch (Exception exception) catch (Exception exception)
{ {
#if DEBUG
ToastNotificationHelper.ShowErrorToast(exception); ToastNotificationHelper.ShowErrorToast(exception);
#endif
} }
deferral.Complete(); deferral.Complete();
} }

View File

@@ -15,7 +15,7 @@ namespace ModernKeePass.Interfaces
GroupVm RootGroup { get; set; } GroupVm RootGroup { get; set; }
GroupVm RecycleBin { get; set; } GroupVm RecycleBin { get; set; }
StorageFile DatabaseFile { get; set; } StorageFile DatabaseFile { get; set; }
CompositeKey CompositeKey { get; } CompositeKey CompositeKey { get; set; }
PwUuid DataCipher { get; set; } PwUuid DataCipher { get; set; }
PwCompressionAlgorithm CompressionAlgorithm { get; set; } PwCompressionAlgorithm CompressionAlgorithm { get; set; }
KdfParameters KeyDerivation { get; set; } KdfParameters KeyDerivation { get; set; }
@@ -26,10 +26,9 @@ namespace ModernKeePass.Interfaces
Task Open(CompositeKey key, bool createNew = false); Task Open(CompositeKey key, bool createNew = false);
Task ReOpen(); Task ReOpen();
void UpdateCompositeKey(CompositeKey key);
void Save(); void Save();
void Save(StorageFile file); void Save(StorageFile file);
void CreateRecycleBin(); void CreateRecycleBin(string title);
void AddDeletedItem(PwUuid id); void AddDeletedItem(PwUuid id);
Task Close(bool releaseFile = true); Task Close(bool releaseFile = true);
} }

View File

@@ -34,6 +34,6 @@ namespace ModernKeePass.Interfaces
/// <summary> /// <summary>
/// Delete from ViewModel /// Delete from ViewModel
/// </summary> /// </summary>
void MarkForDelete(); void MarkForDelete(string recycleBinTitle);
} }
} }

View File

@@ -32,7 +32,7 @@ namespace ModernKeePass.Services
set set
{ {
_recycleBin = value; _recycleBin = value;
_pwDatabase.RecycleBinUuid = _recycleBin.IdUuid; _pwDatabase.RecycleBinUuid = _recycleBin?.IdUuid;
} }
} }
@@ -57,7 +57,11 @@ namespace ModernKeePass.Services
} }
} }
public CompositeKey CompositeKey => _compositeKey; public CompositeKey CompositeKey
{
get { return _compositeKey; }
set { _compositeKey = value; }
}
public PwUuid DataCipher public PwUuid DataCipher
{ {
@@ -137,8 +141,7 @@ namespace ModernKeePass.Services
CreationCollisionOption.FailIfExists); CreationCollisionOption.FailIfExists);
Save(backupFile); Save(backupFile);
} }
//Status = (int)DatabaseStatus.Opened;
RootGroup = new GroupVm(_pwDatabase.RootGroup, null, RecycleBinEnabled ? _pwDatabase.RecycleBinUuid : null); RootGroup = new GroupVm(_pwDatabase.RootGroup, null, RecycleBinEnabled ? _pwDatabase.RecycleBinUuid : null);
} }
catch (InvalidCompositeKeyException ex) catch (InvalidCompositeKeyException ex)
@@ -215,18 +218,13 @@ namespace ModernKeePass.Services
_pwDatabase.DeletedObjects.Add(new PwDeletedObject(id, DateTime.UtcNow)); _pwDatabase.DeletedObjects.Add(new PwDeletedObject(id, DateTime.UtcNow));
} }
public void CreateRecycleBin() public void CreateRecycleBin(string title)
{ {
RecycleBin = RootGroup.AddNewGroup("Recycle bin"); RecycleBin = RootGroup.AddNewGroup(title);
RecycleBin.IsSelected = true; RecycleBin.IsSelected = true;
RecycleBin.IconSymbol = Symbol.Delete; RecycleBin.IconSymbol = Symbol.Delete;
} }
public void UpdateCompositeKey(CompositeKey key)
{
_pwDatabase.MasterKey = key;
}
private void CreateSampleData() private void CreateSampleData()
{ {
_pwDatabase.RootGroup.AddGroup(new PwGroup(true, true, "Banking", PwIcon.Count), true); _pwDatabase.RootGroup.AddGroup(new PwGroup(true, true, "Banking", PwIcon.Count), true);

View File

@@ -204,9 +204,6 @@
<data name="EntryDeletingConfirmation" xml:space="preserve"> <data name="EntryDeletingConfirmation" xml:space="preserve">
<value>Are you sure you want to delete this entry?</value> <value>Are you sure you want to delete this entry?</value>
</data> </data>
<data name="EntryNew" xml:space="preserve">
<value>&lt; New entry &gt;</value>
</data>
<data name="EntryRecycled" xml:space="preserve"> <data name="EntryRecycled" xml:space="preserve">
<value>Entry moved to the Recycle bin</value> <value>Entry moved to the Recycle bin</value>
</data> </data>
@@ -222,9 +219,6 @@
<data name="GroupDeletingConfirmation" xml:space="preserve"> <data name="GroupDeletingConfirmation" xml:space="preserve">
<value>Are you sure you want to delete the whole group and all its entries?</value> <value>Are you sure you want to delete the whole group and all its entries?</value>
</data> </data>
<data name="GroupNew" xml:space="preserve">
<value>&lt; New group &gt;</value>
</data>
<data name="GroupRecycled" xml:space="preserve"> <data name="GroupRecycled" xml:space="preserve">
<value>Group moved to the Recycle bin</value> <value>Group moved to the Recycle bin</value>
</data> </data>
@@ -276,4 +270,7 @@
<data name="SettingsMenuItemSave" xml:space="preserve"> <data name="SettingsMenuItemSave" xml:space="preserve">
<value>Saving</value> <value>Saving</value>
</data> </data>
<data name="RecycleBinTitle" xml:space="preserve">
<value>Recycle Bin</value>
</data>
</root> </root>

View File

@@ -214,10 +214,10 @@
<value>Filter...</value> <value>Filter...</value>
</data> </data>
<data name="GroupNewItemTextBox.Text" xml:space="preserve"> <data name="GroupNewItemTextBox.Text" xml:space="preserve">
<value>&lt; New group &gt;</value> <value>New group</value>
</data> </data>
<data name="GroupNewItemTooltip.Content" xml:space="preserve"> <data name="GroupNewItemTooltip.Content" xml:space="preserve">
<value>&lt; New group &gt;</value> <value>New group</value>
</data> </data>
<data name="GroupSearch.PlaceholderText" xml:space="preserve"> <data name="GroupSearch.PlaceholderText" xml:space="preserve">
<value>Search...</value> <value>Search...</value>

View File

@@ -204,10 +204,6 @@
<data name="EntryDeletingConfirmation" xml:space="preserve"> <data name="EntryDeletingConfirmation" xml:space="preserve">
<value>Êtes-vous sûr de vouloir supprimer cette entrée ?</value> <value>Êtes-vous sûr de vouloir supprimer cette entrée ?</value>
</data> </data>
<data name="EntryNew" xml:space="preserve">
<value>&lt; Nouvelle entrée &gt;</value>
<comment>Unused</comment>
</data>
<data name="EntryRecycled" xml:space="preserve"> <data name="EntryRecycled" xml:space="preserve">
<value>Entrée placée dans la Corbeille</value> <value>Entrée placée dans la Corbeille</value>
</data> </data>
@@ -223,9 +219,6 @@
<data name="GroupDeletingConfirmation" xml:space="preserve"> <data name="GroupDeletingConfirmation" xml:space="preserve">
<value>Êtes-vous sûr de vouloir supprimer ce group et toutes ses entrées ?</value> <value>Êtes-vous sûr de vouloir supprimer ce group et toutes ses entrées ?</value>
</data> </data>
<data name="GroupNew" xml:space="preserve">
<value>&lt; Nouveau groupe &gt;</value>
</data>
<data name="GroupRecycled" xml:space="preserve"> <data name="GroupRecycled" xml:space="preserve">
<value>Groupe placé dans la Corbeille</value> <value>Groupe placé dans la Corbeille</value>
</data> </data>
@@ -277,4 +270,7 @@
<data name="SettingsMenuItemSave" xml:space="preserve"> <data name="SettingsMenuItemSave" xml:space="preserve">
<value>Sauvegardes</value> <value>Sauvegardes</value>
</data> </data>
<data name="RecycleBinTitle" xml:space="preserve">
<value>Corbeille</value>
</data>
</root> </root>

View File

@@ -214,10 +214,10 @@
<value>Filtrer...</value> <value>Filtrer...</value>
</data> </data>
<data name="GroupNewItemTextBox.Text" xml:space="preserve"> <data name="GroupNewItemTextBox.Text" xml:space="preserve">
<value>&lt; Nouveau groupe &gt;</value> <value>Nouveau groupe</value>
</data> </data>
<data name="GroupNewItemTooltip.Content" xml:space="preserve"> <data name="GroupNewItemTooltip.Content" xml:space="preserve">
<value>&lt; Nouveau groupe &gt;</value> <value>Nouveau groupe</value>
</data> </data>
<data name="GroupSearch.PlaceholderText" xml:space="preserve"> <data name="GroupSearch.PlaceholderText" xml:space="preserve">
<value>Rechercher...</value> <value>Rechercher...</value>

View File

@@ -2,7 +2,6 @@
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Windows.Storage; using Windows.Storage;
using Windows.UI.Xaml;
using ModernKeePass.Common; using ModernKeePass.Common;
using ModernKeePass.Interfaces; using ModernKeePass.Interfaces;
using ModernKeePass.Services; using ModernKeePass.Services;
@@ -154,7 +153,7 @@ namespace ModernKeePass.ViewModels
public void UpdateKey() public void UpdateKey()
{ {
Database.UpdateCompositeKey(CreateCompositeKey()); Database.CompositeKey = CreateCompositeKey();
UpdateStatus(_resource.GetResourceValue("CompositeKeyUpdated"), StatusTypes.Success); UpdateStatus(_resource.GetResourceValue("CompositeKeyUpdated"), StatusTypes.Success);
} }

View File

@@ -219,10 +219,10 @@ namespace ModernKeePass.ViewModels
_pwEntry?.Strings.Set(key, new ProtectedString(true, newValue)); _pwEntry?.Strings.Set(key, new ProtectedString(true, newValue));
} }
public void MarkForDelete() public void MarkForDelete(string recycleBinTitle)
{ {
if (_database.RecycleBinEnabled && _database.RecycleBin?.IdUuid == null) if (_database.RecycleBinEnabled && _database.RecycleBin?.IdUuid == null)
_database.CreateRecycleBin(); _database.CreateRecycleBin(recycleBinTitle);
Move(_database.RecycleBinEnabled && !ParentGroup.IsSelected ? _database.RecycleBin : null); Move(_database.RecycleBinEnabled && !ParentGroup.IsSelected ? _database.RecycleBin : null);
} }

View File

@@ -153,10 +153,10 @@ namespace ModernKeePass.ViewModels
return newEntry; return newEntry;
} }
public void MarkForDelete() public void MarkForDelete(string recycleBinTitle)
{ {
if (_database.RecycleBinEnabled && _database.RecycleBin?.IdUuid == null) if (_database.RecycleBinEnabled && _database.RecycleBin?.IdUuid == null)
_database.CreateRecycleBin(); _database.CreateRecycleBin(recycleBinTitle);
Move(_database.RecycleBinEnabled && !IsSelected ? _database.RecycleBin : null); Move(_database.RecycleBinEnabled && !IsSelected ? _database.RecycleBin : null);
} }
@@ -165,7 +165,6 @@ namespace ModernKeePass.ViewModels
Move(PreviousGroup); Move(PreviousGroup);
} }
[DatabaseChanged] [DatabaseChanged]
public void Move(GroupVm destination) public void Move(GroupVm destination)
{ {
@@ -194,7 +193,6 @@ namespace ModernKeePass.ViewModels
_database.Save(); _database.Save();
} }
[DatabaseChanged] [DatabaseChanged]
public void SortEntries() public void SortEntries()
{ {
@@ -210,7 +208,6 @@ namespace ModernKeePass.ViewModels
} }
} }
[DatabaseChanged] [DatabaseChanged]
public void SortGroups() public void SortGroups()
{ {

View File

@@ -27,6 +27,15 @@ namespace ModernKeePass.ViewModels
} }
} }
public bool IsNewRecycleBin
{
get { return _database.RecycleBin == null; }
set
{
if (value) _database.RecycleBin = null;
}
}
public ObservableCollection<GroupVm> Groups { get; set; } public ObservableCollection<GroupVm> Groups { get; set; }
public IEnumerable<string> Ciphers public IEnumerable<string> Ciphers
@@ -73,7 +82,7 @@ namespace ModernKeePass.ViewModels
get { return Groups.FirstOrDefault(g => g.IsSelected); } get { return Groups.FirstOrDefault(g => g.IsSelected); }
set set
{ {
if (_selectedItem == value) return; if (_selectedItem == value || IsNewRecycleBin) return;
if (_selectedItem != null) if (_selectedItem != null)
{ {
_selectedItem.IsSelected = false; _selectedItem.IsSelected = false;

View File

@@ -81,7 +81,7 @@ namespace ModernKeePass.Views
resource.GetResourceValue("EntityDeleteCancelButton"), a => resource.GetResourceValue("EntityDeleteCancelButton"), a =>
{ {
ToastNotificationHelper.ShowMovedToast(Model, resource.GetResourceValue("EntityDeleting"), text); ToastNotificationHelper.ShowMovedToast(Model, resource.GetResourceValue("EntityDeleting"), text);
Model.MarkForDelete(); Model.MarkForDelete(resource.GetResourceValue("RecycleBinTitle"));
if (Frame.CanGoBack) Frame.GoBack(); if (Frame.CanGoBack) Frame.GoBack();
}, null); }, null);
} }

View File

@@ -117,7 +117,7 @@ namespace ModernKeePass.Views
resource.GetResourceValue("EntityDeleteCancelButton"), a => resource.GetResourceValue("EntityDeleteCancelButton"), a =>
{ {
ToastNotificationHelper.ShowMovedToast(Model, resource.GetResourceValue("EntityDeleting"), text); ToastNotificationHelper.ShowMovedToast(Model, resource.GetResourceValue("EntityDeleting"), text);
Model.MarkForDelete(); Model.MarkForDelete(resource.GetResourceValue("RecycleBinTitle"));
if (Frame.CanGoBack) Frame.GoBack(); if (Frame.CanGoBack) Frame.GoBack();
}, null); }, null);
} }

View File

@@ -22,7 +22,7 @@
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ToggleSwitch x:Uid="SettingsDatabaseRecycleBin" IsOn="{Binding HasRecycleBin, Mode=TwoWay}" /> <ToggleSwitch x:Uid="SettingsDatabaseRecycleBin" IsOn="{Binding HasRecycleBin, Mode=TwoWay}" />
<StackPanel Visibility="{Binding HasRecycleBin, Converter={StaticResource BooleanToVisibilityConverter}}"> <StackPanel Visibility="{Binding HasRecycleBin, Converter={StaticResource BooleanToVisibilityConverter}}">
<RadioButton x:Uid="SettingsDatabaseRecycleBinCreate" GroupName="Recycle" IsChecked="True" /> <RadioButton x:Uid="SettingsDatabaseRecycleBinCreate" GroupName="Recycle" IsChecked="{Binding IsNewRecycleBin, Mode=TwoWay}" />
<RadioButton x:Name="RadioButton" x:Uid="SettingsDatabaseRecycleBinExisting" GroupName="Recycle" IsChecked="{Binding SelectedItem, Converter={StaticResource NullToBooleanConverter}}" /> <RadioButton x:Name="RadioButton" x:Uid="SettingsDatabaseRecycleBinExisting" GroupName="Recycle" IsChecked="{Binding SelectedItem, Converter={StaticResource NullToBooleanConverter}}" />
<ComboBox ItemsSource="{Binding Source={StaticResource RecycleBinGroups}}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" IsEnabled="{Binding IsChecked, ElementName=RadioButton}" /> <ComboBox ItemsSource="{Binding Source={StaticResource RecycleBinGroups}}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" IsEnabled="{Binding IsChecked, ElementName=RadioButton}" />
</StackPanel> </StackPanel>

View File

@@ -19,7 +19,11 @@ namespace ModernKeePassApp.Test.Mock
public StorageFile DatabaseFile { get; set; } public StorageFile DatabaseFile { get; set; }
public CompositeKey CompositeKey => _compositeKey; public CompositeKey CompositeKey
{
get { return _compositeKey; }
set { _compositeKey = value; }
}
public PwUuid DataCipher { get; set; } public PwUuid DataCipher { get; set; }
@@ -55,7 +59,7 @@ namespace ModernKeePassApp.Test.Mock
}); });
} }
public void CreateRecycleBin() public void CreateRecycleBin(string title)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@@ -84,10 +88,5 @@ namespace ModernKeePassApp.Test.Mock
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void UpdateCompositeKey(CompositeKey key)
{
throw new NotImplementedException();
}
} }
} }

View File

@@ -1,5 +1,4 @@
using System; using ModernKeePass.Interfaces;
using ModernKeePass.Interfaces;
namespace ModernKeePassApp.Test.Mock namespace ModernKeePassApp.Test.Mock
{ {