Implementing a repeat all funtion in the playqueue
This commit is contained in:
@@ -88,12 +88,15 @@
|
|||||||
<message id="Lms.Explore.TracksInfo.most-played">Top tracks</message>
|
<message id="Lms.Explore.TracksInfo.most-played">Top tracks</message>
|
||||||
|
|
||||||
|
|
||||||
<!--Playque-->
|
<!--Playqueue-->
|
||||||
|
<message id="Lms.PlayQueue.clear">Clear</message>
|
||||||
<message id="Lms.PlayQueue.nb-tracks">{1} tracks</message>
|
<message id="Lms.PlayQueue.nb-tracks">{1} tracks</message>
|
||||||
<message id="Lms.PlayQueue.nb-tracks-added">Added {1} tracks</message>
|
<message id="Lms.PlayQueue.nb-tracks-added">Added {1} tracks</message>
|
||||||
<message id="Lms.PlayQueue.nb-tracks-playing">Playing {1} tracks</message>
|
<message id="Lms.PlayQueue.nb-tracks-playing">Playing {1} tracks</message>
|
||||||
<message id="Lms.PlayQueue.playqueue">Play Queue</message>
|
<message id="Lms.PlayQueue.playqueue">Play Queue</message>
|
||||||
<message id="Lms.PlayQueue.radio-mode">Radio mode</message>
|
<message id="Lms.PlayQueue.radio-mode">Radio mode</message>
|
||||||
|
<message id="Lms.PlayQueue.repeat">Repeat</message>
|
||||||
|
<message id="Lms.PlayQueue.shuffle">Shuffle</message>
|
||||||
|
|
||||||
<!--PlayHistory-->
|
<!--PlayHistory-->
|
||||||
<message id="Lms.PlayHistory.playhistory">Play History</message>
|
<message id="Lms.PlayHistory.playhistory">Play History</message>
|
||||||
|
|||||||
+13
-7
@@ -2,20 +2,26 @@
|
|||||||
<messages xmlns:if="Wt.WTemplate.conditions">
|
<messages xmlns:if="Wt.WTemplate.conditions">
|
||||||
<!--FORMS message blocks-->
|
<!--FORMS message blocks-->
|
||||||
|
|
||||||
<message id="Lms.PlayQueue.clear">
|
<message id="Lms.PlayQueue.template.clear-btn">
|
||||||
<i class="fa fa-times-circle Lms-playqueue-btn"></i>
|
<i class="fa fa-times-circle Lms-playqueue-btn"></i>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
<message id="Lms.PlayQueue.shuffle">
|
<message id="Lms.PlayQueue.template.shuffle-btn">
|
||||||
<i class="fa fa-random Lms-playqueue-btn"></i>
|
<i class="fa fa-random Lms-playqueue-btn"></i>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
|
<message id="Lms.PlayQueue.template.repeat-btn">
|
||||||
|
<i class="fa fa-repeat Lms-playqueue-btn"></i>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message id="Lms.PlayQueue.template.radio-btn">
|
||||||
|
<i class="fa fa-rss Lms-playqueue-btn"></i>
|
||||||
|
</message>
|
||||||
|
|
||||||
<message id="Lms.PlayQueue.template">
|
<message id="Lms.PlayQueue.template">
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h2>${tr:Lms.PlayQueue.playqueue}</h2>
|
<h2>${tr:Lms.PlayQueue.playqueue}</h2>
|
||||||
${clear-btn}
|
${clear-btn}${shuffle-btn}${repeat-btn}${radio-btn}
|
||||||
${shuffle-btn}
|
|
||||||
${radio-mode}
|
|
||||||
<h4><small>${nb-tracks}</small></h4>
|
<h4><small>${nb-tracks}</small></h4>
|
||||||
</div>
|
</div>
|
||||||
${entries}
|
${entries}
|
||||||
@@ -26,11 +32,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
<message id="Lms.PlayQueue.play">
|
<message id="Lms.PlayQueue.template.play-btn">
|
||||||
<i class="fa fa-play-circle Lms-playqueue-btn"></i>
|
<i class="fa fa-play-circle Lms-playqueue-btn"></i>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
<message id="Lms.PlayQueue.delete">
|
<message id="Lms.PlayQueue.template.delete-btn">
|
||||||
<i class="fa fa-times-circle Lms-playqueue-btn"></i>
|
<i class="fa fa-times-circle Lms-playqueue-btn"></i>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
|
|||||||
@@ -248,6 +248,10 @@ a:hover {
|
|||||||
color: #337ab7;
|
color: #337ab7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Lms-playqueue-btn-selected {
|
||||||
|
color: #337ab7;
|
||||||
|
}
|
||||||
|
|
||||||
.Lms-playqueue-selected {
|
.Lms-playqueue-selected {
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-19
@@ -38,22 +38,25 @@ PlayQueue::PlayQueue()
|
|||||||
{
|
{
|
||||||
addFunction("tr", &Wt::WTemplate::Functions::tr);
|
addFunction("tr", &Wt::WTemplate::Functions::tr);
|
||||||
|
|
||||||
Wt::WText* clearBtn = bindNew<Wt::WText>("clear-btn", Wt::WString::tr("Lms.PlayQueue.clear"), Wt::TextFormat::XHTML);
|
Wt::WText* clearBtn = bindNew<Wt::WText>("clear-btn", Wt::WString::tr("Lms.PlayQueue.template.clear-btn"), Wt::TextFormat::XHTML);
|
||||||
|
clearBtn->setToolTip(Wt::WString::tr("Lms.PlayQueue.clear"));
|
||||||
_entriesContainer = bindNew<Wt::WContainerWidget>("entries");
|
|
||||||
|
|
||||||
_showMore = bindNew<Wt::WPushButton>("show-more", Wt::WString::tr("Lms.Explore.show-more"));
|
|
||||||
_showMore->setHidden(true);
|
|
||||||
|
|
||||||
Wt::WText* shuffleBtn = bindNew<Wt::WText>("shuffle-btn", Wt::WString::tr("Lms.PlayQueue.shuffle"), Wt::TextFormat::XHTML);
|
|
||||||
_radioMode = bindNew<Wt::WCheckBox>("radio-mode", Wt::WString::tr("Lms.PlayQueue.radio-mode"));
|
|
||||||
_nbTracks = bindNew<Wt::WText>("nb-tracks");
|
|
||||||
|
|
||||||
clearBtn->clicked().connect([=]
|
clearBtn->clicked().connect([=]
|
||||||
{
|
{
|
||||||
clearTracks();
|
clearTracks();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_entriesContainer = bindNew<Wt::WContainerWidget>("entries");
|
||||||
|
|
||||||
|
_showMore = bindNew<Wt::WPushButton>("show-more", Wt::WString::tr("Lms.Explore.show-more"));
|
||||||
|
_showMore->setHidden(true);
|
||||||
|
_showMore->clicked().connect([=]
|
||||||
|
{
|
||||||
|
addSome();
|
||||||
|
updateCurrentTrack(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
Wt::WText* shuffleBtn = bindNew<Wt::WText>("shuffle-btn", Wt::WString::tr("Lms.PlayQueue.template.shuffle-btn"), Wt::TextFormat::XHTML);
|
||||||
|
shuffleBtn->setToolTip(Wt::WString::tr("Lms.PlayQueue.shuffle"));
|
||||||
shuffleBtn->clicked().connect([=]
|
shuffleBtn->clicked().connect([=]
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@@ -65,12 +68,24 @@ PlayQueue::PlayQueue()
|
|||||||
addSome();
|
addSome();
|
||||||
});
|
});
|
||||||
|
|
||||||
_showMore->clicked().connect([=]
|
Wt::WText* repeatBtn = bindNew<Wt::WText>("repeat-btn", Wt::WString::tr("Lms.PlayQueue.template.repeat-btn"), Wt::TextFormat::XHTML);
|
||||||
|
repeatBtn->setToolTip(Wt::WString::tr("Lms.PlayQueue.repeat"));
|
||||||
|
repeatBtn->clicked().connect([=]
|
||||||
{
|
{
|
||||||
addSome();
|
_repeatAll = !_repeatAll;
|
||||||
updateCurrentTrack(true);
|
repeatBtn->toggleStyleClass("Lms-playqueue-btn-selected", _repeatAll);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Wt::WText* radioBtn = bindNew<Wt::WText>("radio-btn", Wt::WString::tr("Lms.PlayQueue.template.radio-btn"));
|
||||||
|
radioBtn->setToolTip(Wt::WString::tr("Lms.PlayQueue.radio-mode"));
|
||||||
|
radioBtn->clicked().connect([=]
|
||||||
|
{
|
||||||
|
_radioMode = !_radioMode;
|
||||||
|
radioBtn->toggleStyleClass("Lms-playqueue-btn-selected", _radioMode);
|
||||||
|
});
|
||||||
|
|
||||||
|
_nbTracks = bindNew<Wt::WText>("nb-tracks");
|
||||||
|
|
||||||
LmsApp->preQuit().connect([=]
|
LmsApp->preQuit().connect([=]
|
||||||
{
|
{
|
||||||
if (_tracklistId)
|
if (_tracklistId)
|
||||||
@@ -152,12 +167,17 @@ PlayQueue::load(std::size_t pos, bool play)
|
|||||||
// If out of range, stop playing
|
// If out of range, stop playing
|
||||||
if (pos >= tracklist->getCount())
|
if (pos >= tracklist->getCount())
|
||||||
{
|
{
|
||||||
stop();
|
if (!_repeatAll)
|
||||||
return;
|
{
|
||||||
|
stop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If last and radio mode, fill the next song
|
// If last and radio mode, fill the next song
|
||||||
if (_radioMode->checkState() == Wt::CheckState::Checked && pos == tracklist->getCount() - 1)
|
if (_radioMode && pos == tracklist->getCount() - 1)
|
||||||
addRadioTrack();
|
addRadioTrack();
|
||||||
|
|
||||||
_trackPos = pos;
|
_trackPos = pos;
|
||||||
@@ -293,7 +313,7 @@ PlayQueue::addSome()
|
|||||||
entry->bindWidget("release-name", LmsApplication::createReleaseAnchor(track->getRelease()));
|
entry->bindWidget("release-name", LmsApplication::createReleaseAnchor(track->getRelease()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Wt::WText* playBtn = entry->bindNew<Wt::WText>("play-btn", Wt::WString::tr("Lms.PlayQueue.play"), Wt::TextFormat::XHTML);
|
Wt::WText* playBtn = entry->bindNew<Wt::WText>("play-btn", Wt::WString::tr("Lms.PlayQueue.template.play-btn"), Wt::TextFormat::XHTML);
|
||||||
playBtn->clicked().connect(std::bind([=]
|
playBtn->clicked().connect(std::bind([=]
|
||||||
{
|
{
|
||||||
auto pos = _entriesContainer->indexOf(entry);
|
auto pos = _entriesContainer->indexOf(entry);
|
||||||
@@ -301,7 +321,7 @@ PlayQueue::addSome()
|
|||||||
load(pos, true);
|
load(pos, true);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
Wt::WText* delBtn = entry->bindNew<Wt::WText>("del-btn", Wt::WString::tr("Lms.PlayQueue.delete"), Wt::TextFormat::XHTML);
|
Wt::WText* delBtn = entry->bindNew<Wt::WText>("del-btn", Wt::WString::tr("Lms.PlayQueue.template.delete-btn"), Wt::TextFormat::XHTML);
|
||||||
delBtn->clicked().connect(std::bind([=]
|
delBtn->clicked().connect(std::bind([=]
|
||||||
{
|
{
|
||||||
// Remove the entry n both the widget tree and the playqueue
|
// Remove the entry n both the widget tree and the playqueue
|
||||||
|
|||||||
@@ -67,8 +67,9 @@ class PlayQueue : public Wt::WTemplate
|
|||||||
void load(std::size_t pos, bool play);
|
void load(std::size_t pos, bool play);
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
|
bool _repeatAll = false;
|
||||||
|
bool _radioMode = false;
|
||||||
boost::optional<Database::IdType> _tracklistId;
|
boost::optional<Database::IdType> _tracklistId;
|
||||||
Wt::WCheckBox* _radioMode;
|
|
||||||
Wt::WContainerWidget* _entriesContainer;
|
Wt::WContainerWidget* _entriesContainer;
|
||||||
Wt::WPushButton* _showMore;
|
Wt::WPushButton* _showMore;
|
||||||
Wt::WText* _nbTracks;
|
Wt::WText* _nbTracks;
|
||||||
|
|||||||
Reference in New Issue
Block a user