diff --git a/src/media_library.cpp b/src/media_library.cpp index 1d0e3f8f..d6361b1f 100644 --- a/src/media_library.cpp +++ b/src/media_library.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include +#include #include "charset.h" #include "display.h" @@ -150,7 +151,7 @@ void MediaLibrary::Update() { Albums->Reset(); TagList list; - std::vector< std::pair > maplist; + std::map maplist; locale_to_utf(Artists->Current()); if (Config.media_lib_primary_tag == MPD_TAG_ITEM_ARTIST) Mpd->GetAlbums(Artists->Current(), list); @@ -177,6 +178,8 @@ void MediaLibrary::Update() for (TagList::iterator it = list.begin(); it != list.end(); it++) { + if (it->empty()) + continue; SongList l; Mpd->StartSearch(1); Mpd->AddSearch(Config.media_lib_primary_tag, Artists->Current()); @@ -185,24 +188,20 @@ void MediaLibrary::Update() sort(l.begin(), l.end(), SortSongsByYear); for (SongList::const_iterator j = l.begin(); j != l.end(); j++) { - if (!(*j)->GetAlbum().empty() && (maplist.empty() || (*j)->GetYear() != maplist.back().second.Year || (*j)->GetAlbum() != maplist.back().second.Album)) - { - utf_to_locale(*it); - (*j)->Localize(); - maplist.push_back(make_pair((*j)->toString(Config.media_lib_album_format), SearchConstraints(*it, (*j)->GetYear()))); - } + utf_to_locale(*it); + (*j)->Localize(); + maplist[(*j)->toString(Config.media_lib_album_format)] = SearchConstraints(*it, (*j)->GetYear()); } FreeSongList(l); } utf_to_locale(Artists->Current()); - sort(maplist.begin(), maplist.end(), CaseInsensitiveSorting()); - for (std::vector< std::pair >::const_iterator it = maplist.begin(); it != maplist.end(); it++) - Albums->AddOption(*it); + for (std::map::const_iterator it = maplist.begin(); it != maplist.end(); it++) + Albums->AddOption(make_pair(it->first, it->second)); Albums->Window::Clear(); Albums->Refresh(); } - if (!Artists->Empty() && myScreen->Cmp() == Albums && Albums->Empty()) + if (!Artists->Empty() && w == Albums && Albums->Empty()) { Albums->HighlightColor(Config.main_highlight_color); Artists->HighlightColor(Config.active_column_color); diff --git a/src/media_library.h b/src/media_library.h index 7eaadd35..5d866c48 100644 --- a/src/media_library.h +++ b/src/media_library.h @@ -28,6 +28,7 @@ class MediaLibrary : public Screen { struct SearchConstraints { + SearchConstraints() { } SearchConstraints(const std::string &album, const std::string &year) : Album(album), Year(year) { } std::string Album; diff --git a/src/tag_editor.cpp b/src/tag_editor.cpp index d41660dc..70bf2bee 100644 --- a/src/tag_editor.cpp +++ b/src/tag_editor.cpp @@ -416,7 +416,7 @@ void TagEditor::Update() TagList list; if (Config.albums_in_tag_editor) { - std::vector maplist; + std::map maplist; *Albums << XY(0, 0) << "Fetching albums' list..."; Albums->Window::Refresh(); Mpd->GetAlbums("", list); @@ -429,13 +429,12 @@ void TagEditor::Update() if (!l.empty()) { l[0]->Localize(); - maplist.push_back(make_pair(l[0]->toString(Config.tag_editor_album_format), *it)); + maplist[l[0]->toString(Config.tag_editor_album_format)] = *it; } FreeSongList(l); } - sort(maplist.begin(), maplist.end(), CaseInsensitiveSorting()); - for (std::vector::const_iterator it = maplist.begin(); it != maplist.end(); it++) - Albums->AddOption(*it); + for (std::map::const_iterator it = maplist.begin(); it != maplist.end(); it++) + Albums->AddOption(make_pair(it->first, it->second)); } else {