From a4599fffe706e63688d5b1ab23160d8d55d8a9eb Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sat, 7 Mar 2009 12:26:16 +0100 Subject: [PATCH] speed up browsing media library the way media library was searching for albums was wrong and by the way totally inefficient. --- doc/config | 2 -- src/media_library.cpp | 31 ++++++++++++------------------- src/media_library.h | 1 - src/menu.h | 31 +++++++++++++++++++++++++------ src/mpdpp.cpp | 28 +++++++--------------------- src/mpdpp.h | 3 +-- src/settings.cpp | 6 ------ src/settings.h | 1 - 8 files changed, 45 insertions(+), 58 deletions(-) diff --git a/doc/config b/doc/config index fa18d7b9..1c392774 100644 --- a/doc/config +++ b/doc/config @@ -73,8 +73,6 @@ # #song_library_format = "{%n - }{%t}|{%f}" # -#media_library_album_format = "{(%y) }%b" -# #tag_editor_album_format = "{(%y) }%b" # #browser_playlist_prefix = "$2playlist$9 " diff --git a/src/media_library.cpp b/src/media_library.cpp index d6361b1f..3e52849f 100644 --- a/src/media_library.cpp +++ b/src/media_library.cpp @@ -19,7 +19,6 @@ ***************************************************************************/ #include -#include #include "charset.h" #include "display.h" @@ -151,52 +150,46 @@ void MediaLibrary::Update() { Albums->Reset(); TagList list; - std::map maplist; locale_to_utf(Artists->Current()); if (Config.media_lib_primary_tag == MPD_TAG_ITEM_ARTIST) Mpd->GetAlbums(Artists->Current(), list); else { - Mpd->StartSearch(1); - Mpd->AddSearch(Config.media_lib_primary_tag, Artists->Current()); Mpd->StartFieldSearch(MPD_TAG_ITEM_ALBUM); + Mpd->AddSearch(Config.media_lib_primary_tag, Artists->Current()); Mpd->CommitSearch(list); } // Version() > 13) { - SongList noalbum_list; - Mpd->StartSearch(1); + TagList noalbum_list; + Mpd->StartFieldSearch(MPD_TAG_ITEM_FILENAME); Mpd->AddSearch(Config.media_lib_primary_tag, Artists->Current()); Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, ""); Mpd->CommitSearch(noalbum_list); if (!noalbum_list.empty()) Albums->AddOption(std::make_pair("", SearchConstraints("", ""))); - FreeSongList(noalbum_list); } for (TagList::iterator it = list.begin(); it != list.end(); it++) { - if (it->empty()) - continue; - SongList l; - Mpd->StartSearch(1); + TagList l; + Mpd->StartFieldSearch(MPD_TAG_ITEM_DATE); Mpd->AddSearch(Config.media_lib_primary_tag, Artists->Current()); Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, *it); Mpd->CommitSearch(l); - sort(l.begin(), l.end(), SortSongsByYear); - for (SongList::const_iterator j = l.begin(); j != l.end(); j++) + utf_to_locale(*it); + if (l.empty()) { - utf_to_locale(*it); - (*j)->Localize(); - maplist[(*j)->toString(Config.media_lib_album_format)] = SearchConstraints(*it, (*j)->GetYear()); + Albums->AddOption(std::make_pair(*it, SearchConstraints(*it, ""))); + continue; } - FreeSongList(l); + for (TagList::const_iterator j = l.begin(); j != l.end(); j++) + Albums->AddOption(std::make_pair("(" + *j + ") " + *it, SearchConstraints(*it, *j))); } utf_to_locale(Artists->Current()); - for (std::map::const_iterator it = maplist.begin(); it != maplist.end(); it++) - Albums->AddOption(make_pair(it->first, it->second)); + Albums->Sort((*Albums)[0].first == ""); Albums->Window::Clear(); Albums->Refresh(); } diff --git a/src/media_library.h b/src/media_library.h index 5d866c48..7eaadd35 100644 --- a/src/media_library.h +++ b/src/media_library.h @@ -28,7 +28,6 @@ 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/menu.h b/src/menu.h index 81bd350a..4a80d357 100644 --- a/src/menu.h +++ b/src/menu.h @@ -76,6 +76,11 @@ namespace NCurses bool isStatic; }; + template static bool InternalSorting(Option *a, Option *b) + { + return ComparisonClass()(a->Item, b->Item); + } + typedef typename std::vector