mirror of
https://github.com/KeyKeeperApp/KeyKeeper.git
synced 2026-05-18 22:36:30 +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));
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
passStore.UpdateEntry(null, updatedEntry.Id, updatedEntry);
|
||||
|
||||
@@ -169,6 +169,8 @@
|
||||
<MenuItem Name="entryCtxMenuEdit" Header="Edit" Click="EntryContextMenuItem_Click"/>
|
||||
<MenuItem Name="entryCtxMenuAddToGroup" Header="Add to group" />
|
||||
<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"/>
|
||||
</ContextMenu>
|
||||
</Border.ContextMenu>
|
||||
|
||||
@@ -257,12 +257,37 @@ public partial class RepositoryWindow : Window
|
||||
.OfType<MenuItem>()
|
||||
.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;
|
||||
if (removeFromGroupItem != null)
|
||||
{
|
||||
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)
|
||||
return;
|
||||
|
||||
@@ -408,6 +433,28 @@ public partial class RepositoryWindow : Window
|
||||
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")
|
||||
{
|
||||
if (DataContext is RepositoryWindowViewModel vm && vm.CurrentPage is UnlockedRepositoryViewModel pageVm)
|
||||
|
||||
Reference in New Issue
Block a user