${releases}
diff --git a/approot/tracks.xml b/approot/tracks.xml
index 846b8184..34384ee0 100644
--- a/approot/tracks.xml
+++ b/approot/tracks.xml
@@ -8,7 +8,7 @@
${tracks}
${loading-indicator class="Lms-horizontal-center Lms-loading-indicator"}
@@ -32,7 +32,7 @@
- ${play-btn}${more-btn}
+ ${play-btn class="Lms-explore-btn Lms-btn"}${more-btn class="Lms-explore-btn Lms-btn"}
${duration}
diff --git a/docroot/css/lms.css b/docroot/css/lms.css
index e0026384..d8020abc 100644
--- a/docroot/css/lms.css
+++ b/docroot/css/lms.css
@@ -112,9 +112,7 @@ a.Lms-artistname:hover, a.Lms-artistname:focus {
}
.Lms-explore-btn {
- font-size: 24px !important;
- text-align: left;
- width: 28px;
+ font-size: 24px;
}
.Lms-explore-clusters {
@@ -185,7 +183,7 @@ a.Lms-artistname:hover, a.Lms-artistname:focus {
}
.Lms-explore-release-entry {
- min-height: 32px;
+ min-height: 34px;
}
.Lms-explore-release-entry:hover .Lms-explore-release-entry-controls {
@@ -278,8 +276,7 @@ a.Lms-artistname:hover, a.Lms-artistname:focus {
}
.Lms-playqueue-btn {
- font-size: 24px !important;
- text-align: left;
+ font-size: 24px;
}
.Lms-playqueue-entry:hover .Lms-playqueue-entry-controls {
@@ -350,8 +347,6 @@ a.Lms-artistname:hover, a.Lms-artistname:focus {
.Lms-player-btn-controls {
font-size: 40px !important;
- text-align: center;
- width: 1.1em;
}
.Lms-player-controls {
diff --git a/src/lms/ui/PlayQueue.cpp b/src/lms/ui/PlayQueue.cpp
index c1bd31f1..9d971ab6 100644
--- a/src/lms/ui/PlayQueue.cpp
+++ b/src/lms/ui/PlayQueue.cpp
@@ -19,7 +19,7 @@
#include "PlayQueue.hpp"
-#include
+#include
#include
#include "database/Cluster.hpp"
@@ -35,6 +35,7 @@
#include "common/LoadingIndicator.hpp"
#include "resource/CoverResource.hpp"
+#include "resource/DownloadResource.hpp"
#include "LmsApplication.hpp"
#include "MediaPlayer.hpp"
#include "TrackStringUtils.hpp"
@@ -414,6 +415,7 @@ PlayQueue::addSome()
{
const auto tracklistEntryId {tracklistEntry.id()};
const auto track {tracklistEntry->getTrack()};
+ const Database::IdType trackId {track->id()};
Wt::WTemplate* entry = _entriesContainer->addNew(Wt::WString::tr("Lms.PlayQueue.template.entry"));
@@ -459,7 +461,7 @@ PlayQueue::addSome()
entry->bindString("duration", trackDurationToString(track->getDuration()), Wt::TextFormat::Plain);
- Wt::WText* playBtn = entry->bindNew("play-btn", Wt::WString::tr("Lms.PlayQueue.template.play-btn"), Wt::TextFormat::XHTML);
+ Wt::WText* playBtn {entry->bindNew("play-btn", Wt::WString::tr("Lms.PlayQueue.template.play-btn"), Wt::TextFormat::XHTML)};
playBtn->clicked().connect(std::bind([=]
{
auto pos = _entriesContainer->indexOf(entry);
@@ -467,8 +469,8 @@ PlayQueue::addSome()
loadTrack(pos, true);
}));
- Wt::WText* delBtn = entry->bindNew("del-btn", Wt::WString::tr("Lms.PlayQueue.template.delete-btn"), Wt::TextFormat::XHTML);
- delBtn->clicked().connect(std::bind([=]
+ Wt::WText* delBtn {entry->bindNew("del-btn", Wt::WString::tr("Lms.PlayQueue.template.delete-btn"), Wt::TextFormat::XHTML)};
+ delBtn->clicked().connect([=]
{
// Remove the entry n both the widget tree and the playqueue
{
@@ -488,8 +490,39 @@ PlayQueue::addSome()
_entriesContainer->removeWidget(entry);
updateInfo();
- }));
+ });
+ Wt::WText* moreBtn {entry->bindNew("more-btn", Wt::WString::tr("Lms.PlayQueue.template.more-btn"), Wt::TextFormat::XHTML)};
+ moreBtn->clicked().connect([=]
+ {
+ Wt::WPopupMenu* popup {LmsApp->createPopupMenu()};
+
+ bool isStarred {};
+ {
+ auto transaction {LmsApp->getDbSession().createSharedTransaction()};
+
+ if (auto track {Database::Track::getById(LmsApp->getDbSession(), trackId)})
+ isStarred = LmsApp->getUser()->hasStarredTrack(track);
+ }
+ popup->addItem(Wt::WString::tr(isStarred ? "Lms.Explore.unstar" : "Lms.Explore.star"))
+ ->triggered().connect(moreBtn, [=]
+ {
+ auto transaction {LmsApp->getDbSession().createUniqueTransaction()};
+
+ auto track {Database::Track::getById(LmsApp->getDbSession(), trackId)};
+ if (!track)
+ return;
+
+ if (isStarred)
+ LmsApp->getUser().modify()->unstarTrack(track);
+ else
+ LmsApp->getUser().modify()->starTrack(track);
+ });
+ popup->addItem(Wt::WString::tr("Lms.Explore.download"))
+ ->setLink(Wt::WLink {std::make_unique(trackId)});
+
+ popup->popup(moreBtn);
+ });
}
if (static_cast(_entriesContainer->count()) < tracklist->getCount())