diff --git a/src/command.rs b/src/command.rs index e8d61d7..2ea2968 100644 --- a/src/command.rs +++ b/src/command.rs @@ -132,6 +132,7 @@ pub enum Command { Play, UpdateLibrary, Save, + SaveCurrent, SaveQueue, Delete, Focus(String), @@ -213,6 +214,7 @@ impl fmt::Display for Command { | Command::Play | Command::UpdateLibrary | Command::Save + | Command::SaveCurrent | Command::SaveQueue | Command::Delete | Command::Back @@ -242,6 +244,7 @@ impl Command { Command::Play => "play", Command::UpdateLibrary => "update", Command::Save => "save", + Command::SaveCurrent => "save current", Command::SaveQueue => "save queue", Command::Delete => "delete", Command::Focus(_) => "focus", @@ -388,6 +391,7 @@ pub fn parse(input: &str) -> Result, CommandParseError> { "update" => Command::UpdateLibrary, "save" => match args.first().cloned() { Some("queue") => Ok(Command::SaveQueue), + Some("current") => Ok(Command::SaveCurrent), Some(arg) => Err(BadEnumArg { arg: arg.into(), accept: vec!["**omit**".into(), "queue".into()], diff --git a/src/commands.rs b/src/commands.rs index 34c5814..99fa94b 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -12,7 +12,7 @@ use crate::ext_traits::CursiveExt; use crate::library::Library; use crate::queue::{Queue, RepeatSetting}; use crate::spotify::{Spotify, VOLUME_PERCENT}; -use crate::traits::{IntoBoxedViewExt, ViewExt}; +use crate::traits::{IntoBoxedViewExt, ListItem, ViewExt}; use crate::ui::contextmenu::{ AddToPlaylistMenu, ContextMenu, SelectArtistActionMenu, SelectArtistMenu, }; @@ -272,6 +272,12 @@ impl CommandManager { self.spotify.shutdown(); Ok(None) } + Command::SaveCurrent => { + if let Some(mut track) = self.queue.get_current() { + track.save(&self.library); + } + Ok(None) + } Command::Queue | Command::PlayNext