diff --git a/src/screens/media_library.cpp b/src/screens/media_library.cpp index 24045b4a..9ca0132d 100644 --- a/src/screens/media_library.cpp +++ b/src/screens/media_library.cpp @@ -53,6 +53,7 @@ MediaLibrary *myLibrary; namespace { bool hasTwoColumns; +bool isAlbumOnly; size_t itsLeftColStartX; size_t itsLeftColWidth; size_t itsMiddleColWidth; @@ -73,12 +74,15 @@ std::string Date_(std::string date) MPD::SongIterator getSongsFromAlbum(const AlbumEntry &album) { 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()) { Mpd.AddSearch(MPD_TAG_ALBUM, album.entry().album()); - if (Config.media_library_albums_split_by_date) - Mpd.AddSearch(MPD_TAG_DATE, album.entry().date()); + if(!isAlbumOnly) { + if (Config.media_library_albums_split_by_date) + Mpd.AddSearch(MPD_TAG_DATE, album.entry().date()); + } } return Mpd.CommitSearchSongs(); } @@ -141,14 +145,14 @@ class SortAlbumEntries { typedef MediaLibrary::Album Album; LocaleStringComparison m_cmp; - + public: SortAlbumEntries() : m_cmp(std::locale(), Config.ignore_leading_the) { } bool operator()(const AlbumEntry &a, const AlbumEntry &b) const { return (*this)(a.entry(), b.entry()); } - + bool operator()(const Album &a, const Album &b) const { if (Config.media_library_sort_by_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)) { hasTwoColumns = 0; + isAlbumOnly = 0; itsLeftColWidth = COLS/3-1; itsMiddleColWidth = COLS/3; itsMiddleColStartX = itsLeftColWidth+1; @@ -305,15 +310,28 @@ void MediaLibrary::update() unsigned idx = 0; while (!(tag = s->get(Config.media_lib_primary_tag, idx++)).empty()) { - 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(); + 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(), + 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; @@ -879,7 +897,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(); @@ -892,8 +918,14 @@ void MediaLibrary::toggleColumnsMode() { std::string item_type = boost::locale::to_lower( tagTypeToString(Config.media_lib_primary_tag)); - std::string and_mtime = Config.media_library_sort_by_mtime ? " and mtime" : ""; - Albums.setTitle("Albums (sorted by " + item_type + and_mtime + ")"); + 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 @@ -924,8 +956,14 @@ void MediaLibrary::toggleSortMode() { std::string item_type = boost::locale::to_lower( tagTypeToString(Config.media_lib_primary_tag)); - std::string and_mtime = Config.media_library_sort_by_mtime ? (" " "and mtime") : ""; - Albums.setTitle("Albums (sorted by " + item_type + and_mtime + ")"); + 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 @@ -1070,13 +1108,15 @@ std::string AlbumToString(const AlbumEntry &ae) { if (hasTwoColumns) { - if (ae.entry().tag().empty()) - result += Config.empty_tag; - else - result += ae.entry().tag(); - result += " - "; + 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() ? "" : ae.entry().album(); }