[Database] Simplified track interface

This commit is contained in:
emeric
2015-03-22 13:37:21 +01:00
parent 94df478324
commit 21c858562e
4 changed files with 27 additions and 34 deletions
+3 -5
View File
@@ -103,13 +103,11 @@ Grabber::getFromRelease(Wt::Dbo::Session& session, std::string releaseName)
SearchFilter filter; SearchFilter filter;
filter.exactMatch[SearchFilter::Field::Release].push_back(releaseName); filter.exactMatch[SearchFilter::Field::Release].push_back(releaseName);
Wt::Dbo::collection<Track::pointer> tracks std::vector<Track::pointer> tracks
= Track::getAll(session, filter, -1, 1 /* limit result size */); = Track::getAll(session, filter, -1, 1 /* limit result size */);
Wt::Dbo::collection<Database::Track::pointer>::iterator it = tracks.begin(); if (!tracks.empty())
return getFromTrack( tracks.front() );
if (it != tracks.end())
return getFromTrack(*it);
else else
return std::vector<CoverArt>(); return std::vector<CoverArt>();
} }
+4 -5
View File
@@ -194,18 +194,17 @@ Track::getAllQuery(Wt::Dbo::Session& session, SearchFilter filter)
return query; return query;
} }
Wt::Dbo::collection< Track::pointer > std::vector<Track::pointer>
Track::getAll(Wt::Dbo::Session& session, SearchFilter filter, int offset, int size) Track::getAll(Wt::Dbo::Session& session, SearchFilter filter, int offset, int size)
{ {
return getAllQuery(session, filter).limit(size).offset(offset); Wt::Dbo::collection<Track::pointer> res = getAllQuery(session, filter).limit(size).offset(offset);
return std::vector<Track::pointer>(res.begin(), res.end());
} }
std::vector<Track::pointer> std::vector<Track::pointer>
Track::getTracks(Wt::Dbo::Session& session, SearchFilter filter, int offset, int size) Track::getTracks(Wt::Dbo::Session& session, SearchFilter filter, int offset, int size)
{ {
Wt::Dbo::collection< Track::pointer > tracks = getAll(session, filter, offset, size); return getAll(session, filter, offset, size);
return std::vector<Track::pointer>(tracks.begin(), tracks.end());
} }
Wt::Dbo::Query<Track::ReleaseResult> Wt::Dbo::Query<Track::ReleaseResult>
+1 -1
View File
@@ -110,7 +110,7 @@ class Track
static pointer getById(Wt::Dbo::Session& session, id_type id); static pointer getById(Wt::Dbo::Session& session, id_type id);
static Wt::Dbo::collection< pointer > getAll(Wt::Dbo::Session& session); static Wt::Dbo::collection< pointer > getAll(Wt::Dbo::Session& session);
// Used for remote // Used for remote
static Wt::Dbo::collection< pointer > getAll(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1); static std::vector<pointer> getAll(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1);
static std::vector<pointer> getTracks(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1); static std::vector<pointer> getTracks(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1);
static std::vector<std::string> getReleases(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1); static std::vector<std::string> getReleases(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1);
static std::vector<std::string> getArtists(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1); static std::vector<std::string> getArtists(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1);
@@ -256,33 +256,31 @@ AudioCollectionRequestHandler::processGetTracks(const AudioCollectionRequest::Ge
Wt::Dbo::Transaction transaction( _db.getSession() ); Wt::Dbo::Transaction transaction( _db.getSession() );
Wt::Dbo::collection<Database::Track::pointer> tracks std::vector<Database::Track::pointer> tracks
= Database::Track::getAll( _db.getSession(), filter, = Database::Track::getAll( _db.getSession(), filter,
request.batch_parameter().offset(), static_cast<int>(size)); request.batch_parameter().offset(), static_cast<int>(size));
typedef Wt::Dbo::collection< Database::Track::pointer > Tracks; BOOST_FOREACH(Database::Track::pointer track, tracks)
for (Tracks::const_iterator it = tracks.begin(); it != tracks.end(); ++it)
{ {
AudioCollectionResponse_Track* track = response.add_tracks(); AudioCollectionResponse_Track* newTrack = response.add_tracks();
track->set_id(it->id()); newTrack->set_id(track.id());
track->set_disc_number( (*it)->getDiscNumber() ); newTrack->set_disc_number( track->getDiscNumber() );
track->set_track_number( (*it)->getTrackNumber() ); newTrack->set_track_number( track->getTrackNumber() );
track->set_artist( (*it)->getArtistName() ); newTrack->set_artist( track->getArtistName() );
track->set_release( (*it)->getReleaseName() ); newTrack->set_release( track->getReleaseName() );
track->set_name( std::string( boost::locale::conv::to_utf<char>((*it)->getName(), "UTF-8") ) ); newTrack->set_name( std::string( boost::locale::conv::to_utf<char>(track->getName(), "UTF-8") ) );
track->set_duration_secs( (*it)->getDuration().total_seconds() ); newTrack->set_duration_secs( track->getDuration().total_seconds() );
// Only send the year part of the release times // Only send the year part of the release times
if (!(*it)->getDate().is_special()) if (!track->getDate().is_special())
track->set_release_date( std::to_string((*it)->getDate().date().year()) ); newTrack->set_release_date( std::to_string(track->getDate().date().year()) );
if (!(*it)->getOriginalDate().is_special()) if (!track->getOriginalDate().is_special())
track->set_original_release_date( std::to_string((*it)->getOriginalDate().date().year()) ); newTrack->set_original_release_date( std::to_string(track->getOriginalDate().date().year()) );
BOOST_FOREACH(Database::Genre::pointer genre, (*it)->getGenres()) BOOST_FOREACH(Database::Genre::pointer genre, track->getGenres())
track->add_genre( genre->getName() ); newTrack->add_genre( genre->getName() );
} }
@@ -307,13 +305,11 @@ AudioCollectionRequestHandler::processGetCoverArt(const AudioCollectionRequest::
SearchFilter filter; SearchFilter filter;
filter.exactMatch[SearchFilter::Field::Release].push_back(request.release()); filter.exactMatch[SearchFilter::Field::Release].push_back(request.release());
Wt::Dbo::collection<Database::Track::pointer> tracks std::vector<Database::Track::pointer> tracks
= Database::Track::getAll(_db.getSession(), filter, -1, 1 /* limit reuslt size */); = Database::Track::getAll(_db.getSession(), filter, -1, 1 /* limit reuslt size */);
Wt::Dbo::collection<Database::Track::pointer>::iterator it = tracks.begin(); if (!tracks.empty())
track = tracks.front();
if (it != tracks.end())
track = *it;
res = true; res = true;
} }