merge some duplicated code in parsing song formats

This commit is contained in:
Andrzej Rybczak
2010-08-22 17:46:23 +02:00
parent a66ab40c25
commit 6687def7f7
4 changed files with 43 additions and 97 deletions

View File

@@ -144,6 +144,45 @@ mpd_tag_type IntoTagItem(char c)
}
}
MPD::Song::GetFunction toGetFunction(char c)
{
switch (c)
{
case 'l':
return &MPD::Song::GetLength;
case 'D':
return &MPD::Song::GetDirectory;
case 'f':
return &MPD::Song::GetName;
case 'a':
return &MPD::Song::GetArtist;
case 'A':
return &MPD::Song::GetAlbumArtist;
case 'b':
return &MPD::Song::GetAlbum;
case 'y':
return &MPD::Song::GetDate;
case 'n':
return &MPD::Song::GetTrackNumber;
case 'N':
return &MPD::Song::GetTrack;
case 'g':
return &MPD::Song::GetGenre;
case 'c':
return &MPD::Song::GetComposer;
case 'p':
return &MPD::Song::GetPerformer;
case 'd':
return &MPD::Song::GetDisc;
case 'C':
return &MPD::Song::GetComment;
case 't':
return &MPD::Song::GetTitle;
default:
return 0;
}
}
#ifdef HAVE_TAGLIB_H
MPD::Song::SetFunction IntoSetFunction(mpd_tag_type tag)
{

View File

@@ -52,6 +52,8 @@ NCurses::Color IntoColor(const std::string &);
mpd_tag_type IntoTagItem(char);
MPD::Song::GetFunction toGetFunction(char c);
#ifdef HAVE_TAGLIB_H
MPD::Song::SetFunction IntoSetFunction(mpd_tag_type);
#endif // HAVE_TAGLIB_H

View File

@@ -188,56 +188,7 @@ void Display::SongsInColumns(const MPD::Song &s, void *data, Menu<MPD::Song> *me
std::string tag;
for (size_t i = 0; i < it->type.length(); ++i)
{
switch (it->type[i])
{
case 'l':
get = &MPD::Song::GetLength;
break;
case 'D':
get = &MPD::Song::GetDirectory;
break;
case 'f':
get = &MPD::Song::GetName;
break;
case 'a':
get = &MPD::Song::GetArtist;
break;
case 'A':
get = &MPD::Song::GetAlbumArtist;
break;
case 'b':
get = &MPD::Song::GetAlbum;
break;
case 'y':
get = &MPD::Song::GetDate;
break;
case 'n':
get = &MPD::Song::GetTrackNumber;
break;
case 'N':
get = &MPD::Song::GetTrack;
break;
case 'g':
get = &MPD::Song::GetGenre;
break;
case 'c':
get = &MPD::Song::GetComposer;
break;
case 'p':
get = &MPD::Song::GetPerformer;
break;
case 'd':
get = &MPD::Song::GetDisc;
break;
case 'C':
get = &MPD::Song::GetComment;
break;
case 't':
get = &MPD::Song::GetTitle;
break;
default:
break;
}
get = toGetFunction(it->type[i]);
tag = get ? s.GetTags(get) : "";
if (!tag.empty())
break;

View File

@@ -372,56 +372,10 @@ std::string MPD::Song::ParseFormat(std::string::const_iterator &it, const char *
{
switch (*++it)
{
case 'l':
get = &MPD::Song::GetLength;
break;
case 'D':
get = &MPD::Song::GetDirectory;
break;
case 'f':
get = &MPD::Song::GetName;
break;
case 'a':
get = &MPD::Song::GetArtist;
break;
case 'A':
get = &MPD::Song::GetAlbumArtist;
break;
case 'b':
get = &MPD::Song::GetAlbum;
break;
case 'y':
get = &MPD::Song::GetDate;
break;
case 'n':
get = &MPD::Song::GetTrackNumber;
break;
case 'N':
get = &MPD::Song::GetTrack;
break;
case 'g':
get = &MPD::Song::GetGenre;
break;
case 'c':
get = &MPD::Song::GetComposer;
break;
case 'p':
get = &MPD::Song::GetPerformer;
break;
case 'd':
get = &MPD::Song::GetDisc;
break;
case 'C':
get = &MPD::Song::GetComment;
break;
case 't':
get = &MPD::Song::GetTitle;
break;
case '%':
result += *it; // no break here
default:
get = 0;
break;
get = toGetFunction(*it);
}
if (get)
{