diff --git a/approot/mediaplayer.xml b/approot/mediaplayer.xml index 949cefd3..f03eb4e5 100644 --- a/approot/mediaplayer.xml +++ b/approot/mediaplayer.xml @@ -2,17 +2,15 @@ - + +
-
...
-
-
+
+ ${title}${artist}${release}
00:00
00:00
-
-
diff --git a/docroot/js/mediaplayer.js b/docroot/js/mediaplayer.js index 71e1ec46..fc430683 100644 --- a/docroot/js/mediaplayer.js +++ b/docroot/js/mediaplayer.js @@ -44,9 +44,6 @@ LMS.mediaplayer = function () { _elems.pause = document.getElementById("lms-mp-pause"); _elems.previous = document.getElementById("lms-mp-previous"); _elems.next = document.getElementById("lms-mp-next"); - _elems.title = document.getElementById("lms-mp-title"); - _elems.artist = document.getElementById("lms-mp-artist"); - _elems.release = document.getElementById("lms-mp-release"); _elems.duration = document.getElementById("lms-mp-duration"); _elems.time = document.getElementById("lms-mp-time"); _elems.cover = document.getElementById("lms-mp-cover"); @@ -79,14 +76,11 @@ LMS.mediaplayer = function () { } var loadTrack = function(params, autoplay) { - console.log("Loading track '" + params.name + "', release = '" + params.release + "', artist = '" + params.artist + "', resource = '" + params.resource + "', imgResource = '" + params.imgResource + "'"); + console.log("Loading track, resource = '" + params.resource + "', imgResource = '" + params.imgResource + "'"); _offset = 0; _duration = params.duration; - _elems.title.innerHTML = params.name; - _elems.artist.innerHTML = params.artist; - _elems.release.innerHTML = params.release; _elems.audio.src = params.resource; _elems.duration.innerHTML = _durationToString(_duration, _duration > 3600); _elems.time.innerHTML = _durationToString(0, _duration > 3600) diff --git a/src/ui/LmsApplication.cpp b/src/ui/LmsApplication.cpp index 80f3433d..78ee608c 100644 --- a/src/ui/LmsApplication.cpp +++ b/src/ui/LmsApplication.cpp @@ -150,10 +150,16 @@ LmsApplication::finalize() preQuit().emit(); } +Wt::WLink +LmsApplication::createArtistLink(Database::Artist::pointer artist) +{ + return Wt::WLink(Wt::LinkType::InternalPath, "/artist/" + std::to_string(artist.id())); +} + std::unique_ptr LmsApplication::createArtistAnchor(Database::Artist::pointer artist, bool addText) { - auto res = std::make_unique(Wt::WLink(Wt::LinkType::InternalPath, "/artist/" + std::to_string(artist.id()))); + auto res = std::make_unique(createArtistLink(artist)); if (addText) { @@ -164,10 +170,16 @@ LmsApplication::createArtistAnchor(Database::Artist::pointer artist, bool addTex return res; } +Wt::WLink +LmsApplication::createReleaseLink(Database::Release::pointer release) +{ + return Wt::WLink(Wt::LinkType::InternalPath, "/release/" + std::to_string(release.id())); +} + std::unique_ptr LmsApplication::createReleaseAnchor(Database::Release::pointer release, bool addText) { - auto res = std::make_unique(Wt::WLink(Wt::LinkType::InternalPath, "/release/" + std::to_string(release.id()))); + auto res = std::make_unique(createReleaseLink(release)); if (addText) { diff --git a/src/ui/LmsApplication.hpp b/src/ui/LmsApplication.hpp index 21d2eaaf..2c084a61 100644 --- a/src/ui/LmsApplication.hpp +++ b/src/ui/LmsApplication.hpp @@ -72,7 +72,9 @@ class LmsApplication : public Wt::WApplication void goHomeAndQuit(); void notifyMsg(const Wt::WString& message); + static Wt::WLink createArtistLink(Database::Artist::pointer artist); static std::unique_ptr createArtistAnchor(Database::Artist::pointer artist, bool addText = true); + static Wt::WLink createReleaseLink(Database::Release::pointer release); static std::unique_ptr createReleaseAnchor(Database::Release::pointer release, bool addText = true); static std::unique_ptr createCluster(Database::Cluster::pointer cluster, bool canDelete = false); diff --git a/src/ui/MediaPlayer.cpp b/src/ui/MediaPlayer.cpp index 961d33d2..758d4859 100644 --- a/src/ui/MediaPlayer.cpp +++ b/src/ui/MediaPlayer.cpp @@ -19,8 +19,6 @@ #include "MediaPlayer.hpp" -#include - #include "av/AvInfo.hpp" #include "utils/Logger.hpp" @@ -35,17 +33,21 @@ namespace UserInterface { MediaPlayer::MediaPlayer() -: Wt::WTemplate(Wt::WString::tr("template-mediaplayer")), +: Wt::WTemplate(Wt::WString::tr("Lms.MediaPlayer.template")), playbackEnded(this, "playbackEnded"), playPrevious(this, "playPrevious"), playNext(this, "playNext") { - wApp->doJavaScript("LMS.mediaplayer.init(" + jsRef() + ")"); -} + _title = bindNew("title"); + _title->setTextFormat(Wt::TextFormat::Plain); -static std::string escape(const std::string& str) -{ - return boost::replace_all_copy(str, "\"", "\\\""); + _artist = bindNew("artist"); + _artist->setTextFormat(Wt::TextFormat::Plain); + + _release = bindNew("release"); + _release->setTextFormat(Wt::TextFormat::Plain); + + wApp->doJavaScript("LMS.mediaplayer.init(" + jsRef() + ")"); } void @@ -66,9 +68,6 @@ MediaPlayer::playTrack(Database::IdType trackId) std::ostringstream oss; oss << "var params = {" - << " name: \"" << escape(track->getName()) + "\"," - << " release: " << (track->getRelease() ? "\"" + escape(track->getRelease()->getName()) + "\"" : "undefined" ) << "," - << " artist: " << (track->getArtist() ? "\"" + escape(track->getArtist()->getName()) + "\"" : "undefined" ) << "," << " resource: \"" << resource << "\"," << " duration: " << std::chrono::duration_cast(track->getDuration()).count() << "," << " imgResource: \"" << imgResource << "\"," @@ -77,6 +76,20 @@ MediaPlayer::playTrack(Database::IdType trackId) LMS_LOG(UI, DEBUG) << "Runing js = '" << oss.str() << "'"; + _title->setText(Wt::WString::fromUTF8(track->getName())); + + if (track->getArtist()) + { + _artist->setText(Wt::WString::fromUTF8(track->getArtist()->getName())); + _artist->setLink(LmsApp->createArtistLink(track->getArtist())); + } + + if (track->getRelease()) + { + _release->setText(Wt::WString::fromUTF8(track->getRelease()->getName())); + _release->setLink(LmsApp->createReleaseLink(track->getRelease())); + } + wApp->doJavaScript(oss.str()); } catch (Av::MediaFileException& e) diff --git a/src/ui/MediaPlayer.hpp b/src/ui/MediaPlayer.hpp index eec209b7..d5d83315 100644 --- a/src/ui/MediaPlayer.hpp +++ b/src/ui/MediaPlayer.hpp @@ -19,8 +19,10 @@ #pragma once +#include #include #include +#include #include "database/Types.hpp" @@ -41,6 +43,9 @@ class MediaPlayer : public Wt::WTemplate private: + Wt::WText* _title; + Wt::WAnchor* _release; + Wt::WAnchor* _artist; }; } // namespace UserInterface