From 89e58b5adf3e0f3fb6ff23e7fe2049affa4d2c05 Mon Sep 17 00:00:00 2001 From: emeric Date: Sun, 3 Jan 2016 20:05:29 +0100 Subject: [PATCH] [UI/MOBILE] Removed the duplicated search bar --- approot/templates.xml | 12 +++ src/logger/Logger.hpp | 4 +- src/ui/LmsApplication.cpp | 35 ++++---- src/ui/audio/AudioPlayer.cpp | 7 +- src/ui/audio/mobile/MobileAudio.cpp | 128 +++++++++++++--------------- src/ui/audio/mobile/MobileAudio.hpp | 11 ++- 6 files changed, 100 insertions(+), 97 deletions(-) diff --git a/approot/templates.xml b/approot/templates.xml index e7a8985f..b7924f8d 100644 --- a/approot/templates.xml +++ b/approot/templates.xml @@ -2,6 +2,18 @@ + +
+ ${collapse-button} + + ${contents} +
+
+ ${title}
diff --git a/src/logger/Logger.hpp b/src/logger/Logger.hpp index 1f08c04a..b3b7b7a4 100644 --- a/src/logger/Logger.hpp +++ b/src/logger/Logger.hpp @@ -17,8 +17,7 @@ * along with LMS. If not, see . */ -#ifndef LOGGER_HPP__ -#define LOGGER_HPP__ +#pragma once #include #include @@ -55,4 +54,3 @@ std::string getSeverityName(Severity sev); #define LMS_LOG(module, level) Wt::log(getSeverityName(Severity::level)) << Wt::WLogger::sep << "[" << getModuleName(Module::module) << "]" << Wt::WLogger::sep -#endif diff --git a/src/ui/LmsApplication.cpp b/src/ui/LmsApplication.cpp index cdf5c7e7..10be2979 100644 --- a/src/ui/LmsApplication.cpp +++ b/src/ui/LmsApplication.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -204,9 +203,15 @@ LmsApplication::handleAuthEvent(void) contentsStack->setOverflow(Wt::WContainerWidget::OverflowAuto); contentsStack->addStyleClass("contents"); - // Setup a Left-aligned menu. - Wt::WMenu *leftMenu = new Wt::WMenu(contentsStack); - navigation->addMenu(leftMenu); + Wt::WMenu *menu = new Wt::WMenu(contentsStack); + navigation->addMenu(menu, Wt::AlignRight); + + Wt::WLineEdit *searchEdit = new Wt::WLineEdit(); + navigation->bindWidget("search", searchEdit); + searchEdit->setEmptyText("Search..."); + searchEdit->addStyleClass("navbar-form navbar-nav"); + searchEdit->setWidth(150); + // TODO add a span with a search icon Audio *audio; @@ -215,23 +220,18 @@ LmsApplication::handleAuthEvent(void) else audio = new Desktop::Audio(); - leftMenu->addItem("Audio", audio); + menu->addItem("Audio", audio); #if defined HAVE_VIDEO - leftMenu->addItem("Video", new VideoWidget()); + menu->addItem("Video", new VideoWidget()); #endif - leftMenu->addItem("Settings", new Settings::Settings()); - - // Setup a Right-aligned menu. - Wt::WMenu *rightMenu = new Wt::WMenu(); - - navigation->addMenu(rightMenu, Wt::AlignRight); + menu->addItem("Settings", new Settings::Settings()); Wt::WPopupMenu *popup = new Wt::WPopupMenu(); popup->addItem("Logout"); Wt::WMenuItem *item = new Wt::WMenuItem( CurrentAuthUser().identity(Wt::Auth::Identity::LoginName) ); - item->setMenu(popup); - rightMenu->addItem(item); + item->setMenu(popup); + menu->addItem(item); popup->itemSelected().connect(std::bind([=] (Wt::WMenuItem* item) { @@ -239,17 +239,12 @@ LmsApplication::handleAuthEvent(void) DbHandler().getLogin().logout(); }, std::placeholders::_1)); - // Add a Search control. - LineEdit *searchEdit = new LineEdit(500); - searchEdit->setEmptyText("Search..."); - - searchEdit->timedChanged().connect(std::bind([=] () + searchEdit->changed().connect(std::bind([=] () { // TODO: check which view is activated and search into it audio->search(searchEdit->text().toUTF8()); })); - navigation->addSearch(searchEdit, Wt::AlignLeft); layout->addWidget(navigation); layout->addWidget(contentsStack, 1); diff --git a/src/ui/audio/AudioPlayer.cpp b/src/ui/audio/AudioPlayer.cpp index 9b3d6196..f529dc78 100644 --- a/src/ui/audio/AudioPlayer.cpp +++ b/src/ui/audio/AudioPlayer.cpp @@ -25,6 +25,7 @@ #include #include "common/InputRange.hpp" +#include "logger/Logger.hpp" #include "LmsApplication.hpp" @@ -40,7 +41,7 @@ AudioPlayer::loadTrack(Database::Track::id_type trackId) Database::Track::pointer track = Database::Track::getById(DboSession(), trackId); if (!track) { - std::cerr << "no track for this id!" << std::endl; + LMS_LOG(UI, INFO) << "No track found for id " << trackId; return; } @@ -55,7 +56,7 @@ AudioPlayer::loadTrack(Database::Track::id_type trackId) if (!mediaFile.open() || !mediaFile.scan()) { - std::cerr << "cannot open file '" << track->getPath() << std::endl; + LMS_LOG(UI, ERROR) << "Cannot open file '" << track->getPath(); return; } @@ -90,6 +91,8 @@ AudioPlayer::AudioPlayer(Wt::WContainerWidget *parent) t->setTemplateText(Wt::WString::tr("wa-audio-player")); _audio = new Wt::WAudio(this); + _audio->setOptions(Wt::WAudio::Autoplay); + _audio->setPreloadMode(Wt::WAudio::PreloadAuto); _cover = new Wt::WImage(); t->bindWidget("cover", _cover); diff --git a/src/ui/audio/mobile/MobileAudio.cpp b/src/ui/audio/mobile/MobileAudio.cpp index 2a4eb065..b5d0c66a 100644 --- a/src/ui/audio/mobile/MobileAudio.cpp +++ b/src/ui/audio/mobile/MobileAudio.cpp @@ -20,9 +20,7 @@ #include #include -#include #include -#include #include "logger/Logger.hpp" #include "utils/Utils.hpp" @@ -30,11 +28,6 @@ #include "audio/AudioPlayer.hpp" #include "LmsApplication.hpp" -#include "ArtistSearch.hpp" -#include "ReleaseSearch.hpp" -#include "TrackSearch.hpp" -#include "TrackReleaseView.hpp" - #include "MobileAudio.hpp" #define SEARCH_NB_ITEMS 4 @@ -56,6 +49,26 @@ static void playTrack(AudioPlayer *audioPlayer, Database::Track::id_type trackId audioPlayer->loadTrack(track.id()); } +void +Audio::search(std::string text) +{ + // When a new search is done, output some results from: + // Artist + // Release + // Song + auto keywords = splitString(text, " ");; + + _releaseSearch->search(SearchFilter::ByNameAnd(SearchFilter::Field::Release, keywords), SEARCH_NB_ITEMS); + _artistSearch->search(SearchFilter::ByNameAnd(SearchFilter::Field::Artist, keywords), SEARCH_NB_ITEMS); + _trackSearch->search(SearchFilter::ByNameAnd(SearchFilter::Field::Track, keywords), SEARCH_NB_ITEMS); + + _artistSearch->show(); + _releaseSearch->show(); + _trackSearch->show(); + _trackReleaseView->hide(); +} + + Audio::Audio(Wt::WContainerWidget *parent) : UserInterface::Audio(parent) { @@ -63,21 +76,12 @@ Audio::Audio(Wt::WContainerWidget *parent) this->setStyleClass("container-fluid"); this->setPadding(60, Wt::Bottom); - Wt::WTemplate* search = new Wt::WTemplate(this); - search->setTemplateText(Wt::WString::tr("mobile-search")); + _artistSearch = new ArtistSearch(this); + _releaseSearch = new ReleaseSearch(this); + _trackSearch = new TrackSearch(this); - Wt::WLineEdit *edit = new Wt::WLineEdit(); - edit->setEmptyText("Search..."); - - search->bindWidget("search", edit); - search->setMargin(10); - - ArtistSearch* artistSearch = new ArtistSearch(this); - ReleaseSearch* releaseSearch = new ReleaseSearch(this); - TrackSearch* trackSearch = new TrackSearch(this); - - TrackReleaseView* trackReleaseView = new TrackReleaseView(this); - trackReleaseView->hide(); + _trackReleaseView = new TrackReleaseView(this); + _trackReleaseView->hide(); Wt::WTemplate* footer = new Wt::WTemplate(this); footer->setTemplateText(Wt::WString::tr("mobile-audio-footer")); @@ -85,83 +89,65 @@ Audio::Audio(Wt::WContainerWidget *parent) AudioPlayer* audioPlayer = new AudioPlayer(); footer->bindWidget("player", audioPlayer); - edit->changed().connect(std::bind([=] () + _artistSearch->moreArtistsSelected().connect(std::bind([=] { - // When a new search is done, output some results from: - // Artist - // Release - // Song - auto keywords = splitString(edit->text().toUTF8(), " ");; - - releaseSearch->search(SearchFilter::ByNameAnd(SearchFilter::Field::Release, keywords), SEARCH_NB_ITEMS); - artistSearch->search(SearchFilter::ByNameAnd(SearchFilter::Field::Artist, keywords), SEARCH_NB_ITEMS); - trackSearch->search(SearchFilter::ByNameAnd(SearchFilter::Field::Track, keywords), SEARCH_NB_ITEMS); - - artistSearch->show(); - releaseSearch->show(); - trackSearch->show(); - trackReleaseView->hide(); + _releaseSearch->hide(); + _trackSearch->hide(); + _artistSearch->show(); + _trackReleaseView->hide(); })); - artistSearch->moreArtistsSelected().connect(std::bind([=] + _artistSearch->artistSelected().connect(std::bind([=] (Artist::id_type artistId) { - releaseSearch->hide(); - trackSearch->hide(); - artistSearch->show(); - trackReleaseView->hide(); - })); + _artistSearch->hide(); + _trackSearch->hide(); + _releaseSearch->show(); + _trackReleaseView->hide(); - artistSearch->artistSelected().connect(std::bind([=] (Artist::id_type artistId) - { - artistSearch->hide(); - trackSearch->hide(); - releaseSearch->show(); - trackReleaseView->hide(); - - releaseSearch->search(SearchFilter::ById(SearchFilter::Field::Artist, artistId), 20); + _releaseSearch->search(SearchFilter::ById(SearchFilter::Field::Artist, artistId), 20); }, std::placeholders::_1)); - releaseSearch->moreReleasesSelected().connect(std::bind([=] + _releaseSearch->moreReleasesSelected().connect(std::bind([=] { - artistSearch->hide(); - trackSearch->hide(); - releaseSearch->show(); - trackReleaseView->hide(); + _artistSearch->hide(); + _trackSearch->hide(); + _releaseSearch->show(); + _trackReleaseView->hide(); })); - releaseSearch->releaseSelected().connect(std::bind([=] (Release::id_type releaseId) + _releaseSearch->releaseSelected().connect(std::bind([=] (Release::id_type releaseId) { - artistSearch->hide(); - releaseSearch->hide(); - trackSearch->hide(); - trackReleaseView->show(); + _artistSearch->hide(); + _releaseSearch->hide(); + _trackSearch->hide(); + _trackReleaseView->show(); - trackReleaseView->search(SearchFilter::ById(SearchFilter::Field::Release, releaseId), 40); + _trackReleaseView->search(SearchFilter::ById(SearchFilter::Field::Release, releaseId), 40); }, std::placeholders::_1)); - trackSearch->moreSelected().connect(std::bind([=] + _trackSearch->moreSelected().connect(std::bind([=] { - artistSearch->hide(); - releaseSearch->hide(); - trackSearch->show(); - trackReleaseView->hide(); + _artistSearch->hide(); + _releaseSearch->hide(); + _trackSearch->show(); + _trackReleaseView->hide(); })); - trackSearch->trackPlay().connect(std::bind([=] (Track::id_type id) + _trackSearch->trackPlay().connect(std::bind([=] (Track::id_type id) { playTrack(audioPlayer, id); }, std::placeholders::_1)); - trackReleaseView->trackPlay().connect(std::bind([=] (Track::id_type id) + _trackReleaseView->trackPlay().connect(std::bind([=] (Track::id_type id) { playTrack(audioPlayer, id); }, std::placeholders::_1)); // Initially, populate the widgets using an empty search { - artistSearch->search(SearchFilter(), SEARCH_NB_ITEMS); - releaseSearch->search(SearchFilter(), SEARCH_NB_ITEMS); - trackSearch->search(SearchFilter(), SEARCH_NB_ITEMS); + _artistSearch->search(SearchFilter(), SEARCH_NB_ITEMS); + _releaseSearch->search(SearchFilter(), SEARCH_NB_ITEMS); + _trackSearch->search(SearchFilter(), SEARCH_NB_ITEMS); } } diff --git a/src/ui/audio/mobile/MobileAudio.hpp b/src/ui/audio/mobile/MobileAudio.hpp index e10a3a57..a62e9951 100644 --- a/src/ui/audio/mobile/MobileAudio.hpp +++ b/src/ui/audio/mobile/MobileAudio.hpp @@ -24,6 +24,11 @@ #include "audio/Audio.hpp" +#include "ArtistSearch.hpp" +#include "ReleaseSearch.hpp" +#include "TrackSearch.hpp" +#include "TrackReleaseView.hpp" + namespace UserInterface { namespace Mobile { @@ -32,10 +37,14 @@ class Audio : public UserInterface::Audio public: Audio(Wt::WContainerWidget *parent = 0); - void search(std::string text) {} + void search(std::string text); private: + ArtistSearch* _artistSearch; + ReleaseSearch* _releaseSearch; + TrackSearch* _trackSearch; + TrackReleaseView* _trackReleaseView; }; } // namespace Mobile