From 49b37d34e005dfee6cc785ac9de404751e80b81d Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 4 Apr 2015 20:09:11 +0200 Subject: [PATCH] [UI] Mobile audio player inside a footer: first draft --- src/ui/LmsApplication.cpp | 1 + src/ui/approot/templates.xml | 18 +++++++-- src/ui/audio/mobile/MobileAudio.cpp | 10 ++--- .../audio/mobile/MobileAudioMediaPlayer.cpp | 37 ++++++++++++++++++- .../audio/mobile/MobileAudioMediaPlayer.hpp | 13 +++++-- src/ui/docroot/css/lms.css | 9 +++++ 6 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/ui/LmsApplication.cpp b/src/ui/LmsApplication.cpp index 7aaaebc1..ce3e3a8e 100644 --- a/src/ui/LmsApplication.cpp +++ b/src/ui/LmsApplication.cpp @@ -50,6 +50,7 @@ namespace { bool agentIsMobile() { const Wt::WEnvironment& env = Wt::WApplication::instance()->environment(); + return true; return (env.agentIsIEMobile() || env.agentIsMobileWebKit() || env.userAgent().find("Mobile") != std::string::npos // Workaround for firefox diff --git a/src/ui/approot/templates.xml b/src/ui/approot/templates.xml index 7b0f9bf8..879bc3b4 100644 --- a/src/ui/approot/templates.xml +++ b/src/ui/approot/templates.xml @@ -338,7 +338,7 @@
-
${text}
+
${text}
@@ -389,9 +389,21 @@ + + + + -
-
${player}
+
+
+
${prev}
+
${play}${pause}
+
${next}
+
${cover}
+
${volume}
+
diff --git a/src/ui/audio/mobile/MobileAudio.cpp b/src/ui/audio/mobile/MobileAudio.cpp index 712a6998..d075b263 100644 --- a/src/ui/audio/mobile/MobileAudio.cpp +++ b/src/ui/audio/mobile/MobileAudio.cpp @@ -60,8 +60,8 @@ _db(db) ReleaseSearch* releaseSearch = new ReleaseSearch(_db, this); TrackSearch* trackSearch = new TrackSearch(_db, this); - Wt::WTemplate* playerTemplate = new Wt::WTemplate(this); - playerTemplate->setTemplateText(Wt::WString::tr("mobile-audio-player")); + Wt::WTemplate* footer = new Wt::WTemplate(this); + footer->setTemplateText(Wt::WString::tr("mobile-audio-footer")); Wt::Dbo::Transaction transaction(_db.getSession()); Database::User::pointer user = _db.getCurrentUser(); @@ -79,8 +79,8 @@ _db(db) encoding = AudioMediaPlayer::getBestEncoding(); } - AudioMediaPlayer* mediaPlayer = new AudioMediaPlayer(encoding); - playerTemplate->bindWidget("player", mediaPlayer); + AudioMediaPlayer* mediaPlayer = new AudioMediaPlayer(db, encoding); + footer->bindWidget("player", mediaPlayer); edit->changed().connect(std::bind([=] () { std::string text = edit->text().toUTF8(); @@ -207,7 +207,7 @@ _db(db) Transcode::Parameters parameters(inputFile, Transcode::Format::get(encoding)); parameters.setBitrate(Transcode::Stream::Audio, 96000); - mediaPlayer->play(parameters); + mediaPlayer->play(track.id(), parameters); } } , std::placeholders::_1)); diff --git a/src/ui/audio/mobile/MobileAudioMediaPlayer.cpp b/src/ui/audio/mobile/MobileAudioMediaPlayer.cpp index c7142f63..5bf0f039 100644 --- a/src/ui/audio/mobile/MobileAudioMediaPlayer.cpp +++ b/src/ui/audio/mobile/MobileAudioMediaPlayer.cpp @@ -17,6 +17,10 @@ * along with LMS. If not, see . */ +#include +#include +#include +#include #include "MobileAudioMediaPlayer.hpp" @@ -32,18 +36,45 @@ AudioMediaPlayer::getBestEncoding() return Wt::WMediaPlayer::MP3; } -AudioMediaPlayer::AudioMediaPlayer(Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent) +AudioMediaPlayer::AudioMediaPlayer(Database::Handler& db, Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent) : Wt::WContainerWidget(parent), _player(nullptr), _encoding(encoding) { + _coverResource = new CoverResource(db, 56); + + Wt::WTemplate* container = new Wt::WTemplate(this); + container->setTemplateText(Wt::WString::tr("mobile-audio-player")); + + Wt::WPushButton *prev = new Wt::WPushButton("<<"); + container->bindWidget("prev", prev); + + Wt::WPushButton *play = new Wt::WPushButton("Play"); + container->bindWidget("play", play); + + Wt::WPushButton *pause = new Wt::WPushButton("Pause"); + container->bindWidget("pause", pause); + + Wt::WPushButton *next = new Wt::WPushButton(">>"); + container->bindWidget("next", next); + + _cover = new Wt::WImage(); + container->bindWidget("cover", _cover); + + Wt::WSlider *volume = new Wt::WSlider(); + container->bindWidget("volume", volume); + _player = new Wt::WMediaPlayer(Wt::WMediaPlayer::Audio, this); _player->addSource( _encoding, "" ); + _player->setControlsWidget( 0 ); + _player->setButton(Wt::WMediaPlayer::Play, play); + _player->setButton(Wt::WMediaPlayer::Pause, pause); + } void -AudioMediaPlayer::play(const Transcode::Parameters& parameters) +AudioMediaPlayer::play(Database::Track::id_type trackId, const Transcode::Parameters& parameters) { // FIXME memleak here AvConvTranscodeStreamResource *resource = new AvConvTranscodeStreamResource( parameters, this ); @@ -52,6 +83,8 @@ AudioMediaPlayer::play(const Transcode::Parameters& parameters) _player->addSource( _encoding, Wt::WLink(resource)); _player->play(); + + _cover->setImageLink( Wt::WLink (_coverResource->getTrackUrl(trackId))); } } // namespace UserInterface diff --git a/src/ui/audio/mobile/MobileAudioMediaPlayer.hpp b/src/ui/audio/mobile/MobileAudioMediaPlayer.hpp index bde14de3..b222c248 100644 --- a/src/ui/audio/mobile/MobileAudioMediaPlayer.hpp +++ b/src/ui/audio/mobile/MobileAudioMediaPlayer.hpp @@ -22,7 +22,10 @@ #include #include +#include +#include "database/DatabaseHandler.hpp" +#include "resource/CoverResource.hpp" #include "transcode/Parameters.hpp" namespace UserInterface { @@ -34,17 +37,21 @@ class AudioMediaPlayer : public Wt::WContainerWidget static Wt::WMediaPlayer::Encoding getBestEncoding(); - AudioMediaPlayer(Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent = 0); + AudioMediaPlayer(Database::Handler& db, Wt::WMediaPlayer::Encoding encoding, Wt::WContainerWidget *parent = 0); - void play(const Transcode::Parameters& parameters); + void play(Database::Track::id_type trackId, const Transcode::Parameters& parameters); Wt::WMediaPlayer::Encoding getEncoding() const { return _encoding; } private: - Wt::WMediaPlayer *_player; + CoverResource* _coverResource; + + Wt::WMediaPlayer* _player; Wt::WMediaPlayer::Encoding _encoding; + Wt::WImage* _cover; + }; } // namespace UserInterface diff --git a/src/ui/docroot/css/lms.css b/src/ui/docroot/css/lms.css index 68c40fa1..df0c362a 100644 --- a/src/ui/docroot/css/lms.css +++ b/src/ui/docroot/css/lms.css @@ -58,6 +58,7 @@ div.contents { .mobile-search-title { font-weight: bold; height: 32px; + line-height: 32px; background-color: grey; color: white; text-align: center; @@ -96,3 +97,11 @@ div.contents { align-items: center; } +.mobile-audio-footer { + background-color: #f5f5f5; + bottom: 0; + height: 60px; + position: absolute; + width: 100%; +} +