Simplify the covert art resource, step 2

This commit is contained in:
emeric
2018-09-14 21:23:55 +02:00
parent 060379a56b
commit 843f6ef0fe
6 changed files with 33 additions and 42 deletions
+16
View File
@@ -213,5 +213,21 @@ Grabber::getFromRelease(Wt::Dbo::Session& session, Database::IdType releaseId, s
return *cover;
}
std::vector<uint8_t>
Grabber::getFromTrack(Wt::Dbo::Session& session, Database::IdType trackId, Image::Format format, std::size_t size) const
{
Image::Image cover = getFromTrack(session, trackId, size);
return cover.save(Image::Format::JPEG);
}
std::vector<uint8_t>
Grabber::getFromRelease(Wt::Dbo::Session& session, Database::IdType releaseId, Image::Format format, std::size_t size) const
{
Image::Image cover = getFromRelease(session, releaseId, size);
return cover.save(Image::Format::JPEG);
}
} // namespace CoverArt
+5 -2
View File
@@ -35,13 +35,16 @@ class Grabber
static Grabber& instance();
Image::Image getFromTrack(Wt::Dbo::Session& session, Database::IdType trackId, std::size_t size) const;
Image::Image getFromRelease(Wt::Dbo::Session& session, Database::IdType releaseId, std::size_t size) const;
std::vector<uint8_t> getFromTrack(Wt::Dbo::Session& session, Database::IdType trackId, Image::Format format, std::size_t size) const;
std::vector<uint8_t> getFromRelease(Wt::Dbo::Session& session, Database::IdType releaseId, Image::Format format, std::size_t size) const;
private:
Grabber();
Image::Image getFromTrack(Wt::Dbo::Session& session, Database::IdType trackId, std::size_t size) const;
Image::Image getFromRelease(Wt::Dbo::Session& session, Database::IdType releaseId, std::size_t size) const;
boost::optional<Image::Image> getFromTrack(const boost::filesystem::path& path) const;
std::vector<boost::filesystem::path> getCoverPaths(const boost::filesystem::path& directoryPath) const;
boost::optional<Image::Image> getFromDirectory(const boost::filesystem::path& path) const;
+6 -5
View File
@@ -97,13 +97,13 @@ Image::scale(std::size_t size)
}
catch (Magick::Exception& e)
{
LMS_LOG(COVER, ERROR) << "Caught Magick exception: " << e.what();
LMS_LOG(COVER, ERROR) << "Caught Magick exception during scale: " << e.what();
return false;
}
}
void
Image::save(std::vector<unsigned char>& data, Format format) const
std::vector<uint8_t>
Image::save(Format format) const
{
Magick::Image outputImage(_image);
@@ -112,8 +112,9 @@ Image::save(std::vector<unsigned char>& data, Format format) const
Magick::Blob blob;
outputImage.write(&blob);
unsigned char *charBuf = (unsigned char*)blob.data();
data.assign( charBuf, charBuf + blob.length() );
auto begin = static_cast<const uint8_t*>(blob.data());
return std::vector<uint8_t>(begin, begin + blob.length());
}
} // namespace Image
+1 -1
View File
@@ -49,7 +49,7 @@ class Image
bool scale(std::size_t size);
// output
void save(std::vector<unsigned char>& rawData, Format format) const;
std::vector<uint8_t> save(Format format) const;
private:
Magick::Image _image;
+5 -27
View File
@@ -54,29 +54,6 @@ ImageResource::getTrackUrl(Database::IdType trackId, std::size_t size) const
return url() + "&trackid=" + std::to_string(trackId) + "&size=" + std::to_string(size);
}
std::string
ImageResource::getArtistUrl(Database::IdType artistId, std::size_t size) const
{
return url() + "&artistid=" + std::to_string(artistId) + "&size=" + std::to_string(size);
}
std::string
ImageResource::getUnknownTrackUrl(size_t size) const
{
return url() + "&size=" + std::to_string(size);
}
void
ImageResource::putImage(Wt::Http::Response& response, Image::Image cover)
{
std::vector<unsigned char> data;
cover.save(data, Image::Format::JPEG);
response.setMimeType( Image::format_to_mimeType(Image::Format::JPEG) );
response.out().write(reinterpret_cast<const char *>(&data[0]), data.size());
}
void
ImageResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Response& response)
{
@@ -93,7 +70,7 @@ ImageResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Respons
if (!size || *size > maxSize)
return;
Image::Image cover;
std::vector<uint8_t> cover;
if (trackIdStr)
{
@@ -104,7 +81,7 @@ ImageResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Respons
// transactions are not thread safe
{
Wt::WApplication::UpdateLock lock(LmsApp);
cover = CoverArt::Grabber::instance().getFromTrack(LmsApp->getDboSession(), *trackId, *size);
cover = CoverArt::Grabber::instance().getFromTrack(LmsApp->getDboSession(), *trackId, Image::Format::JPEG, *size);
}
}
else if (releaseIdStr)
@@ -116,13 +93,14 @@ ImageResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Respons
// transactions are not thread safe
{
Wt::WApplication::UpdateLock lock(LmsApp);
cover = CoverArt::Grabber::instance().getFromRelease(LmsApp->getDboSession(), *releaseId, *size);
cover = CoverArt::Grabber::instance().getFromRelease(LmsApp->getDboSession(), *releaseId, Image::Format::JPEG, *size);
}
}
else
return;
putImage(response, cover);
response.setMimeType( Image::format_to_mimeType(Image::Format::JPEG) );
response.out().write(reinterpret_cast<const char *>(&cover[0]), cover.size());
}
} // namespace UserInterface
-7
View File
@@ -41,16 +41,9 @@ class ImageResource : public Wt::WResource
std::string getReleaseUrl(Database::IdType releaseId, size_t size) const;
std::string getTrackUrl(Database::IdType trackId, size_t size) const;
std::string getArtistUrl(Database::IdType artistId, size_t size) const;
std::string getUnknownTrackUrl(size_t size) const;
void handleRequest(const Wt::Http::Request& request, Wt::Http::Response& response);
private:
void putImage(Wt::Http::Response& response, Image::Image image);
void putCover(Wt::Http::Response& response, std::vector<Image::Image> covers, std::size_t size);
};
} // namespace UserInterface