From 5d13934fede8e3feb1d86830b6d1cb985608b1c3 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Wed, 11 Nov 2015 22:49:20 +0100 Subject: [PATCH] mpd: fix root directory handling in MPD >= 0.20 --- NEWS | 3 +++ src/mpdpp.cpp | 22 ++++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 142bbce8..a29769a9 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,6 @@ +ncmpcpp-0.6.8 (????-??-??) +* Application is now compatible with MPD >= 0.20. + ncmpcpp-0.6.7 (2015-09-12) * Fetching artist info from last.fm was fixed. diff --git a/src/mpdpp.cpp b/src/mpdpp.cpp index b715e0f3..ab3d2d1d 100644 --- a/src/mpdpp.cpp +++ b/src/mpdpp.cpp @@ -29,6 +29,20 @@ MPD::Connection Mpd; +namespace { + +const char *mpdDirectory(const std::string &directory) +{ + // MPD <= 0.19 accepts "/" for a root directory whereas later + // versions do not, so provide a compatibility layer. + if (directory == "/") + return ""; + else + return directory.c_str(); +} + +} + namespace MPD {// Connection::Connection() : m_connection(nullptr), @@ -694,7 +708,7 @@ void Connection::CommitSearchTags(StringConsumer f) void Connection::GetDirectory(const std::string &directory, ItemConsumer f) { prechecksNoCommandsList(); - mpd_send_list_meta(m_connection, directory.c_str()); + mpd_send_list_meta(m_connection, mpdDirectory(directory)); while (mpd_entity *item = mpd_recv_entity(m_connection)) { Item it; @@ -725,7 +739,7 @@ void Connection::GetDirectory(const std::string &directory, ItemConsumer f) void Connection::GetDirectoryRecursive(const std::string &directory, SongConsumer f) { prechecksNoCommandsList(); - mpd_send_list_all_meta(m_connection, directory.c_str()); + mpd_send_list_all_meta(m_connection, mpdDirectory(directory)); while (mpd_entity *e = mpd_recv_entity(m_connection)) { if (mpd_entity_get_type(e) == MPD_ENTITY_TYPE_SONG) f(Song(mpd_song_dup(mpd_entity_get_song(e)))); @@ -738,7 +752,7 @@ void Connection::GetDirectoryRecursive(const std::string &directory, SongConsume void Connection::GetDirectories(const std::string &directory, StringConsumer f) { prechecksNoCommandsList(); - mpd_send_list_meta(m_connection, directory.c_str()); + mpd_send_list_meta(m_connection, mpdDirectory(directory)); while (mpd_directory *dir = mpd_recv_directory(m_connection)) { f(std::string(mpd_directory_get_path(dir))); @@ -751,7 +765,7 @@ void Connection::GetDirectories(const std::string &directory, StringConsumer f) void Connection::GetSongs(const std::string &directory, SongConsumer f) { prechecksNoCommandsList(); - mpd_send_list_meta(m_connection, directory.c_str()); + mpd_send_list_meta(m_connection, mpdDirectory(directory)); while (mpd_song *s = mpd_recv_song(m_connection)) f(Song(s)); mpd_response_finish(m_connection);