speed up browsing media library
the way media library was searching for albums was wrong and by the way totally inefficient.
This commit is contained in:
@@ -19,7 +19,6 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include <algorithm>
|
||||
#include <map>
|
||||
|
||||
#include "charset.h"
|
||||
#include "display.h"
|
||||
@@ -151,52 +150,46 @@ void MediaLibrary::Update()
|
||||
{
|
||||
Albums->Reset();
|
||||
TagList list;
|
||||
std::map<std::string, SearchConstraints, CaseInsensitiveSorting> 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);
|
||||
}
|
||||
|
||||
// <mpd-0.14 doesn't support searching for empty tag
|
||||
if (Mpd->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("<no album>", 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<std::string, SearchConstraints>::const_iterator it = maplist.begin(); it != maplist.end(); it++)
|
||||
Albums->AddOption(make_pair(it->first, it->second));
|
||||
Albums->Sort<CaseInsensitiveSorting>((*Albums)[0].first == "<no album>");
|
||||
Albums->Window::Clear();
|
||||
Albums->Refresh();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user