diff --git a/approot/mediaplayer.xml b/approot/mediaplayer.xml
index 3494fa2b..f37292f4 100644
--- a/approot/mediaplayer.xml
+++ b/approot/mediaplayer.xml
@@ -44,6 +44,10 @@
-
+
+
+ {1}
+
+
diff --git a/approot/messages.xml b/approot/messages.xml
index 241caf7a..1bbe9621 100644
--- a/approot/messages.xml
+++ b/approot/messages.xml
@@ -209,10 +209,6 @@
Clear
Create new playlist
-
- Added {1} track
- Added {1} tracks
-
Play Queue
Play Queue full!
Radio mode
diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml
index 0439a9e5..48d8c295 100644
--- a/approot/messages_fr.xml
+++ b/approot/messages_fr.xml
@@ -209,10 +209,6 @@
Effacer
Créer une nouvelle liste de lecture
-
- {1} piste ajoutée
- {1} pistes ajoutées
-
Liste de lecture
Liste de lecture pleine!
Mode radio
diff --git a/approot/messages_it.xml b/approot/messages_it.xml
index 57d57209..3ed491c8 100644
--- a/approot/messages_it.xml
+++ b/approot/messages_it.xml
@@ -209,10 +209,6 @@
Cancella
-
- Aggiunta {1} traccia
- Aggiunte {1} tracce
-
Coda di riproduzione
Coda di riproduzione piena!
Modalità radio
diff --git a/src/lms/ui/LmsApplication.cpp b/src/lms/ui/LmsApplication.cpp
index 0e09f8ea..5437ef94 100644
--- a/src/lms/ui/LmsApplication.cpp
+++ b/src/lms/ui/LmsApplication.cpp
@@ -224,9 +224,7 @@ LmsApplication::init()
enableUpdates(true);
if (_authenticatedUser)
- {
onUserLoggedIn();
- }
else if (Service<::Auth::IPasswordService>::exists())
processPasswordAuth();
}
@@ -507,6 +505,11 @@ LmsApplication::createHome()
{
_mediaPlayer->stop();
});
+ _playQueue->trackCountChanged.connect([this] (std::size_t trackCount)
+ {
+ _mediaPlayer->onPlayQueueUpdated(trackCount);
+ });
+ _mediaPlayer->onPlayQueueUpdated(_playQueue->getCount());
const bool isAdmin {getUserType() == Database::UserType::ADMIN};
if (isAdmin)
diff --git a/src/lms/ui/MediaPlayer.cpp b/src/lms/ui/MediaPlayer.cpp
index 4bd40a2b..a5a2b21b 100644
--- a/src/lms/ui/MediaPlayer.cpp
+++ b/src/lms/ui/MediaPlayer.cpp
@@ -210,12 +210,9 @@ MediaPlayer::MediaPlayer()
_title = bindNew("title");
_artist = bindNew("artist");
_release = bindNew("release");
-
- {
- Wt::WPushButton* playQueueBtn {bindNew("playqueue-btn", Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn"), Wt::TextFormat::XHTML)};
- playQueueBtn->setLink(Wt::WLink {Wt::LinkType::InternalPath, "/playqueue"});
- playQueueBtn->setToolTip(tr("Lms.PlayQueue.playqueue"));
- }
+ _playQueue = bindNew("playqueue-btn", Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(0), Wt::TextFormat::XHTML);
+ _playQueue->setLink(Wt::WLink {Wt::LinkType::InternalPath, "/playqueue"});
+ _playQueue->setToolTip(tr("Lms.PlayQueue.playqueue"));
_settingsLoaded.connect([this](const std::string& settings)
{
@@ -330,5 +327,11 @@ MediaPlayer::setSettings(const Settings& settings)
}
}
+void
+MediaPlayer::onPlayQueueUpdated(std::size_t trackCount)
+{
+ _playQueue->setText(Wt::WString::tr("Lms.MediaPlayer.template.playqueue-btn").arg(trackCount));
+}
+
} // namespace UserInterface
diff --git a/src/lms/ui/MediaPlayer.hpp b/src/lms/ui/MediaPlayer.hpp
index 40307c4b..512e0270 100644
--- a/src/lms/ui/MediaPlayer.hpp
+++ b/src/lms/ui/MediaPlayer.hpp
@@ -101,7 +101,9 @@ class MediaPlayer : public Wt::WTemplate
void stop();
std::optional getSettings() const { return _settings; }
- void setSettings(const Settings& settings);
+ void setSettings(const Settings& settings);
+
+ void onPlayQueueUpdated(std::size_t trackCount);
// Signals
Wt::JSignal<> playPrevious;
@@ -123,9 +125,10 @@ class MediaPlayer : public Wt::WTemplate
Wt::JSignal _settingsLoaded;
- Wt::WText* _title {};
- Wt::WAnchor* _release {};
- Wt::WAnchor* _artist {};
+ Wt::WText* _title {};
+ Wt::WAnchor* _release {};
+ Wt::WAnchor* _artist {};
+ Wt::WPushButton* _playQueue {};
};
} // namespace UserInterface
diff --git a/src/lms/ui/PlayQueue.cpp b/src/lms/ui/PlayQueue.cpp
index 6face3a5..b128b563 100644
--- a/src/lms/ui/PlayQueue.cpp
+++ b/src/lms/ui/PlayQueue.cpp
@@ -343,6 +343,13 @@ PlayQueue::playNext()
loadTrack(*_trackPos + 1, true);
}
+std::size_t
+PlayQueue::getCount()
+{
+ auto transaction {LmsApp->getDbSession().createSharedTransaction()};
+ return getQueue()->getCount();
+}
+
void
PlayQueue::initTrackLists()
{
@@ -373,9 +380,10 @@ PlayQueue::updateInfo()
auto transaction {LmsApp->getDbSession().createSharedTransaction()};
const Database::TrackList::pointer queue {getQueue()};
- const auto trackCount {queue->getCount()};
+ const std::size_t trackCount {queue->getCount()};
_nbTracks->setText(Wt::WString::trn("Lms.track-count", trackCount).arg(trackCount));
_duration->setText(Utils::durationToString(queue->getDuration()));
+ trackCountChanged.emit(trackCount);
}
void
@@ -435,40 +443,24 @@ PlayQueue::playShuffled(const std::vector& trackIds)
clearTracks();
std::vector shuffledTrackIds {trackIds};
Random::shuffleContainer(shuffledTrackIds);
- const std::size_t nbAddedTracks {enqueueTracks(shuffledTrackIds)};
+ enqueueTracks(shuffledTrackIds);
loadTrack(0, true);
-
- notifyAddedTracks(nbAddedTracks);
}
void
PlayQueue::playOrAddLast(const std::vector& trackIds)
{
- const std::size_t nbAddedTracks {enqueueTracks(trackIds)};
+ enqueueTracks(trackIds);
if (!_trackPos)
loadTrack(0, true);
-
- notifyAddedTracks(nbAddedTracks);
}
void
PlayQueue::playAtIndex(const std::vector& trackIds, std::size_t index)
{
clearTracks();
- const std::size_t nbAddedTracks {enqueueTracks(trackIds)};
+ enqueueTracks(trackIds);
loadTrack(index, true);
-
- notifyAddedTracks(nbAddedTracks);
-}
-
-void
-PlayQueue::notifyAddedTracks(std::size_t nbAddedTracks) const
-{
- if (nbAddedTracks > 0)
- LmsApp->notifyMsg(Notification::Type::Info, Wt::WString::tr("Lms.PlayQueue.playqueue"), Wt::WString::trn("Lms.PlayQueue.nb-tracks-added", nbAddedTracks).arg(nbAddedTracks), std::chrono::seconds {2});
-
- if (isFull())
- LmsApp->notifyMsg(Notification::Type::Warning, Wt::WString::tr("Lms.PlayQueue.playqueue"), Wt::WString::tr("Lms.PlayQueue.playqueue-full"), std::chrono::seconds {2});
}
void
diff --git a/src/lms/ui/PlayQueue.hpp b/src/lms/ui/PlayQueue.hpp
index bef41f68..0599eb9e 100644
--- a/src/lms/ui/PlayQueue.hpp
+++ b/src/lms/ui/PlayQueue.hpp
@@ -66,7 +66,11 @@ class PlayQueue : public Template
// Signal emitted when track is unselected (has to be stopped)
Wt::Signal<> trackUnselected;
+ // Signal emitted when track count changed
+ Wt::Signal trackCountChanged;
+
constexpr std::size_t getCapacity() const { return _capacity; }
+ std::size_t getCount();
private:
void initTrackLists();