Fixed last track not sent to ListenBrainz, fixes #438

This commit is contained in:
emeric
2024-03-27 23:42:26 +01:00
parent ac69582f4b
commit 2d01814ede
3 changed files with 61 additions and 54 deletions
+49 -46
View File
@@ -489,10 +489,12 @@ namespace lms::ui
// Events from MediaPlayer
_mediaPlayer->playNext.connect([this]
{
LMS_LOG(UI, DEBUG, "Received playNext from player");
_playQueue->playNext();
});
_mediaPlayer->playPrevious.connect([this]
{
LMS_LOG(UI, DEBUG, "Received playPrevious from player");
_playQueue->playPrevious();
});
@@ -501,58 +503,59 @@ namespace lms::ui
LMS_LOG(UI, DEBUG, "Received ScrobbleListenNow from player for trackId = " << trackId.toString());
const scrobbling::Listen listen{ getUserId(), trackId };
core::Service<scrobbling::IScrobblingService>::get()->listenStarted(listen);
});
_mediaPlayer->scrobbleListenFinished.connect([this](db::TrackId trackId, unsigned durationMs)
{
LMS_LOG(UI, DEBUG, "Received ScrobbleListenFinished from player for trackId = " << trackId.toString() << ", duration = " << (durationMs / 1000) << "s");
const std::chrono::milliseconds duration{ durationMs };
const scrobbling::Listen listen{ getUserId(), trackId };
core::Service<scrobbling::IScrobblingService>::get()->listenFinished(listen, std::chrono::duration_cast<std::chrono::seconds>(duration));
});
});
_mediaPlayer->scrobbleListenFinished.connect([this](db::TrackId trackId, unsigned durationMs)
{
LMS_LOG(UI, DEBUG, "Received ScrobbleListenFinished from player for trackId = " << trackId.toString() << ", duration = " << (durationMs / 1000) << "s");
const std::chrono::milliseconds duration{ durationMs };
const scrobbling::Listen listen{ getUserId(), trackId };
core::Service<scrobbling::IScrobblingService>::get()->listenFinished(listen, std::chrono::duration_cast<std::chrono::seconds>(duration));
});
_mediaPlayer->playbackEnded.connect([this]
{
_playQueue->onPlaybackEnded();
});
_mediaPlayer->playbackEnded.connect([this]
{
LMS_LOG(UI, DEBUG, "Received playbackEnded from player");
_playQueue->onPlaybackEnded();
});
_playQueue->trackSelected.connect([this](db::TrackId trackId, bool play, float replayGain)
{
_mediaPlayer->loadTrack(trackId, play, replayGain);
});
_playQueue->trackSelected.connect([this](db::TrackId trackId, bool play, float replayGain)
{
_mediaPlayer->loadTrack(trackId, play, replayGain);
});
_playQueue->trackUnselected.connect([this]
{
_mediaPlayer->stop();
});
_playQueue->trackCountChanged.connect([this](std::size_t trackCount)
{
_mediaPlayer->onPlayQueueUpdated(trackCount);
});
_mediaPlayer->onPlayQueueUpdated(_playQueue->getCount());
_playQueue->trackUnselected.connect([this]
{
_mediaPlayer->stop();
});
_playQueue->trackCountChanged.connect([this](std::size_t trackCount)
{
_mediaPlayer->onPlayQueueUpdated(trackCount);
});
_mediaPlayer->onPlayQueueUpdated(_playQueue->getCount());
const bool isAdmin{ getUserType() == db::UserType::ADMIN };
if (isAdmin)
{
_scannerEvents.scanComplete.connect([this](const scanner::ScanStats& stats)
{
notifyMsg(Notification::Type::Info,
Wt::WString::tr("Lms.Admin.Database.database"),
Wt::WString::tr("Lms.Admin.Database.scan-complete")
.arg(static_cast<unsigned>(stats.nbFiles()))
.arg(static_cast<unsigned>(stats.additions))
.arg(static_cast<unsigned>(stats.updates))
.arg(static_cast<unsigned>(stats.deletions))
.arg(static_cast<unsigned>(stats.duplicates.size()))
.arg(static_cast<unsigned>(stats.errors.size())));
});
}
const bool isAdmin{ getUserType() == db::UserType::ADMIN };
if (isAdmin)
{
_scannerEvents.scanComplete.connect([this](const scanner::ScanStats& stats)
{
notifyMsg(Notification::Type::Info,
Wt::WString::tr("Lms.Admin.Database.database"),
Wt::WString::tr("Lms.Admin.Database.scan-complete")
.arg(static_cast<unsigned>(stats.nbFiles()))
.arg(static_cast<unsigned>(stats.additions))
.arg(static_cast<unsigned>(stats.updates))
.arg(static_cast<unsigned>(stats.deletions))
.arg(static_cast<unsigned>(stats.duplicates.size()))
.arg(static_cast<unsigned>(stats.errors.size())));
});
}
internalPathChanged().connect(mainStack, [=]
{
handlePathChange(*mainStack, isAdmin);
});
internalPathChanged().connect(mainStack, [=]
{
handlePathChange(*mainStack, isAdmin);
});
handlePathChange(*mainStack, isAdmin);
handlePathChange(*mainStack, isAdmin);
}
void LmsApplication::notify(const Wt::WEvent& event)
+1 -1
View File
@@ -253,7 +253,7 @@ namespace lms::ui
<< " trackId :\"" << trackId.toString() << "\","
<< " nativeResource: \"" << nativeResource << "\","
<< " transcodingResource: \"" << transcodingResource << "\","
<< " duration: " << std::chrono::duration_cast<std::chrono::seconds>(track->getDuration()).count() << ","
<< " duration: " << std::chrono::duration_cast<std::chrono::duration<float>>(track->getDuration()).count() << ","
<< " replayGain: " << replayGain << ","
<< " title: \"" << core::stringUtils::jsEscape(track->getName()) << "\","
<< " artist: \"" << (!artists.empty() ? core::stringUtils::jsEscape(track->getArtistDisplayName()) : "") << "\","