add to libmpdclient support for getting list of any tag type

This commit is contained in:
unK
2008-10-05 19:30:42 +02:00
parent f8727b0a10
commit 9fd373625d
5 changed files with 62 additions and 16 deletions

View File

@@ -1340,12 +1340,44 @@ void mpd_sendListCommand(mpd_Connection * connection, int table,
char st[10];
int len;
char *string;
if(table == MPD_TABLE_ARTIST) strcpy(st,"artist");
else if(table == MPD_TABLE_ALBUM) strcpy(st,"album");
else {
connection->error = 1;
strcpy(connection->errorStr,"unknown table for list");
return;
switch(table) {
case MPD_TABLE_ARTIST:
strcpy(st,"artist");
break;
case MPD_TABLE_ALBUM:
strcpy(st,"album");
break;
case MPD_TABLE_TITLE:
strcpy(st,"title");
break;
case MPD_TABLE_TRACK:
strcpy(st,"track");
break;
case MPD_TABLE_GENRE:
strcpy(st,"genre");
break;
case MPD_TABLE_DATE:
strcpy(st,"date");
break;
case MPD_TABLE_COMPOSER:
strcpy(st,"composer");
break;
case MPD_TABLE_PERFORMER:
strcpy(st,"performer");
break;
case MPD_TABLE_COMMENT:
strcpy(st,"comment");
break;
case MPD_TABLE_DISC:
strcpy(st,"disc");
break;
case MPD_TABLE_FILENAME:
strcpy(st,"filename");
break;
default:
connection->error = 1;
strcpy(connection->errorStr,"unknown table for list");
return;
}
if(arg1) {
char * sanitArg1 = mpd_sanitizeArg(arg1);

View File

@@ -431,6 +431,13 @@ void mpd_sendLsInfoCommand(mpd_Connection * connection, const char * dir);
#define MPD_TABLE_ARTIST MPD_TAG_ITEM_ARTIST
#define MPD_TABLE_ALBUM MPD_TAG_ITEM_ALBUM
#define MPD_TABLE_TITLE MPD_TAG_ITEM_TITLE
#define MPD_TABLE_TRACK MPD_TAG_ITEM_TRACK
#define MPD_TABLE_GENRE MPD_TAG_ITEM_GENRE
#define MPD_TABLE_DATE MPD_TAG_ITEM_DATE
#define MPD_TABLE_COMPOSER MPD_TAG_ITEM_COMPOSER
#define MPD_TABLE_PERFORMER MPD_TAG_ITEM_PERFORMER
#define MPD_TABLE_COMMENT MPD_TAG_ITEM_COMMENT
#define MPD_TABLE_DISC MPD_TAG_ITEM_DISC
#define MPD_TABLE_FILENAME MPD_TAG_ITEM_FILENAME
void mpd_sendSearchCommand(mpd_Connection * connection, int table,

View File

@@ -628,6 +628,21 @@ void MPDConnection::GetPlaylists(TagList &v) const
}
}
void MPDConnection::GetList(TagList &v, mpd_TagItems type) const
{
if (isConnected)
{
mpd_sendListCommand(itsConnection, type, NULL);
char *item;
while ((item = mpd_getNextTag(itsConnection, type)) != NULL)
{
v.push_back(item);
delete [] item;
}
mpd_finishCommand(itsConnection);
}
}
void MPDConnection::GetArtists(TagList &v) const
{
if (isConnected)

View File

@@ -160,6 +160,7 @@ class MPDConnection
void CommitSearch(TagList &) const;
void GetPlaylists(TagList &) const;
void GetList(TagList &, mpd_TagItems) const;
void GetArtists(TagList &) const;
void GetAlbums(string, TagList &) const;
void GetDirectory(const string &, ItemList &) const;

View File

@@ -436,16 +436,7 @@ int main(int argc, char *argv[])
TagList list;
mLibAlbums->Clear(0);
mLibSongs->Clear(0);
if (Config.media_lib_primary_tag == MPD_TAG_ITEM_ARTIST)
Mpd->GetArtists(list);
else
{
Mpd->StartSearch(0);
Mpd->AddSearch(Config.media_lib_primary_tag, "");
Mpd->StartFieldSearch(Config.media_lib_primary_tag);
Mpd->CommitSearch(list);
sort(list.begin(), list.end());
}
Mpd->GetList(list, Config.media_lib_primary_tag);
sort(list.begin(), list.end(), CaseInsensitiveSorting());
for (TagList::const_iterator it = list.begin(); it != list.end(); it++)
{