mpd: fix root directory handling with MPD >= 0.20
This commit is contained in:
@@ -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 <typename ObjectT, typename SourceT>
|
||||
std::function<bool(typename MPD::Iterator<ObjectT>::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<Item>(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<Directory>(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<Song>(mpd_recv_song));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user