Merge pull request #240 from Polochon-street/album-view

Added a fully working 'Album-only' view
master
Larson Carter 7 years ago committed by GitHub
commit 320d8d0ccb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 90
      src/screens/media_library.cpp

@ -53,6 +53,7 @@ MediaLibrary *myLibrary;
namespace { namespace {
bool hasTwoColumns; bool hasTwoColumns;
bool isAlbumOnly;
size_t itsLeftColStartX; size_t itsLeftColStartX;
size_t itsLeftColWidth; size_t itsLeftColWidth;
size_t itsMiddleColWidth; size_t itsMiddleColWidth;
@ -73,12 +74,15 @@ std::string Date_(std::string date)
MPD::SongIterator getSongsFromAlbum(const AlbumEntry &album) MPD::SongIterator getSongsFromAlbum(const AlbumEntry &album)
{ {
Mpd.StartSearch(true); Mpd.StartSearch(true);
Mpd.AddSearch(Config.media_lib_primary_tag, album.entry().tag()); if (!isAlbumOnly)
Mpd.AddSearch(Config.media_lib_primary_tag, album.entry().tag());
if (!album.isAllTracksEntry()) if (!album.isAllTracksEntry())
{ {
Mpd.AddSearch(MPD_TAG_ALBUM, album.entry().album()); Mpd.AddSearch(MPD_TAG_ALBUM, album.entry().album());
if (Config.media_library_albums_split_by_date) if(!isAlbumOnly) {
Mpd.AddSearch(MPD_TAG_DATE, album.entry().date()); if (Config.media_library_albums_split_by_date)
Mpd.AddSearch(MPD_TAG_DATE, album.entry().date());
}
} }
return Mpd.CommitSearchSongs(); return Mpd.CommitSearchSongs();
} }
@ -141,14 +145,14 @@ class SortAlbumEntries {
typedef MediaLibrary::Album Album; typedef MediaLibrary::Album Album;
LocaleStringComparison m_cmp; LocaleStringComparison m_cmp;
public: public:
SortAlbumEntries() : m_cmp(std::locale(), Config.ignore_leading_the) { } SortAlbumEntries() : m_cmp(std::locale(), Config.ignore_leading_the) { }
bool operator()(const AlbumEntry &a, const AlbumEntry &b) const { bool operator()(const AlbumEntry &a, const AlbumEntry &b) const {
return (*this)(a.entry(), b.entry()); return (*this)(a.entry(), b.entry());
} }
bool operator()(const Album &a, const Album &b) const { bool operator()(const Album &a, const Album &b) const {
if (Config.media_library_sort_by_mtime) if (Config.media_library_sort_by_mtime)
return a.mtime() > b.mtime(); return a.mtime() > b.mtime();
@ -188,6 +192,7 @@ MediaLibrary::MediaLibrary()
, m_fetching_delay(boost::posix_time::milliseconds(Config.data_fetching_delay ? 250 : -1)) , m_fetching_delay(boost::posix_time::milliseconds(Config.data_fetching_delay ? 250 : -1))
{ {
hasTwoColumns = 0; hasTwoColumns = 0;
isAlbumOnly = 0;
itsLeftColWidth = COLS/3-1; itsLeftColWidth = COLS/3-1;
itsMiddleColWidth = COLS/3; itsMiddleColWidth = COLS/3;
itsMiddleColStartX = itsLeftColWidth+1; itsMiddleColStartX = itsLeftColWidth+1;
@ -305,15 +310,28 @@ void MediaLibrary::update()
unsigned idx = 0; unsigned idx = 0;
while (!(tag = s->get(Config.media_lib_primary_tag, idx++)).empty()) while (!(tag = s->get(Config.media_lib_primary_tag, idx++)).empty())
{ {
auto key = std::make_tuple( if (isAlbumOnly) {
std::move(tag), auto key = std::make_tuple(
s->getAlbum(), "",
Date_(s->getDate())); s->getAlbum(),
auto it = albums.find(key); "");
if (it == albums.end()) auto it = albums.find(key);
albums[std::move(key)] = s->getMTime(); if (it == albums.end())
else albums[std::move(key)] = s->getMTime();
it->second = s->getMTime(); else
it->second = s->getMTime();
}
else {
auto key = std::make_tuple(
std::move(tag),
s->getAlbum(),
Date_(s->getDate()));
auto it = albums.find(key);
if (it == albums.end())
albums[std::move(key)] = s->getMTime();
else
it->second = s->getMTime();
}
} }
} }
size_t idx = 0; size_t idx = 0;
@ -879,7 +897,15 @@ void MediaLibrary::updateTimer()
void MediaLibrary::toggleColumnsMode() void MediaLibrary::toggleColumnsMode()
{ {
hasTwoColumns = !hasTwoColumns; if (isAlbumOnly) {
hasTwoColumns = 0;
isAlbumOnly = 0;
}
else if (hasTwoColumns)
isAlbumOnly = 1;
else
hasTwoColumns = 1;
Tags.clear(); Tags.clear();
Albums.clear(); Albums.clear();
Albums.reset(); Albums.reset();
@ -892,8 +918,14 @@ void MediaLibrary::toggleColumnsMode()
{ {
std::string item_type = boost::locale::to_lower( std::string item_type = boost::locale::to_lower(
tagTypeToString(Config.media_lib_primary_tag)); tagTypeToString(Config.media_lib_primary_tag));
std::string and_mtime = Config.media_library_sort_by_mtime ? " and mtime" : ""; if(!isAlbumOnly) {
Albums.setTitle("Albums (sorted by " + item_type + and_mtime + ")"); 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 else
@ -924,8 +956,14 @@ void MediaLibrary::toggleSortMode()
{ {
std::string item_type = boost::locale::to_lower( std::string item_type = boost::locale::to_lower(
tagTypeToString(Config.media_lib_primary_tag)); tagTypeToString(Config.media_lib_primary_tag));
std::string and_mtime = Config.media_library_sort_by_mtime ? (" " "and mtime") : ""; if(!isAlbumOnly) {
Albums.setTitle("Albums (sorted by " + item_type + and_mtime + ")"); 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 else
@ -1070,13 +1108,15 @@ std::string AlbumToString(const AlbumEntry &ae)
{ {
if (hasTwoColumns) if (hasTwoColumns)
{ {
if (ae.entry().tag().empty()) if(!isAlbumOnly) {
result += Config.empty_tag; if (ae.entry().tag().empty())
else result += Config.empty_tag;
result += ae.entry().tag(); else
result += " - "; 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().date() + ") ";
result += ae.entry().album().empty() ? "<no album>" : ae.entry().album(); result += ae.entry().album().empty() ? "<no album>" : ae.entry().album();
} }

Loading…
Cancel
Save