diff --git a/src/database/Release.cpp b/src/database/Release.cpp index cb683b25..ba4f88d2 100644 --- a/src/database/Release.cpp +++ b/src/database/Release.cpp @@ -140,4 +140,28 @@ Release::getByFilter(Wt::Dbo::Session& session, SearchFilter filter, int offset, return std::vector(res.begin(), res.end()); } +int +Release::getReleaseYear(bool original) const +{ + assert(session()); + + // TODO something better + auto tracks = Track::getByFilter(*session(), SearchFilter::ById(SearchFilter::Field::Release, this->id()), -1, 1); + + if (tracks.empty()) + return 0; + + boost::gregorian::date date; + + if (original) + date = tracks.front()->getOriginalDate().date(); + else + date = tracks.front()->getDate().date(); + + if (date.is_special()) + return 0; + + return date.year(); +} + } // namespace Database diff --git a/src/database/Release.hpp b/src/database/Release.hpp index d9a4d43f..2ace3867 100644 --- a/src/database/Release.hpp +++ b/src/database/Release.hpp @@ -53,6 +53,9 @@ class Release : public Wt::Dbo::Dbo // Create static pointer create(Wt::Dbo::Session& session, const std::string& name, const std::string& MBID = ""); + // Utility functions + int getReleaseYear(bool originalDate = false) const; // 0 if unknown or various + // MVC models for the user interface // ID, Release name, year, track counts typedef boost::tuple UIQueryResult; diff --git a/src/ui/audio/mobile/MobileAudio.cpp b/src/ui/audio/mobile/MobileAudio.cpp index 67a2b995..054710dd 100644 --- a/src/ui/audio/mobile/MobileAudio.cpp +++ b/src/ui/audio/mobile/MobileAudio.cpp @@ -36,6 +36,8 @@ #include "MobileAudio.hpp" +#define SEARCH_NB_ITEMS 4 + namespace UserInterface { namespace Mobile { @@ -93,9 +95,9 @@ Audio::Audio(Wt::WContainerWidget *parent) // Song std::vector keywords = splitStrings(edit->text().toUTF8(), " ");; - releaseSearch->search(SearchFilter::ByName(SearchFilter::Field::Release, keywords), 4); - artistSearch->search(SearchFilter::ByName(SearchFilter::Field::Artist, keywords), 4); - trackSearch->search(SearchFilter::ByName(SearchFilter::Field::Track, keywords), 4); + 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); artistSearch->show(); releaseSearch->show(); @@ -175,9 +177,9 @@ Audio::Audio(Wt::WContainerWidget *parent) // Initially, populate the widgets using an empty search { - artistSearch->search(SearchFilter(), 3); - releaseSearch->search(SearchFilter(), 3); - trackSearch->search(SearchFilter(), 3); + 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/TrackSearch.cpp b/src/ui/audio/mobile/TrackSearch.cpp index 10e97742..cad8ca43 100644 --- a/src/ui/audio/mobile/TrackSearch.cpp +++ b/src/ui/audio/mobile/TrackSearch.cpp @@ -54,6 +54,10 @@ TrackSearch::TrackSearch(Wt::WContainerWidget *parent) _showMore->setTemplateText(Wt::WString::tr("mobile-search-more")); _showMore->bindString("text", "Tap to show more results..."); _showMore->hide(); + _showMore->clicked().connect(std::bind([=] { + _sigMoreTracksSelected(); + addResults(20); + })); } void @@ -133,9 +137,9 @@ TrackSearch::addResults(size_t nb) cover->setImageLink(Wt::WLink (LmsApplication::instance()->getCoverResource()->getReleaseUrl(release.id(), 512))); releaseContainer->bindWidget("cover", cover); - releaseContainer->bindString("artist-name", getArtistNameFromRelease(release)); + releaseContainer->bindString("artist-name", getArtistNameFromRelease(release), Wt::PlainText); releaseContainer->bindString("release-name", release->getName(), Wt::PlainText); - releaseContainer->bindInt("year", 2001); + releaseContainer->bindInt("year", release->getReleaseYear()); _currentTrackContainer = new Wt::WContainerWidget(); releaseContainer->bindWidget("track-container", _currentTrackContainer); @@ -165,13 +169,7 @@ TrackSearch::addResults(size_t nb) } if (moreResults) - { - _showMore->clicked().connect(std::bind([=] { - _sigMoreTracksSelected(); - addResults(20); - })); _showMore->show(); - } else _showMore->hide(); }