mpd: fix root directory handling with MPD >= 0.20
This commit is contained in:
@@ -30,6 +30,16 @@ MPD::Connection Mpd;
|
|||||||
|
|
||||||
namespace {
|
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>
|
template <typename ObjectT, typename SourceT>
|
||||||
std::function<bool(typename MPD::Iterator<ObjectT>::State &)>
|
std::function<bool(typename MPD::Iterator<ObjectT>::State &)>
|
||||||
defaultFetcher(SourceT *(fetcher)(mpd_connection *))
|
defaultFetcher(SourceT *(fetcher)(mpd_connection *))
|
||||||
@@ -739,7 +749,7 @@ SongIterator Connection::CommitSearchSongs()
|
|||||||
ItemIterator Connection::GetDirectory(const std::string &directory)
|
ItemIterator Connection::GetDirectory(const std::string &directory)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
prechecksNoCommandsList();
|
||||||
mpd_send_list_meta(m_connection.get(), directory.c_str());
|
mpd_send_list_meta(m_connection.get(), mpdDirectory(directory));
|
||||||
checkErrors();
|
checkErrors();
|
||||||
return ItemIterator(m_connection.get(), defaultFetcher<Item>(mpd_recv_entity));
|
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)
|
SongIterator Connection::GetDirectoryRecursive(const std::string &directory)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
prechecksNoCommandsList();
|
||||||
mpd_send_list_all_meta(m_connection.get(), directory.c_str());
|
mpd_send_list_all_meta(m_connection.get(), mpdDirectory(directory));
|
||||||
checkErrors();
|
checkErrors();
|
||||||
return SongIterator(m_connection.get(), fetchItemSong);
|
return SongIterator(m_connection.get(), fetchItemSong);
|
||||||
}
|
}
|
||||||
@@ -755,7 +765,7 @@ SongIterator Connection::GetDirectoryRecursive(const std::string &directory)
|
|||||||
DirectoryIterator Connection::GetDirectories(const std::string &directory)
|
DirectoryIterator Connection::GetDirectories(const std::string &directory)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
prechecksNoCommandsList();
|
||||||
mpd_send_list_meta(m_connection.get(), directory.c_str());
|
mpd_send_list_meta(m_connection.get(), mpdDirectory(directory));
|
||||||
checkErrors();
|
checkErrors();
|
||||||
return DirectoryIterator(m_connection.get(), defaultFetcher<Directory>(mpd_recv_directory));
|
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)
|
SongIterator Connection::GetSongs(const std::string &directory)
|
||||||
{
|
{
|
||||||
prechecksNoCommandsList();
|
prechecksNoCommandsList();
|
||||||
mpd_send_list_meta(m_connection.get(), directory.c_str());
|
mpd_send_list_meta(m_connection.get(), mpdDirectory(directory));
|
||||||
checkErrors();
|
checkErrors();
|
||||||
return SongIterator(m_connection.get(), defaultFetcher<Song>(mpd_recv_song));
|
return SongIterator(m_connection.get(), defaultFetcher<Song>(mpd_recv_song));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user