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)
|
ncmpcpp-0.6.7 (2015-09-12)
|
||||||
* Fetching artist info from last.fm was fixed.
|
* Fetching artist info from last.fm was fixed.
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,20 @@
|
|||||||
|
|
||||||
MPD::Connection Mpd;
|
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 {//
|
namespace MPD {//
|
||||||
|
|
||||||
Connection::Connection() : m_connection(nullptr),
|
Connection::Connection() : m_connection(nullptr),
|
||||||
@@ -694,7 +708,7 @@ void Connection::CommitSearchTags(StringConsumer f)
|
|||||||
void Connection::GetDirectory(const std::string &directory, ItemConsumer f)
|
void Connection::GetDirectory(const std::string &directory, ItemConsumer f)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
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))
|
while (mpd_entity *item = mpd_recv_entity(m_connection))
|
||||||
{
|
{
|
||||||
Item it;
|
Item it;
|
||||||
@@ -725,7 +739,7 @@ void Connection::GetDirectory(const std::string &directory, ItemConsumer f)
|
|||||||
void Connection::GetDirectoryRecursive(const std::string &directory, SongConsumer f)
|
void Connection::GetDirectoryRecursive(const std::string &directory, SongConsumer f)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
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)) {
|
while (mpd_entity *e = mpd_recv_entity(m_connection)) {
|
||||||
if (mpd_entity_get_type(e) == MPD_ENTITY_TYPE_SONG)
|
if (mpd_entity_get_type(e) == MPD_ENTITY_TYPE_SONG)
|
||||||
f(Song(mpd_song_dup(mpd_entity_get_song(e))));
|
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)
|
void Connection::GetDirectories(const std::string &directory, StringConsumer f)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
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))
|
while (mpd_directory *dir = mpd_recv_directory(m_connection))
|
||||||
{
|
{
|
||||||
f(std::string(mpd_directory_get_path(dir)));
|
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)
|
void Connection::GetSongs(const std::string &directory, SongConsumer f)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
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))
|
while (mpd_song *s = mpd_recv_song(m_connection))
|
||||||
f(Song(s));
|
f(Song(s));
|
||||||
mpd_response_finish(m_connection);
|
mpd_response_finish(m_connection);
|
||||||
|
|||||||
Reference in New Issue
Block a user