mpd: fix root directory handling in MPD >= 0.20

This commit is contained in:
Andrzej Rybczak
2015-11-11 22:49:20 +01:00
parent c4e1cd6e2c
commit 5d13934fed
2 changed files with 21 additions and 4 deletions

3
NEWS
View File

@@ -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.

View File

@@ -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);