|
|
|
|
@ -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(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -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,6 +310,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(), |
|
|
|
|
@ -316,6 +333,7 @@ void MediaLibrary::update() |
|
|
|
|
it->second = s->getMTime(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
size_t idx = 0; |
|
|
|
|
for (const auto &album : albums) |
|
|
|
|
{ |
|
|
|
|
@ -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,9 +918,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" : ""); |
|
|
|
|
@ -924,9 +956,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 |
|
|
|
|
{ |
|
|
|
|
@ -1070,13 +1108,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(); |
|
|
|
|
} |
|
|
|
|
|