fix duplicating albums in media library

This commit is contained in:
Andrzej Rybczak
2009-03-05 18:55:11 +01:00
parent 556d0f7a3c
commit 1b74324e68
3 changed files with 15 additions and 16 deletions

View File

@@ -19,6 +19,7 @@
***************************************************************************/ ***************************************************************************/
#include <algorithm> #include <algorithm>
#include <map>
#include "charset.h" #include "charset.h"
#include "display.h" #include "display.h"
@@ -150,7 +151,7 @@ void MediaLibrary::Update()
{ {
Albums->Reset(); Albums->Reset();
TagList list; TagList list;
std::vector< std::pair<std::string, SearchConstraints> > maplist; std::map<std::string, SearchConstraints, CaseInsensitiveSorting> maplist;
locale_to_utf(Artists->Current()); locale_to_utf(Artists->Current());
if (Config.media_lib_primary_tag == MPD_TAG_ITEM_ARTIST) if (Config.media_lib_primary_tag == MPD_TAG_ITEM_ARTIST)
Mpd->GetAlbums(Artists->Current(), list); Mpd->GetAlbums(Artists->Current(), list);
@@ -177,6 +178,8 @@ void MediaLibrary::Update()
for (TagList::iterator it = list.begin(); it != list.end(); it++) for (TagList::iterator it = list.begin(); it != list.end(); it++)
{ {
if (it->empty())
continue;
SongList l; SongList l;
Mpd->StartSearch(1); Mpd->StartSearch(1);
Mpd->AddSearch(Config.media_lib_primary_tag, Artists->Current()); Mpd->AddSearch(Config.media_lib_primary_tag, Artists->Current());
@@ -185,24 +188,20 @@ void MediaLibrary::Update()
sort(l.begin(), l.end(), SortSongsByYear); sort(l.begin(), l.end(), SortSongsByYear);
for (SongList::const_iterator j = l.begin(); j != l.end(); j++) 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();
utf_to_locale(*it); maplist[(*j)->toString(Config.media_lib_album_format)] = SearchConstraints(*it, (*j)->GetYear());
(*j)->Localize();
maplist.push_back(make_pair((*j)->toString(Config.media_lib_album_format), SearchConstraints(*it, (*j)->GetYear())));
}
} }
FreeSongList(l); FreeSongList(l);
} }
utf_to_locale(Artists->Current()); utf_to_locale(Artists->Current());
sort(maplist.begin(), maplist.end(), CaseInsensitiveSorting()); for (std::map<std::string, SearchConstraints>::const_iterator it = maplist.begin(); it != maplist.end(); it++)
for (std::vector< std::pair<std::string, SearchConstraints> >::const_iterator it = maplist.begin(); it != maplist.end(); it++) Albums->AddOption(make_pair(it->first, it->second));
Albums->AddOption(*it);
Albums->Window::Clear(); Albums->Window::Clear();
Albums->Refresh(); Albums->Refresh();
} }
if (!Artists->Empty() && myScreen->Cmp() == Albums && Albums->Empty()) if (!Artists->Empty() && w == Albums && Albums->Empty())
{ {
Albums->HighlightColor(Config.main_highlight_color); Albums->HighlightColor(Config.main_highlight_color);
Artists->HighlightColor(Config.active_column_color); Artists->HighlightColor(Config.active_column_color);

View File

@@ -28,6 +28,7 @@ class MediaLibrary : public Screen<Window>
{ {
struct SearchConstraints struct SearchConstraints
{ {
SearchConstraints() { }
SearchConstraints(const std::string &album, const std::string &year) : Album(album), Year(year) { } SearchConstraints(const std::string &album, const std::string &year) : Album(album), Year(year) { }
std::string Album; std::string Album;

View File

@@ -416,7 +416,7 @@ void TagEditor::Update()
TagList list; TagList list;
if (Config.albums_in_tag_editor) if (Config.albums_in_tag_editor)
{ {
std::vector<string_pair> maplist; std::map<string, string, CaseInsensitiveSorting> maplist;
*Albums << XY(0, 0) << "Fetching albums' list..."; *Albums << XY(0, 0) << "Fetching albums' list...";
Albums->Window::Refresh(); Albums->Window::Refresh();
Mpd->GetAlbums("", list); Mpd->GetAlbums("", list);
@@ -429,13 +429,12 @@ void TagEditor::Update()
if (!l.empty()) if (!l.empty())
{ {
l[0]->Localize(); 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); FreeSongList(l);
} }
sort(maplist.begin(), maplist.end(), CaseInsensitiveSorting()); for (std::map<string, string>::const_iterator it = maplist.begin(); it != maplist.end(); it++)
for (std::vector<string_pair>::const_iterator it = maplist.begin(); it != maplist.end(); it++) Albums->AddOption(make_pair(it->first, it->second));
Albums->AddOption(*it);
} }
else else
{ {