diff --git a/src/ui/contextmenu.rs b/src/ui/contextmenu.rs index e8f4a61..1fa0cd4 100644 --- a/src/ui/contextmenu.rs +++ b/src/ui/contextmenu.rs @@ -9,6 +9,7 @@ use crate::library::Library; use crate::queue::Queue; use crate::track::Track; use crate::traits::{ListItem, ViewExt}; +use crate::playable::Playable; use crate::ui::layout::Layout; use crate::ui::modal::Modal; use crate::{ @@ -29,6 +30,7 @@ enum ContextMenuAction { ShareUrl(String), AddToPlaylist(Box), ShowRecommentations(Box), + ToggleTrackSavedStatus(Box), } impl ContextMenu { @@ -110,8 +112,15 @@ impl ContextMenu { ); content.add_item( "Similar tracks", - ContextMenuAction::ShowRecommentations(Box::new(t)), + ContextMenuAction::ShowRecommentations(Box::new(t.clone())), ); + content.add_item( + match library.is_saved_track(&Playable::Track(t.clone())) { + true => "Unsave track", + false => "Save track", + }, + ContextMenuAction::ToggleTrackSavedStatus(Box::new(t.clone())), + ) } // open detail view of artist/album @@ -142,6 +151,10 @@ impl ContextMenu { s.call_on_name("main", move |v: &mut Layout| v.push_view(view)); } } + ContextMenuAction::ToggleTrackSavedStatus(track) => { + let mut track: Track = *track.clone(); + track.toggle_saved(library); + } } });