mirror of
https://github.com/KeyKeeperApp/KeyKeeper.git
synced 2026-05-19 14:56:34 +03:00
add "Add to Favourites/Remove from Favourites" context menu action
This commit is contained in:
@@ -153,6 +153,25 @@ public class UnlockedRepositoryViewModel : ViewModelBase
|
|||||||
OnPropertyChanged(nameof(Passwords));
|
OnPropertyChanged(nameof(Passwords));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RemoveEntryFromFavourites(PassStoreEntry entry)
|
||||||
|
{
|
||||||
|
var favouritesGroup = PasswordGroups.FirstOrDefault(g => g.GroupType == FileFormatConstants.GROUP_TYPE_FAVOURITES);
|
||||||
|
if (favouritesGroup == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PassStoreEntryPassword? pwd = FollowLinkIfNeeded(entry);
|
||||||
|
if (pwd == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var linkToRemove = pwd.Backlinks.FirstOrDefault(bl => bl is PassStoreEntryLink lnk && lnk.Parent == favouritesGroup);
|
||||||
|
if (linkToRemove != null)
|
||||||
|
{
|
||||||
|
passStore.DeleteEntry(favouritesGroup, linkToRemove.Id);
|
||||||
|
HasUnsavedChanges = true;
|
||||||
|
OnPropertyChanged(nameof(Passwords));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateEntry(PassStoreEntryPassword updatedEntry)
|
public void UpdateEntry(PassStoreEntryPassword updatedEntry)
|
||||||
{
|
{
|
||||||
passStore.UpdateEntry(null, updatedEntry.Id, updatedEntry);
|
passStore.UpdateEntry(null, updatedEntry.Id, updatedEntry);
|
||||||
|
|||||||
@@ -169,6 +169,8 @@
|
|||||||
<MenuItem Name="entryCtxMenuEdit" Header="Edit" Click="EntryContextMenuItem_Click"/>
|
<MenuItem Name="entryCtxMenuEdit" Header="Edit" Click="EntryContextMenuItem_Click"/>
|
||||||
<MenuItem Name="entryCtxMenuAddToGroup" Header="Add to group" />
|
<MenuItem Name="entryCtxMenuAddToGroup" Header="Add to group" />
|
||||||
<MenuItem Name="entryCtxMenuRemoveFromGroup" Header="Remove from this group" Click="EntryContextMenuItem_Click" />
|
<MenuItem Name="entryCtxMenuRemoveFromGroup" Header="Remove from this group" Click="EntryContextMenuItem_Click" />
|
||||||
|
<MenuItem Name="entryCtxMenuAddToFavourites" Header="Add to Favourites" Click="EntryContextMenuItem_Click" />
|
||||||
|
<MenuItem Name="entryCtxMenuRemoveFromFavourites" Header="Remove from Favourites" Click="EntryContextMenuItem_Click" />
|
||||||
<MenuItem Name="entryCtxMenuDelete" Header="Delete" Click="EntryContextMenuItem_Click"/>
|
<MenuItem Name="entryCtxMenuDelete" Header="Delete" Click="EntryContextMenuItem_Click"/>
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</Border.ContextMenu>
|
</Border.ContextMenu>
|
||||||
|
|||||||
@@ -257,12 +257,37 @@ public partial class RepositoryWindow : Window
|
|||||||
.OfType<MenuItem>()
|
.OfType<MenuItem>()
|
||||||
.FirstOrDefault(m => m.Name == "entryCtxMenuRemoveFromGroup");
|
.FirstOrDefault(m => m.Name == "entryCtxMenuRemoveFromGroup");
|
||||||
|
|
||||||
|
var addToFavouritesItem = contextMenu.Items
|
||||||
|
.OfType<MenuItem>()
|
||||||
|
.FirstOrDefault(m => m.Name == "entryCtxMenuAddToFavourites");
|
||||||
|
|
||||||
|
var removeFromFavouritesItem = contextMenu.Items
|
||||||
|
.OfType<MenuItem>()
|
||||||
|
.FirstOrDefault(m => m.Name == "entryCtxMenuRemoveFromFavourites");
|
||||||
|
|
||||||
var isNonDefaultGroup = pageVm.SelectedPasswordGroup.GroupType != FileFormatConstants.GROUP_TYPE_DEFAULT;
|
var isNonDefaultGroup = pageVm.SelectedPasswordGroup.GroupType != FileFormatConstants.GROUP_TYPE_DEFAULT;
|
||||||
if (removeFromGroupItem != null)
|
if (removeFromGroupItem != null)
|
||||||
{
|
{
|
||||||
removeFromGroupItem.IsVisible = isNonDefaultGroup;
|
removeFromGroupItem.IsVisible = isNonDefaultGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if entry is in Favourites group
|
||||||
|
var favouritesGroup = pageVm.PasswordGroups.FirstOrDefault(g => g.GroupType == FileFormatConstants.GROUP_TYPE_FAVOURITES);
|
||||||
|
var isInFavourites = false;
|
||||||
|
if (favouritesGroup != null && _contextMenuEntry != null)
|
||||||
|
{
|
||||||
|
PassStoreEntryPassword? pwd = UnlockedRepositoryViewModel.FollowLinkIfNeeded(_contextMenuEntry);
|
||||||
|
if (pwd != null)
|
||||||
|
{
|
||||||
|
isInFavourites = pwd.Backlinks.Any(bl => bl is PassStoreEntryLink lnk && lnk.Parent == favouritesGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addToFavouritesItem != null)
|
||||||
|
addToFavouritesItem.IsVisible = !isInFavourites;
|
||||||
|
if (removeFromFavouritesItem != null)
|
||||||
|
removeFromFavouritesItem.IsVisible = isInFavourites;
|
||||||
|
|
||||||
if (addToGroupItem == null)
|
if (addToGroupItem == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -408,6 +433,28 @@ public partial class RepositoryWindow : Window
|
|||||||
this.FindControlRecursive<ToastNotificationHost>("NotificationHost")?.Show("Removed from group");
|
this.FindControlRecursive<ToastNotificationHost>("NotificationHost")?.Show("Removed from group");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (s.Name == "entryCtxMenuAddToFavourites")
|
||||||
|
{
|
||||||
|
if (DataContext is RepositoryWindowViewModel vm && vm.CurrentPage is UnlockedRepositoryViewModel pageVm)
|
||||||
|
{
|
||||||
|
var favouritesGroup = pageVm.PasswordGroups.FirstOrDefault(g => g.GroupType == FileFormatConstants.GROUP_TYPE_FAVOURITES);
|
||||||
|
if (favouritesGroup != null)
|
||||||
|
{
|
||||||
|
if (pageVm.AddEntryToGroup(ent, favouritesGroup))
|
||||||
|
this.FindControlRecursive<ToastNotificationHost>("NotificationHost")?.Show("Added to Favourites");
|
||||||
|
else
|
||||||
|
this.FindControlRecursive<ToastNotificationHost>("NotificationHost")?.Show("Already in Favourites");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (s.Name == "entryCtxMenuRemoveFromFavourites")
|
||||||
|
{
|
||||||
|
if (DataContext is RepositoryWindowViewModel vm && vm.CurrentPage is UnlockedRepositoryViewModel pageVm)
|
||||||
|
{
|
||||||
|
pageVm.RemoveEntryFromFavourites(ent);
|
||||||
|
this.FindControlRecursive<ToastNotificationHost>("NotificationHost")?.Show("Removed from Favourites");
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (s.Name == "entryCtxMenuDelete")
|
else if (s.Name == "entryCtxMenuDelete")
|
||||||
{
|
{
|
||||||
if (DataContext is RepositoryWindowViewModel vm && vm.CurrentPage is UnlockedRepositoryViewModel pageVm)
|
if (DataContext is RepositoryWindowViewModel vm && vm.CurrentPage is UnlockedRepositoryViewModel pageVm)
|
||||||
|
|||||||
Reference in New Issue
Block a user