mpd: fix root directory handling in MPD >= 0.20
This commit is contained in:
3
NEWS
3
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.
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user