diff --git a/src/actions.cpp b/src/actions.cpp index 5a7ee7a0..94afe8e1 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -1814,6 +1814,8 @@ void AddSelectedItems::Run() void CropMainPlaylist::Run() { + if (myPlaylist->isFiltered()) + return; bool yes = true; if (Config.ask_before_clearing_main_playlist) yes = AskYesNoQuestion("Do you really want to crop main playlist?", TraceMpdStatus); @@ -1848,9 +1850,8 @@ bool CropPlaylist::canBeRun() const void CropPlaylist::Run() { - if (myPlaylistEditor->Playlists->Empty()) + if (myPlaylistEditor->Playlists->Empty() || myPlaylistEditor->isContentFiltered()) return; - bool yes = true; if (Config.ask_before_clearing_main_playlist) yes = AskYesNoQuestion("Do you really want to crop playlist \"" + myPlaylistEditor->Playlists->Current() + "\"?", TraceMpdStatus); @@ -1909,29 +1910,17 @@ bool ClearPlaylist::canBeRun() const void ClearPlaylist::Run() { - if (myPlaylistEditor->Playlists->Empty()) + if (myPlaylistEditor->Playlists->Empty() || myPlaylistEditor->isContentFiltered()) return; - // OMGPLZ bool yes = true; if (Config.ask_before_clearing_main_playlist) yes = AskYesNoQuestion("Do you really want to clear playlist \"" + myPlaylistEditor->Playlists->Current() + "\"?", TraceMpdStatus); if (yes) { - if (myPlaylistEditor->Content->isFiltered()) - { - std::string playlist = locale_to_utf_cpy(myPlaylistEditor->Playlists->Current()); - ShowMessage("Deleting filtered items from playlist \"%s\"...", myPlaylistEditor->Playlists->Current().c_str()); - Mpd.StartCommandsList(); - for (int i = myPlaylistEditor->Content->Size()-1; i >= 0; --i) - Mpd.Delete(playlist, (*myPlaylistEditor->Content)[i].GetPosition()); - if (Mpd.CommitCommandsList()) - ShowMessage("Filtered items deleted from playlist \"%s\"", myPlaylistEditor->Playlists->Current().c_str()); - } - else - { - ShowMessage("Clearing playlist..."); - Mpd.ClearPlaylist(locale_to_utf_cpy(myPlaylistEditor->Playlists->Current())); - } + + ShowMessage("Clearing playlist \"%s\"...", myPlaylistEditor->Playlists->Current().c_str()); + if (Mpd.ClearPlaylist(locale_to_utf_cpy(myPlaylistEditor->Playlists->Current()))) + ShowMessage("Playlist \"%s\" cleared", myPlaylistEditor->Playlists->Current().c_str()); } } diff --git a/src/help.cpp b/src/help.cpp index 9d34203a..e461cfd7 100644 --- a/src/help.cpp +++ b/src/help.cpp @@ -268,7 +268,7 @@ void Help::GetKeybindings() KeyDesc(aPressEnter, "Play selected item"); KeyDesc(aDelete, "Delete selected item(s) from playlist"); KeyDesc(aClearMainPlaylist, "Clear playlist"); - KeyDesc(aCropMainPlaylist, "Clear playlist except playing/selected items"); + KeyDesc(aCropMainPlaylist, "Clear playlist except selected item(s)"); KeyDesc(aSetSelectedItemsPriority, "Set priority of selected items"); KeyDesc(aMoveSelectedItemsUp, "Move selected item(s) up"); KeyDesc(aMoveSelectedItemsDown, "Move selected item(s) down"); diff --git a/src/mpdpp.cpp b/src/mpdpp.cpp index 4d19ab57..858c9b58 100644 --- a/src/mpdpp.cpp +++ b/src/mpdpp.cpp @@ -551,18 +551,18 @@ bool MPD::Connection::ClearPlaylist() } } -void MPD::Connection::ClearPlaylist(const std::string &playlist) +bool MPD::Connection::ClearPlaylist(const std::string &playlist) { if (!itsConnection) - return; + return false; if (!isCommandsListEnabled) { GoBusy(); - mpd_run_playlist_clear(itsConnection, playlist.c_str()); + return mpd_run_playlist_clear(itsConnection, playlist.c_str()); } else { - mpd_send_playlist_clear(itsConnection, playlist.c_str()); + return mpd_send_playlist_clear(itsConnection, playlist.c_str()); assert(!isIdle); } } diff --git a/src/mpdpp.h b/src/mpdpp.h index 0a569378..70a07ccb 100644 --- a/src/mpdpp.h +++ b/src/mpdpp.h @@ -190,7 +190,7 @@ namespace MPD bool DeletePlaylist(const std::string &); bool LoadPlaylist(const std::string &name); int SavePlaylist(const std::string &); - void ClearPlaylist(const std::string &); + bool ClearPlaylist(const std::string &); void AddToPlaylist(const std::string &, const Song &); void AddToPlaylist(const std::string &, const std::string &); bool Move(const std::string &, int, int); diff --git a/src/playlist_editor.cpp b/src/playlist_editor.cpp index 2c83a5c3..4597f798 100644 --- a/src/playlist_editor.cpp +++ b/src/playlist_editor.cpp @@ -273,6 +273,17 @@ void PlaylistEditor::MoveSelectedItems(Playlist::Movement where) } } +bool PlaylistEditor::isContentFiltered() +{ + if (Content->isFiltered()) + { + ShowMessage("Function currently unavailable due to filtered playlist content"); + return true; + } + return false; +} + + bool PlaylistEditor::isNextColumnAvailable() { if (w == Playlists) diff --git a/src/playlist_editor.h b/src/playlist_editor.h index 243c8aa4..31d0e245 100644 --- a/src/playlist_editor.h +++ b/src/playlist_editor.h @@ -57,6 +57,7 @@ class PlaylistEditor : public Screen void MoveSelectedItems(Playlist::Movement where); + bool isContentFiltered(); bool isNextColumnAvailable(); bool NextColumn(); bool isPrevColumnAvailable();