diff --git a/src/mpdpp.cpp b/src/mpdpp.cpp index 4d44d6af..25fb85b2 100644 --- a/src/mpdpp.cpp +++ b/src/mpdpp.cpp @@ -469,6 +469,27 @@ void MPDConnection::CommitQueue() itsQueue.clear(); } +void MPDConnection::DeletePlaylist(const string &name) +{ + if (isConnected) + { + mpd_sendRmCommand(itsConnection, name.c_str()); + mpd_finishCommand(itsConnection); + } +} + +bool MPDConnection::SavePlaylist(const string &name) +{ + if (isConnected) + { + mpd_sendSaveCommand(itsConnection, name.c_str()); + mpd_finishCommand(itsConnection); + return !(itsConnection->error == MPD_ERROR_ACK && itsConnection->errorCode == MPD_ACK_ERROR_EXIST); + } + else + return 0; +} + void MPDConnection::GetArtists(TagList &v) const { if (isConnected) diff --git a/src/mpdpp.h b/src/mpdpp.h index 1edb033a..9d3823f9 100644 --- a/src/mpdpp.h +++ b/src/mpdpp.h @@ -137,6 +137,9 @@ class MPDConnection void QueueDeleteSongId(int); void CommitQueue(); + void DeletePlaylist(const string &); + bool SavePlaylist(const string &); + void StartSearch(bool) const; void AddSearch(mpd_TagItems, const string &) const; void CommitSearch(SongList &v) const; diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index 1e20883d..2209d5d3 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -490,7 +490,8 @@ int main(int argc, char *argv[]) if (input == KEY_UP || input == KEY_DOWN || input == KEY_PPAGE || input == KEY_NPAGE || input == KEY_HOME || input == KEY_END) { if (wCurrent == mLibArtists) - { mLibAlbums->Reset(); + { + mLibAlbums->Reset(); mLibSongs->Reset(); } if (wCurrent == mLibAlbums) @@ -1217,7 +1218,7 @@ int main(int argc, char *argv[]) block_statusbar_update = 0; if (in == 'y') { - //mpd_database_delete_playlist(conn, (char *) vBrowser[id].name.c_str()); + Mpd->DeletePlaylist(vBrowser[id].name); ShowMessage("Playlist " + vBrowser[id].name + " deleted!"); GetDirectory("/"); } @@ -1244,12 +1245,11 @@ int main(int argc, char *argv[]) Mpd->Pause(); break; } - /*case 'S': // save playlist + case 'S': // save playlist { - string playlist_name; BLOCK_STATUSBAR_UPDATE; wFooter->WriteXY(0, Config.statusbar_visibility, "Save playlist as: ", 1); - playlist_name = wFooter->GetString("", TraceMpdStatus); + string playlist_name = wFooter->GetString("", TraceMpdStatus); UNBLOCK_STATUSBAR_UPDATE; if (playlist_name.find("/") != string::npos) { @@ -1258,20 +1258,15 @@ int main(int argc, char *argv[]) } if (!playlist_name.empty()) { - switch (mpd_database_save_playlist(conn, (char *) playlist_name.c_str())) - { - case MPD_OK: - ShowMessage("Playlist saved as: " + playlist_name); - break; - case MPD_DATABASE_PLAYLIST_EXIST: - ShowMessage("Playlist already exists!"); - break; - } + if (Mpd->SavePlaylist(playlist_name)) + ShowMessage("Playlist saved as: " + playlist_name); + else + ShowMessage("Playlist already exists!"); } if (browsed_dir == "/" && !vBrowser.empty()) GetDirectory(browsed_dir); break; - }*/ + } case 's': // stop { Mpd->Stop(); diff --git a/src/status_checker.cpp b/src/status_checker.cpp index 94d6cfc6..ef4ae24d 100644 --- a/src/status_checker.cpp +++ b/src/status_checker.cpp @@ -451,6 +451,7 @@ void NcmpcppStatusChanged(MPDConnection *Mpd, MPDStatusChanges changed, void *da wFooter->Refresh(); wFooter->AutoRefresh(1); wFooter->EnableBB(); - wCurrent->Refresh(); + if (changed.SongID || changed.PlayerState) + wCurrent->Refresh(); }