From 3b9745bd54624c8d2d9b2d4271d0bcaa05df3a39 Mon Sep 17 00:00:00 2001 From: emeric Date: Thu, 10 Dec 2015 19:52:51 +0100 Subject: [PATCH] [UI/Mobile] Search keywords are now ANDed --- src/database/SearchFilter.cpp | 2 ++ src/database/SearchFilter.hpp | 15 +++++++++++++-- src/ui/audio/mobile/MobileAudio.cpp | 6 +++--- src/ui/audio/mobile/TrackSearch.hpp | 2 -- test/TestWtAudio.cpp | 19 +++++++++++++++---- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/database/SearchFilter.cpp b/src/database/SearchFilter.cpp index 44c227cb..f6dbaa1c 100644 --- a/src/database/SearchFilter.cpp +++ b/src/database/SearchFilter.cpp @@ -17,6 +17,8 @@ * along with LMS. If not, see . */ +#include "logger/Logger.hpp" + #include "SearchFilter.hpp" namespace Database diff --git a/src/database/SearchFilter.hpp b/src/database/SearchFilter.hpp index 00b3f8fc..ad8716d8 100644 --- a/src/database/SearchFilter.hpp +++ b/src/database/SearchFilter.hpp @@ -64,12 +64,23 @@ class SearchFilter return SearchFilter({{field, {id} }}); } - // Single Field Name match - static SearchFilter ByName(Field field, std::vector keywords) + // Single Field Name match OR + static SearchFilter ByNameOr(Field field, std::vector keywords) { return NameLikeMatch({{{field, keywords}}}); } + // Single Field Name match AND + static SearchFilter ByNameAnd(Field field, std::vector keywords) + { + NameLikeMatchType nameLikeMatch; + + for (auto keyword : keywords) + nameLikeMatch.push_back({{{field, {keyword}}}}); + + return NameLikeMatch(nameLikeMatch); + } + // The filter is a AND of the following conditions: // ((Field1.name LIKE STR1-1 OR Field1.name LIKE STR1-2 ...) OR (Field2.name LIKE STR2-1 OR Field2.name LIKE STR2-2 ...) ... diff --git a/src/ui/audio/mobile/MobileAudio.cpp b/src/ui/audio/mobile/MobileAudio.cpp index 31816f25..9f8cd7d8 100644 --- a/src/ui/audio/mobile/MobileAudio.cpp +++ b/src/ui/audio/mobile/MobileAudio.cpp @@ -95,9 +95,9 @@ Audio::Audio(Wt::WContainerWidget *parent) // Song auto keywords = splitString(edit->text().toUTF8(), " ");; - releaseSearch->search(SearchFilter::ByName(SearchFilter::Field::Release, keywords), SEARCH_NB_ITEMS); - artistSearch->search(SearchFilter::ByName(SearchFilter::Field::Artist, keywords), SEARCH_NB_ITEMS); - trackSearch->search(SearchFilter::ByName(SearchFilter::Field::Track, keywords), SEARCH_NB_ITEMS); + 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(); diff --git a/src/ui/audio/mobile/TrackSearch.hpp b/src/ui/audio/mobile/TrackSearch.hpp index adc80189..3ca95c95 100644 --- a/src/ui/audio/mobile/TrackSearch.hpp +++ b/src/ui/audio/mobile/TrackSearch.hpp @@ -20,8 +20,6 @@ #ifndef UI_MOBILE_TRACK_SEARCH_HPP #define UI_MOBILE_TRACK_SEARCH_HPP -#include - #include #include diff --git a/test/TestWtAudio.cpp b/test/TestWtAudio.cpp index 4cf7cebc..d53541c5 100644 --- a/test/TestWtAudio.cpp +++ b/test/TestWtAudio.cpp @@ -33,7 +33,7 @@ class InputRange : public Wt::WWebWidget }; -Wt::WString MyPlayerTemplate = "${prev} ${play-pause} ${next} ${cover} ${artist} ${track} ${release} ${curtime} ${seekbar} ${duration} ${volume}"; +Wt::WString MyPlayerTemplate = "${shuffle} ${repeat} ${playlist} ${prev} ${play-pause} ${next} ${cover} ${artist} ${track} ${release} ${curtime} ${seekbar} ${duration} ${volume}"; class MyPlayer : public Wt::WContainerWidget { @@ -124,13 +124,22 @@ class MyPlayer : public Wt::WContainerWidget InputRange *volumeSlider = new InputRange(); t->bindWidget("volume", volumeSlider); - Wt::WPushButton *prevBtn = new Wt::WPushButton("<<"); + Wt::WPushButton *playlistBtn = new Wt::WPushButton("", Wt::XHTMLText); + t->bindWidget("playlist", playlistBtn); + + Wt::WPushButton *repeatBtn = new Wt::WPushButton("", Wt::XHTMLText); + t->bindWidget("repeat", repeatBtn); + + Wt::WPushButton *shuffleBtn = new Wt::WPushButton("", Wt::XHTMLText); + t->bindWidget("shuffle", shuffleBtn); + + Wt::WPushButton *prevBtn = new Wt::WPushButton("", Wt::XHTMLText); t->bindWidget("prev", prevBtn); - Wt::WPushButton *nextBtn = new Wt::WPushButton(">>"); + Wt::WPushButton *nextBtn = new Wt::WPushButton("", Wt::XHTMLText); t->bindWidget("next", nextBtn); - Wt::WPushButton *playPauseBtn = new Wt::WPushButton("play/pause"); + Wt::WPushButton *playPauseBtn = new Wt::WPushButton("", Wt::XHTMLText); t->bindWidget("play-pause", playPauseBtn); Wt::WText *trackCurrentTime = new Wt::WText("00:00"); @@ -254,6 +263,8 @@ class TestApplication : public Wt::WApplication bootstrapTheme->setResponsive(true); setTheme(bootstrapTheme); + useStyleSheet("resources/font-awesome/css/font-awesome.min.css"); + Wt::WLineEdit* trackSelector = new Wt::WLineEdit(); MyPlayer* player = new MyPlayer(_db);