fix duplicating albums in media library
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user