mpd: make ItemType enum class
This commit is contained in:
@@ -675,7 +675,7 @@ void DeleteBrowserItems::run()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
MPD::Item &item = myBrowser->main().current().value();
|
MPD::Item &item = myBrowser->main().current().value();
|
||||||
std::string iname = item.type == MPD::itSong ? item.song.getName() : item.name;
|
std::string iname = item.type == MPD::Item::Type::Song ? item.song.getName() : item.name;
|
||||||
question = boost::format("Delete %1% \"%2%\"?")
|
question = boost::format("Delete %1% \"%2%\"?")
|
||||||
% itemTypeToString(item.type) % wideShorten(iname, COLS-question.size()-10);
|
% itemTypeToString(item.type) % wideShorten(iname, COLS-question.size()-10);
|
||||||
}
|
}
|
||||||
@@ -689,7 +689,7 @@ void DeleteBrowserItems::run()
|
|||||||
for (const auto &item : list)
|
for (const auto &item : list)
|
||||||
{
|
{
|
||||||
const MPD::Item &i = item->value();
|
const MPD::Item &i = item->value();
|
||||||
std::string iname = i.type == MPD::itSong ? i.song.getName() : i.name;
|
std::string iname = i.type == MPD::Item::Type::Song ? i.song.getName() : i.name;
|
||||||
std::string errmsg;
|
std::string errmsg;
|
||||||
if (myBrowser->deleteItem(i, errmsg))
|
if (myBrowser->deleteItem(i, errmsg))
|
||||||
{
|
{
|
||||||
@@ -1413,7 +1413,7 @@ bool EditDirectoryName::canBeRun() const
|
|||||||
{
|
{
|
||||||
return ((myScreen == myBrowser
|
return ((myScreen == myBrowser
|
||||||
&& !myBrowser->main().empty()
|
&& !myBrowser->main().empty()
|
||||||
&& myBrowser->main().current().value().type == MPD::itDirectory)
|
&& myBrowser->main().current().value().type == MPD::Item::Type::Directory)
|
||||||
# ifdef HAVE_TAGLIB_H
|
# ifdef HAVE_TAGLIB_H
|
||||||
|| (myScreen->activeWindow() == myTagEditor->Dirs
|
|| (myScreen->activeWindow() == myTagEditor->Dirs
|
||||||
&& !myTagEditor->Dirs->empty()
|
&& !myTagEditor->Dirs->empty()
|
||||||
@@ -1495,7 +1495,7 @@ bool EditPlaylistName::canBeRun() const
|
|||||||
&& !myPlaylistEditor->Playlists.empty())
|
&& !myPlaylistEditor->Playlists.empty())
|
||||||
|| (myScreen == myBrowser
|
|| (myScreen == myBrowser
|
||||||
&& !myBrowser->main().empty()
|
&& !myBrowser->main().empty()
|
||||||
&& myBrowser->main().current().value().type == MPD::itPlaylist);
|
&& myBrowser->main().current().value().type == MPD::Item::Type::Playlist);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditPlaylistName::run()
|
void EditPlaylistName::run()
|
||||||
@@ -1557,7 +1557,7 @@ void JumpToMediaLibrary::run()
|
|||||||
bool JumpToPlaylistEditor::canBeRun() const
|
bool JumpToPlaylistEditor::canBeRun() const
|
||||||
{
|
{
|
||||||
return myScreen == myBrowser
|
return myScreen == myBrowser
|
||||||
&& myBrowser->main().current().value().type == MPD::itPlaylist;
|
&& myBrowser->main().current().value().type == MPD::Item::Type::Playlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JumpToPlaylistEditor::run()
|
void JumpToPlaylistEditor::run()
|
||||||
|
|||||||
@@ -46,10 +46,6 @@ using Global::MainHeight;
|
|||||||
using Global::MainStartY;
|
using Global::MainStartY;
|
||||||
using Global::myScreen;
|
using Global::myScreen;
|
||||||
|
|
||||||
using MPD::itDirectory;
|
|
||||||
using MPD::itSong;
|
|
||||||
using MPD::itPlaylist;
|
|
||||||
|
|
||||||
namespace fs = boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
Browser *myBrowser;
|
Browser *myBrowser;
|
||||||
@@ -123,7 +119,7 @@ void Browser::enterPressed()
|
|||||||
const MPD::Item &item = w.current().value();
|
const MPD::Item &item = w.current().value();
|
||||||
switch (item.type)
|
switch (item.type)
|
||||||
{
|
{
|
||||||
case itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
{
|
{
|
||||||
if (isParentDirectory(item))
|
if (isParentDirectory(item))
|
||||||
GetDirectory(getParentDirectory(itsBrowsedDir), itsBrowsedDir);
|
GetDirectory(getParentDirectory(itsBrowsedDir), itsBrowsedDir);
|
||||||
@@ -132,12 +128,12 @@ void Browser::enterPressed()
|
|||||||
drawHeader();
|
drawHeader();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case itSong:
|
case MPD::Item::Type::Song:
|
||||||
{
|
{
|
||||||
addSongToPlaylist(item.song, true, -1);
|
addSongToPlaylist(item.song, true, -1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
{
|
{
|
||||||
MPD::SongList list(
|
MPD::SongList list(
|
||||||
std::make_move_iterator(Mpd.GetPlaylistContentNoInfo(item.name)),
|
std::make_move_iterator(Mpd.GetPlaylistContentNoInfo(item.name)),
|
||||||
@@ -172,7 +168,7 @@ void Browser::spacePressed()
|
|||||||
|
|
||||||
switch (item.type)
|
switch (item.type)
|
||||||
{
|
{
|
||||||
case itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
{
|
{
|
||||||
bool success;
|
bool success;
|
||||||
# ifndef WIN32
|
# ifndef WIN32
|
||||||
@@ -198,12 +194,12 @@ void Browser::spacePressed()
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case itSong:
|
case MPD::Item::Type::Song:
|
||||||
{
|
{
|
||||||
addSongToPlaylist(item.song, false);
|
addSongToPlaylist(item.song, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
{
|
{
|
||||||
Mpd.LoadPlaylist(item.name);
|
Mpd.LoadPlaylist(item.name);
|
||||||
Statusbar::printf("Playlist \"%1%\" loaded", item.name);
|
Statusbar::printf("Playlist \"%1%\" loaded", item.name);
|
||||||
@@ -222,7 +218,7 @@ void Browser::mouseButtonPressed(MEVENT me)
|
|||||||
w.Goto(me.y);
|
w.Goto(me.y);
|
||||||
switch (w.current().value().type)
|
switch (w.current().value().type)
|
||||||
{
|
{
|
||||||
case itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
if (me.bstate & BUTTON1_PRESSED)
|
if (me.bstate & BUTTON1_PRESSED)
|
||||||
{
|
{
|
||||||
GetDirectory(w.current().value().name);
|
GetDirectory(w.current().value().name);
|
||||||
@@ -236,8 +232,8 @@ void Browser::mouseButtonPressed(MEVENT me)
|
|||||||
w.scroll(NC::Scroll::Up);
|
w.scroll(NC::Scroll::Up);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
case itSong:
|
case MPD::Item::Type::Song:
|
||||||
if (me.bstate & BUTTON1_PRESSED)
|
if (me.bstate & BUTTON1_PRESSED)
|
||||||
{
|
{
|
||||||
size_t pos = w.choice();
|
size_t pos = w.choice();
|
||||||
@@ -328,7 +324,7 @@ ProxySongList Browser::proxySongList()
|
|||||||
{
|
{
|
||||||
return ProxySongList(w, [](NC::Menu<MPD::Item>::Item &item) -> MPD::Song * {
|
return ProxySongList(w, [](NC::Menu<MPD::Item>::Item &item) -> MPD::Song * {
|
||||||
MPD::Song *ptr = 0;
|
MPD::Song *ptr = 0;
|
||||||
if (item.value().type == itSong)
|
if (item.value().type == MPD::Item::Type::Song)
|
||||||
ptr = &item.value().song;
|
ptr = &item.value().song;
|
||||||
return ptr;
|
return ptr;
|
||||||
});
|
});
|
||||||
@@ -348,7 +344,7 @@ MPD::SongList Browser::getSelectedSongs()
|
|||||||
{
|
{
|
||||||
MPD::SongList result;
|
MPD::SongList result;
|
||||||
auto item_handler = [this, &result](const MPD::Item &item) {
|
auto item_handler = [this, &result](const MPD::Item &item) {
|
||||||
if (item.type == itDirectory)
|
if (item.type == MPD::Item::Type::Directory)
|
||||||
{
|
{
|
||||||
# ifndef WIN32
|
# ifndef WIN32
|
||||||
if (isLocal())
|
if (isLocal())
|
||||||
@@ -364,9 +360,9 @@ MPD::SongList Browser::getSelectedSongs()
|
|||||||
Mpd.GetDirectoryRecursive(item.name, vectorMoveInserter(result));
|
Mpd.GetDirectoryRecursive(item.name, vectorMoveInserter(result));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (item.type == itSong)
|
else if (item.type == MPD::Item::Type::Song)
|
||||||
result.push_back(item.song);
|
result.push_back(item.song);
|
||||||
else if (item.type == itPlaylist)
|
else if (item.type == MPD::Item::Type::Playlist)
|
||||||
{
|
{
|
||||||
std::copy(
|
std::copy(
|
||||||
std::make_move_iterator(Mpd.GetPlaylistContent(item.name)),
|
std::make_move_iterator(Mpd.GetPlaylistContent(item.name)),
|
||||||
@@ -404,7 +400,7 @@ void Browser::LocateSong(const MPD::Song &s)
|
|||||||
GetDirectory(s.getDirectory());
|
GetDirectory(s.getDirectory());
|
||||||
for (size_t i = 0; i < w.size(); ++i)
|
for (size_t i = 0; i < w.size(); ++i)
|
||||||
{
|
{
|
||||||
if (w[i].value().type == itSong && s == w[i].value().song)
|
if (w[i].value().type == MPD::Item::Type::Song && s == w[i].value().song)
|
||||||
{
|
{
|
||||||
w.highlight(i);
|
w.highlight(i);
|
||||||
break;
|
break;
|
||||||
@@ -430,7 +426,7 @@ void Browser::GetDirectory(std::string dir, std::string subdir)
|
|||||||
{
|
{
|
||||||
MPD::Item parent;
|
MPD::Item parent;
|
||||||
parent.name = "..";
|
parent.name = "..";
|
||||||
parent.type = itDirectory;
|
parent.type = MPD::Item::Type::Directory;
|
||||||
w.addItem(parent);
|
w.addItem(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -452,19 +448,19 @@ void Browser::GetDirectory(std::string dir, std::string subdir)
|
|||||||
{
|
{
|
||||||
switch (it->type)
|
switch (it->type)
|
||||||
{
|
{
|
||||||
case itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
{
|
{
|
||||||
w.addItem(*it);
|
w.addItem(*it);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
{
|
{
|
||||||
if (it->name == subdir)
|
if (it->name == subdir)
|
||||||
highlightme = w.size();
|
highlightme = w.size();
|
||||||
w.addItem(*it);
|
w.addItem(*it);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case itSong:
|
case MPD::Item::Type::Song:
|
||||||
{
|
{
|
||||||
w.addItem(*it, myPlaylist->checkForSong(it->song));
|
w.addItem(*it, myPlaylist->checkForSong(it->song));
|
||||||
break;
|
break;
|
||||||
@@ -493,14 +489,14 @@ void Browser::GetLocalDirectory(MPD::ItemList &v, const std::string &directory,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
item.type = itDirectory;
|
item.type = MPD::Item::Type::Directory;
|
||||||
item.name = e.path().native();
|
item.name = e.path().native();
|
||||||
v.push_back(item);
|
v.push_back(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (hasSupportedExtension(e.path().native()))
|
else if (hasSupportedExtension(e.path().native()))
|
||||||
{
|
{
|
||||||
item.type = itSong;
|
item.type = MPD::Item::Type::Song;
|
||||||
mpd_pair file_pair = { "file", e.path().native().c_str() };
|
mpd_pair file_pair = { "file", e.path().native().c_str() };
|
||||||
item.song = mpd_song_begin(&file_pair);
|
item.song = mpd_song_begin(&file_pair);
|
||||||
// FIXME no tag reading for now
|
// FIXME no tag reading for now
|
||||||
@@ -569,7 +565,7 @@ bool Browser::deleteItem(const MPD::Item &item, std::string &errmsg)
|
|||||||
FatalError("Parent directory passed to Browser::deleteItem");
|
FatalError("Parent directory passed to Browser::deleteItem");
|
||||||
|
|
||||||
// playlist created by mpd
|
// playlist created by mpd
|
||||||
if (!isLocal() && item.type == itPlaylist && CurrentDir() == "/")
|
if (!isLocal() && item.type == MPD::Item::Type::Playlist && CurrentDir() == "/")
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -587,12 +583,12 @@ bool Browser::deleteItem(const MPD::Item &item, std::string &errmsg)
|
|||||||
std::string path;
|
std::string path;
|
||||||
if (!isLocal())
|
if (!isLocal())
|
||||||
path = Config.mpd_music_dir;
|
path = Config.mpd_music_dir;
|
||||||
path += item.type == itSong ? item.song.getURI() : item.name;
|
path += item.type == MPD::Item::Type::Song ? item.song.getURI() : item.name;
|
||||||
|
|
||||||
bool rv;
|
bool rv;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (item.type == itDirectory)
|
if (item.type == MPD::Item::Type::Directory)
|
||||||
ClearDirectory(path);
|
ClearDirectory(path);
|
||||||
if (!boost::filesystem::exists(path))
|
if (!boost::filesystem::exists(path))
|
||||||
{
|
{
|
||||||
@@ -631,10 +627,10 @@ std::string ItemToString(const MPD::Item &item)
|
|||||||
std::string result;
|
std::string result;
|
||||||
switch (item.type)
|
switch (item.type)
|
||||||
{
|
{
|
||||||
case MPD::itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
result = "[" + getBasename(item.name) + "]";
|
result = "[" + getBasename(item.name) + "]";
|
||||||
break;
|
break;
|
||||||
case MPD::itSong:
|
case MPD::Item::Type::Song:
|
||||||
switch (Config.browser_display_mode)
|
switch (Config.browser_display_mode)
|
||||||
{
|
{
|
||||||
case DisplayMode::Classic:
|
case DisplayMode::Classic:
|
||||||
@@ -645,7 +641,7 @@ std::string ItemToString(const MPD::Item &item)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MPD::itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
result = Config.browser_playlist_prefix.str() + getBasename(item.name);
|
result = Config.browser_playlist_prefix.str() + getBasename(item.name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ struct Browser: Screen<NC::Menu<MPD::Item>>, Filterable, HasSongs, Searchable, T
|
|||||||
# endif // !WIN32
|
# endif // !WIN32
|
||||||
|
|
||||||
static bool isParentDirectory(const MPD::Item &item) {
|
static bool isParentDirectory(const MPD::Item &item) {
|
||||||
return item.type == MPD::itDirectory && item.name == "..";
|
return item.type == MPD::Item::Type::Directory && item.name == "..";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -386,12 +386,12 @@ void Display::Items(NC::Menu<MPD::Item> &menu, const ProxySongList &pl)
|
|||||||
const MPD::Item &item = menu.drawn()->value();
|
const MPD::Item &item = menu.drawn()->value();
|
||||||
switch (item.type)
|
switch (item.type)
|
||||||
{
|
{
|
||||||
case MPD::itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
menu << "["
|
menu << "["
|
||||||
<< Charset::utf8ToLocale(getBasename(item.name))
|
<< Charset::utf8ToLocale(getBasename(item.name))
|
||||||
<< "]";
|
<< "]";
|
||||||
break;
|
break;
|
||||||
case MPD::itSong:
|
case MPD::Item::Type::Song:
|
||||||
switch (Config.browser_display_mode)
|
switch (Config.browser_display_mode)
|
||||||
{
|
{
|
||||||
case DisplayMode::Classic:
|
case DisplayMode::Classic:
|
||||||
@@ -402,7 +402,7 @@ void Display::Items(NC::Menu<MPD::Item> &menu, const ProxySongList &pl)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MPD::itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
menu << Config.browser_playlist_prefix
|
menu << Config.browser_playlist_prefix
|
||||||
<< Charset::utf8ToLocale(getBasename(item.name));
|
<< Charset::utf8ToLocale(getBasename(item.name));
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -607,7 +607,7 @@ void Connection::SavePlaylist(const std::string &name)
|
|||||||
void Connection::GetPlaylists(StringConsumer f)
|
void Connection::GetPlaylists(StringConsumer f)
|
||||||
{
|
{
|
||||||
GetDirectory("/", [&f](Item &&item) {
|
GetDirectory("/", [&f](Item &&item) {
|
||||||
if (item.type == itPlaylist)
|
if (item.type == MPD::Item::Type::Playlist)
|
||||||
f(std::move(item.name));
|
f(std::move(item.name));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -688,15 +688,15 @@ void Connection::GetDirectory(const std::string &directory, ItemConsumer f)
|
|||||||
{
|
{
|
||||||
case MPD_ENTITY_TYPE_DIRECTORY:
|
case MPD_ENTITY_TYPE_DIRECTORY:
|
||||||
it.name = mpd_directory_get_path(mpd_entity_get_directory(item));
|
it.name = mpd_directory_get_path(mpd_entity_get_directory(item));
|
||||||
it.type = itDirectory;
|
it.type = MPD::Item::Type::Directory;
|
||||||
break;
|
break;
|
||||||
case MPD_ENTITY_TYPE_SONG:
|
case MPD_ENTITY_TYPE_SONG:
|
||||||
it.song = Song(mpd_song_dup(mpd_entity_get_song(item)));
|
it.song = Song(mpd_song_dup(mpd_entity_get_song(item)));
|
||||||
it.type = itSong;
|
it.type = MPD::Item::Type::Song;
|
||||||
break;
|
break;
|
||||||
case MPD_ENTITY_TYPE_PLAYLIST:
|
case MPD_ENTITY_TYPE_PLAYLIST:
|
||||||
it.name = mpd_playlist_get_path(mpd_entity_get_playlist(item));
|
it.name = mpd_playlist_get_path(mpd_entity_get_playlist(item));
|
||||||
it.type = itPlaylist;
|
it.type = MPD::Item::Type::Playlist;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
|
|||||||
@@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
namespace MPD {
|
namespace MPD {
|
||||||
|
|
||||||
enum ItemType { itDirectory, itSong, itPlaylist };
|
|
||||||
enum PlayerState { psUnknown, psStop, psPlay, psPause };
|
enum PlayerState { psUnknown, psStop, psPlay, psPause };
|
||||||
enum ReplayGainMode { rgmOff, rgmTrack, rgmAlbum };
|
enum ReplayGainMode { rgmOff, rgmTrack, rgmAlbum };
|
||||||
|
|
||||||
@@ -168,8 +167,10 @@ private:
|
|||||||
|
|
||||||
struct Item
|
struct Item
|
||||||
{
|
{
|
||||||
|
enum class Type { Directory, Playlist, Song };
|
||||||
|
|
||||||
Song song;
|
Song song;
|
||||||
ItemType type;
|
Type type;
|
||||||
std::string name;
|
std::string name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -59,13 +59,13 @@ bool LocaleBasedItemSorting::operator()(const MPD::Item &a, const MPD::Item &b)
|
|||||||
{
|
{
|
||||||
switch (a.type)
|
switch (a.type)
|
||||||
{
|
{
|
||||||
case MPD::itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
result = m_cmp(getBasename(a.name), getBasename(b.name));
|
result = m_cmp(getBasename(a.name), getBasename(b.name));
|
||||||
break;
|
break;
|
||||||
case MPD::itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
result = m_cmp(a.name, b.name);
|
result = m_cmp(a.name, b.name);
|
||||||
break;
|
break;
|
||||||
case MPD::itSong:
|
case MPD::Item::Type::Song:
|
||||||
switch (m_sort_mode)
|
switch (m_sort_mode)
|
||||||
{
|
{
|
||||||
case SortMode::Name:
|
case SortMode::Name:
|
||||||
|
|||||||
@@ -200,18 +200,18 @@ MPD::Song::GetFunction charToGetFunction(char c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string itemTypeToString(MPD::ItemType type)
|
std::string itemTypeToString(MPD::Item::Type type)
|
||||||
{
|
{
|
||||||
std::string result;
|
std::string result;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case MPD::itDirectory:
|
case MPD::Item::Type::Directory:
|
||||||
result = "directory";
|
result = "directory";
|
||||||
break;
|
break;
|
||||||
case MPD::itSong:
|
case MPD::Item::Type::Song:
|
||||||
result = "song";
|
result = "song";
|
||||||
break;
|
break;
|
||||||
case MPD::itPlaylist:
|
case MPD::Item::Type::Playlist:
|
||||||
result = "playlist";
|
result = "playlist";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,6 @@ MPD::MutableSong::SetFunction tagTypeToSetFunction(mpd_tag_type tag);
|
|||||||
mpd_tag_type charToTagType(char c);
|
mpd_tag_type charToTagType(char c);
|
||||||
MPD::Song::GetFunction charToGetFunction(char c);
|
MPD::Song::GetFunction charToGetFunction(char c);
|
||||||
|
|
||||||
std::string itemTypeToString(MPD::ItemType type);
|
std::string itemTypeToString(MPD::Item::Type type);
|
||||||
|
|
||||||
#endif // NCMPCPP_UTILITY_TYPE_CONVERSIONS_H
|
#endif // NCMPCPP_UTILITY_TYPE_CONVERSIONS_H
|
||||||
|
|||||||
Reference in New Issue
Block a user