media library: show songs with primary tag unspecified

thanks to Alexey Semenko <igogo.dev@gmail.com> for base patch
This commit is contained in:
Andrzej Rybczak
2010-08-24 22:21:15 +02:00
parent ef4a505470
commit d799c5bf32
2 changed files with 14 additions and 16 deletions

View File

@@ -63,7 +63,7 @@ void MediaLibrary::Init()
Artists->CenteredCursor(Config.centered_cursor); Artists->CenteredCursor(Config.centered_cursor);
Artists->SetSelectPrefix(&Config.selected_item_prefix); Artists->SetSelectPrefix(&Config.selected_item_prefix);
Artists->SetSelectSuffix(&Config.selected_item_suffix); Artists->SetSelectSuffix(&Config.selected_item_suffix);
Artists->SetItemDisplayer(Display::Generic); Artists->SetItemDisplayer(DisplayPrimaryTags);
Albums = new Menu<SearchConstraints>(itsMiddleColStartX, MainStartY, itsMiddleColWidth, MainHeight, "Albums", Config.main_color, brNone); Albums = new Menu<SearchConstraints>(itsMiddleColStartX, MainStartY, itsMiddleColWidth, MainHeight, "Albums", Config.main_color, brNone);
Albums->HighlightColor(Config.main_highlight_color); Albums->HighlightColor(Config.main_highlight_color);
@@ -191,11 +191,8 @@ void MediaLibrary::Update()
sort(list.begin(), list.end(), CaseInsensitiveSorting()); sort(list.begin(), list.end(), CaseInsensitiveSorting());
for (MPD::TagList::iterator it = list.begin(); it != list.end(); ++it) for (MPD::TagList::iterator it = list.begin(); it != list.end(); ++it)
{ {
if (!it->empty()) utf_to_locale(*it);
{ Artists->AddOption(*it);
utf_to_locale(*it);
Artists->AddOption(*it);
}
} }
Artists->Window::Clear(); Artists->Window::Clear();
Artists->Refresh(); Artists->Refresh();
@@ -257,8 +254,6 @@ void MediaLibrary::Update()
Mpd.GetList(artists, Config.media_lib_primary_tag); Mpd.GetList(artists, Config.media_lib_primary_tag);
for (MPD::TagList::iterator i = artists.begin(); i != artists.end(); ++i) for (MPD::TagList::iterator i = artists.begin(); i != artists.end(); ++i)
{ {
if (i->empty())
continue;
MPD::TagList albums; MPD::TagList albums;
Mpd.StartFieldSearch(MPD_TAG_ALBUM); Mpd.StartFieldSearch(MPD_TAG_ALBUM);
Mpd.AddSearch(Config.media_lib_primary_tag, *i); Mpd.AddSearch(Config.media_lib_primary_tag, *i);
@@ -738,8 +733,8 @@ std::string MediaLibrary::AlbumToString(const SearchConstraints &sc, void *ptr)
if (sc.Year == AllTracksMarker) if (sc.Year == AllTracksMarker)
return "All tracks"; return "All tracks";
std::string result; std::string result;
if (!sc.Artist.empty()) if (static_cast<MediaLibrary *>(ptr)->hasTwoColumns)
(result += sc.Artist) += " - "; (result += sc.Artist.empty() ? Config.empty_tag : sc.Artist) += " - ";
if ((!static_cast<MediaLibrary *>(ptr)->hasTwoColumns || Config.media_lib_primary_tag != MPD_TAG_DATE) && !sc.Year.empty()) if ((!static_cast<MediaLibrary *>(ptr)->hasTwoColumns || Config.media_lib_primary_tag != MPD_TAG_DATE) && !sc.Year.empty())
((result += "(") += sc.Year) += ") "; ((result += "(") += sc.Year) += ") ";
result += sc.Album.empty() ? "<no album>" : sc.Album; result += sc.Album.empty() ? "<no album>" : sc.Album;
@@ -751,16 +746,18 @@ void MediaLibrary::DisplayAlbums(const SearchConstraints &sc, void *, Menu<Searc
*menu << AlbumToString(sc, 0); *menu << AlbumToString(sc, 0);
} }
void MediaLibrary::DisplayPrimaryTags(const std::string &tag, void *, Menu<std::string> *menu)
{
*menu << (!tag.empty() ? tag : Config.empty_tag);
}
bool MediaLibrary::SearchConstraintsSorting::operator()(const SearchConstraints &a, const SearchConstraints &b) const bool MediaLibrary::SearchConstraintsSorting::operator()(const SearchConstraints &a, const SearchConstraints &b) const
{ {
int result; int result;
CaseInsensitiveStringComparison cmp; CaseInsensitiveStringComparison cmp;
if (!a.Artist.empty() || b.Artist.empty()) result = cmp(a.Artist, b.Artist);
{ if (result != 0)
result = cmp(a.Artist, b.Artist); return result < 0;
if (result != 0)
return result < 0;
}
result = cmp(a.Year, b.Year); result = cmp(a.Year, b.Year);
return (result == 0 ? cmp(a.Album, b.Album) : result) < 0; return (result == 0 ? cmp(a.Album, b.Album) : result) < 0;
} }

View File

@@ -86,6 +86,7 @@ class MediaLibrary : public Screen<Window>
static std::string AlbumToString(const SearchConstraints &, void *); static std::string AlbumToString(const SearchConstraints &, void *);
static void DisplayAlbums(const SearchConstraints &, void *, Menu<SearchConstraints> *); static void DisplayAlbums(const SearchConstraints &, void *, Menu<SearchConstraints> *);
static void DisplayPrimaryTags(const std::string &artist, void *, Menu<std::string> *menu);
static bool SortSongsByTrack(MPD::Song *, MPD::Song *); static bool SortSongsByTrack(MPD::Song *, MPD::Song *);
static bool SortAllTracks(MPD::Song *, MPD::Song *); static bool SortAllTracks(MPD::Song *, MPD::Song *);