From 6687def7f7db017950e5556a428687cdfe7b6905 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sun, 22 Aug 2010 17:46:23 +0200 Subject: [PATCH] merge some duplicated code in parsing song formats --- src/conv.cpp | 39 +++++++++++++++++++++++++++++++++++++ src/conv.h | 2 ++ src/display.cpp | 51 +------------------------------------------------ src/song.cpp | 48 +--------------------------------------------- 4 files changed, 43 insertions(+), 97 deletions(-) diff --git a/src/conv.cpp b/src/conv.cpp index c8d0cfe6..69a2db7b 100644 --- a/src/conv.cpp +++ b/src/conv.cpp @@ -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) { diff --git a/src/conv.h b/src/conv.h index fba3f977..9a4188fc 100644 --- a/src/conv.h +++ b/src/conv.h @@ -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 diff --git a/src/display.cpp b/src/display.cpp index 1462fb7b..7c867395 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -188,56 +188,7 @@ void Display::SongsInColumns(const MPD::Song &s, void *data, Menu *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; diff --git a/src/song.cpp b/src/song.cpp index 7a998747..5c44b9b6 100644 --- a/src/song.cpp +++ b/src/song.cpp @@ -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) {