From ca8f346ca20ae40f8d98fe5e4faa6894c7715087 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Wed, 11 Nov 2015 22:41:02 +0100 Subject: [PATCH] mpd: fix root directory handling with MPD >= 0.20 --- src/mpdpp.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/mpdpp.cpp b/src/mpdpp.cpp index 8eca2480..098bf82e 100644 --- a/src/mpdpp.cpp +++ b/src/mpdpp.cpp @@ -30,6 +30,16 @@ 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(); +} + template std::function::State &)> defaultFetcher(SourceT *(fetcher)(mpd_connection *)) @@ -739,7 +749,7 @@ SongIterator Connection::CommitSearchSongs() ItemIterator Connection::GetDirectory(const std::string &directory) { prechecksNoCommandsList(); - mpd_send_list_meta(m_connection.get(), directory.c_str()); + mpd_send_list_meta(m_connection.get(), mpdDirectory(directory)); checkErrors(); return ItemIterator(m_connection.get(), defaultFetcher(mpd_recv_entity)); } @@ -747,7 +757,7 @@ ItemIterator Connection::GetDirectory(const std::string &directory) SongIterator Connection::GetDirectoryRecursive(const std::string &directory) { prechecksNoCommandsList(); - mpd_send_list_all_meta(m_connection.get(), directory.c_str()); + mpd_send_list_all_meta(m_connection.get(), mpdDirectory(directory)); checkErrors(); return SongIterator(m_connection.get(), fetchItemSong); } @@ -755,7 +765,7 @@ SongIterator Connection::GetDirectoryRecursive(const std::string &directory) DirectoryIterator Connection::GetDirectories(const std::string &directory) { prechecksNoCommandsList(); - mpd_send_list_meta(m_connection.get(), directory.c_str()); + mpd_send_list_meta(m_connection.get(), mpdDirectory(directory)); checkErrors(); return DirectoryIterator(m_connection.get(), defaultFetcher(mpd_recv_directory)); } @@ -763,7 +773,7 @@ DirectoryIterator Connection::GetDirectories(const std::string &directory) SongIterator Connection::GetSongs(const std::string &directory) { prechecksNoCommandsList(); - mpd_send_list_meta(m_connection.get(), directory.c_str()); + mpd_send_list_meta(m_connection.get(), mpdDirectory(directory)); checkErrors(); return SongIterator(m_connection.get(), defaultFetcher(mpd_recv_song)); }