Added a fully working 'Album-only' view

This commit is contained in:
Polochon-street
2017-08-07 00:42:07 +02:00
parent 99107c5b39
commit 29a90de777

View File

@@ -53,6 +53,7 @@ MediaLibrary *myLibrary;
namespace {
bool hasTwoColumns;
bool isAlbumOnly;
size_t itsLeftColStartX;
size_t itsLeftColWidth;
size_t itsMiddleColWidth;
@@ -73,13 +74,16 @@ std::string Date_(std::string date)
MPD::SongIterator getSongsFromAlbum(const AlbumEntry &album)
{
Mpd.StartSearch(true);
if (!isAlbumOnly)
Mpd.AddSearch(Config.media_lib_primary_tag, album.entry().tag());
if (!album.isAllTracksEntry())
{
Mpd.AddSearch(MPD_TAG_ALBUM, album.entry().album());
if(!isAlbumOnly) {
if (Config.media_library_albums_split_by_date)
Mpd.AddSearch(MPD_TAG_DATE, album.entry().date());
}
}
return Mpd.CommitSearchSongs();
}
@@ -182,6 +186,7 @@ MediaLibrary::MediaLibrary()
, m_fetching_delay(boost::posix_time::milliseconds(Config.data_fetching_delay ? 250 : -1))
{
hasTwoColumns = 0;
isAlbumOnly = 0;
itsLeftColWidth = COLS/3-1;
itsMiddleColWidth = COLS/3;
itsMiddleColStartX = itsLeftColWidth+1;
@@ -299,6 +304,18 @@ void MediaLibrary::update()
unsigned idx = 0;
while (!(tag = s->get(Config.media_lib_primary_tag, idx++)).empty())
{
if (isAlbumOnly) {
auto key = std::make_tuple(
"",
s->getAlbum(),
"");
auto it = albums.find(key);
if (it == albums.end())
albums[std::move(key)] = s->getMTime();
else
it->second = s->getMTime();
}
else {
auto key = std::make_tuple(
std::move(tag),
s->getAlbum(),
@@ -310,6 +327,7 @@ void MediaLibrary::update()
it->second = s->getMTime();
}
}
}
size_t idx = 0;
for (const auto &album : albums)
{
@@ -873,7 +891,15 @@ void MediaLibrary::updateTimer()
void MediaLibrary::toggleColumnsMode()
{
hasTwoColumns = !hasTwoColumns;
if (isAlbumOnly) {
hasTwoColumns = 0;
isAlbumOnly = 0;
}
else if (hasTwoColumns)
isAlbumOnly = 1;
else
hasTwoColumns = 1;
Tags.clear();
Albums.clear();
Albums.reset();
@@ -886,9 +912,15 @@ void MediaLibrary::toggleColumnsMode()
{
std::string item_type = boost::locale::to_lower(
tagTypeToString(Config.media_lib_primary_tag));
if(!isAlbumOnly) {
std::string and_mtime = Config.media_library_sort_by_mtime ? " and mtime" : "";
Albums.setTitle("Albums (sorted by " + item_type + and_mtime + ")");
}
else {
std::string and_mtime = Config.media_library_sort_by_mtime ? " (sorted by mtime)" : "";
Albums.setTitle("Albums" + and_mtime);
}
}
}
else
Albums.setTitle(Config.titles_visibility ? "Albums" : "");
@@ -918,9 +950,15 @@ void MediaLibrary::toggleSortMode()
{
std::string item_type = boost::locale::to_lower(
tagTypeToString(Config.media_lib_primary_tag));
if(!isAlbumOnly) {
std::string and_mtime = Config.media_library_sort_by_mtime ? (" " "and mtime") : "";
Albums.setTitle("Albums (sorted by " + item_type + and_mtime + ")");
}
else {
std::string and_mtime = Config.media_library_sort_by_mtime ? " (sorted by mtime)" : "";
Albums.setTitle("Albums" + and_mtime);
}
}
}
else
{
@@ -1064,13 +1102,15 @@ std::string AlbumToString(const AlbumEntry &ae)
{
if (hasTwoColumns)
{
if(!isAlbumOnly) {
if (ae.entry().tag().empty())
result += Config.empty_tag;
else
result += ae.entry().tag();
result += " - ";
}
if (Config.media_lib_primary_tag != MPD_TAG_DATE && !ae.entry().date().empty())
}
if (Config.media_lib_primary_tag != MPD_TAG_DATE && !ae.entry().date().empty() && !isAlbumOnly)
result += "(" + ae.entry().date() + ") ";
result += ae.entry().album().empty() ? "<no album>" : ae.entry().album();
}