Added a fully working 'Album-only' view
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
@@ -135,14 +139,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();
|
||||||
@@ -182,6 +186,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;
|
||||||
@@ -299,15 +304,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;
|
||||||
@@ -873,7 +891,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();
|
||||||
@@ -886,8 +912,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
|
||||||
@@ -918,8 +950,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
|
||||||
@@ -1064,13 +1102,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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user