[Cover] Adding external cover file support (lookup in the same directory)

This commit is contained in:
emeric
2015-06-28 19:49:58 +02:00
parent 794de2fda8
commit 75c700df2a
22 changed files with 470 additions and 96 deletions
+1 -1
View File
@@ -71,7 +71,7 @@ AudioMediaPlayer::AudioMediaPlayer(Wt::WContainerWidget *parent)
mainLayout->addLayout(currentMediaLayout, 1);
currentMediaLayout->addWidget( _mediaCover = new Wt::WImage());
_mediaCover->setImageLink( LmsApplication::instance()->getCoverResource()->getUnkownTrackUrl(72));
_mediaCover->setImageLink( LmsApplication::instance()->getCoverResource()->getUnknownTrackUrl(72));
_mediaCover->setStyleClass("mediaplayer-current-cover");
Wt::WVBoxLayout* mediaInfoLayout = new Wt::WVBoxLayout();
+3 -2
View File
@@ -382,10 +382,11 @@ PlayQueue::addTracks(const std::vector<Database::Track::id_type>& trackIds)
_model->setData(dataRow, COLUMN_ID_TRACK_ID, track.id(), Wt::UserRole);
std::string coverUrl;
if (track->hasCover())
if (track->getCoverType() != Database::Track::CoverType::None)
coverUrl = LmsApplication::instance()->getCoverResource()->getTrackUrl(track.id(), 64);
else
coverUrl = LmsApplication::instance()->getCoverResource()->getUnkownTrackUrl(64);
coverUrl = LmsApplication::instance()->getCoverResource()->getUnknownTrackUrl(64);
_model->setData(dataRow, COLUMN_ID_COVER, coverUrl, Wt::DecorationRole);
_model->setData(dataRow, COLUMN_ID_COVER, "playqueue-cover", Wt::StyleClassRole);
+18 -7
View File
@@ -85,7 +85,7 @@ CoverResource::getTrackUrl(Database::Track::id_type trackId, std::size_t size) c
}
std::string
CoverResource::getUnkownTrackUrl(size_t size) const
CoverResource::getUnknownTrackUrl(size_t size) const
{
return url() + "&size=" + std::to_string(size);
}
@@ -120,8 +120,8 @@ CoverResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Respons
if (trackIdStr)
{
Database::Track::id_type trackId = std::stol(*trackIdStr);
std::string path;
bool hasCover = false;
boost::filesystem::path path;
Database::Track::CoverType coverType = Database::Track::CoverType::None;
{
// transactions are not thread safe
@@ -132,13 +132,24 @@ CoverResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Respons
Database::Track::pointer track = Database::Track::getById(_db.getSession(), trackId);
if (track)
{
hasCover = track->hasCover();
coverType = track->getCoverType();
path = track->getPath();
}
}
if (hasCover)
covers = CoverArt::Grabber::getFromTrack(path);
switch (coverType)
{
case Database::Track::CoverType::Embedded:
covers = CoverArt::Grabber::instance().getFromTrack(path);
break;
case Database::Track::CoverType::ExternalFile:
covers = CoverArt::Grabber::instance().getFromDirectory(path.parent_path());
break;
case Database::Track::CoverType::None:
break;
}
}
else if (releaseStr)
{
@@ -146,7 +157,7 @@ CoverResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Respons
std::unique_lock<std::mutex> lock(_mutex);
Wt::Dbo::Transaction transaction(_db.getSession());
covers = CoverArt::Grabber::getFromRelease(_db.getSession(), *releaseStr);
covers = CoverArt::Grabber::instance().getFromRelease(_db.getSession(), *releaseStr);
}
BOOST_FOREACH(CoverArt::CoverArt& cover, covers)
+1 -1
View File
@@ -41,7 +41,7 @@ class CoverResource : public Wt::WResource
std::string getReleaseUrl(std::string releaseName, size_t size) const;
std::string getTrackUrl(Database::Track::id_type trackId, size_t size) const;
std::string getUnkownTrackUrl(size_t size) const;
std::string getUnknownTrackUrl(size_t size) const;
void handleRequest(const Wt::Http::Request& request, Wt::Http::Response& response);