From 843f6ef0fe63e8aadf4d0d1045aff9416c30d1d8 Mon Sep 17 00:00:00 2001 From: emeric Date: Fri, 14 Sep 2018 21:23:55 +0200 Subject: [PATCH] Simplify the covert art resource, step 2 --- src/cover/CoverArtGrabber.cpp | 16 ++++++++++++++++ src/cover/CoverArtGrabber.hpp | 7 +++++-- src/image/Image.cpp | 11 ++++++----- src/image/Image.hpp | 2 +- src/ui/resource/ImageResource.cpp | 32 +++++-------------------------- src/ui/resource/ImageResource.hpp | 7 ------- 6 files changed, 33 insertions(+), 42 deletions(-) diff --git a/src/cover/CoverArtGrabber.cpp b/src/cover/CoverArtGrabber.cpp index b6485364..4f8a3f23 100644 --- a/src/cover/CoverArtGrabber.cpp +++ b/src/cover/CoverArtGrabber.cpp @@ -213,5 +213,21 @@ Grabber::getFromRelease(Wt::Dbo::Session& session, Database::IdType releaseId, s return *cover; } +std::vector +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 +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 diff --git a/src/cover/CoverArtGrabber.hpp b/src/cover/CoverArtGrabber.hpp index b62c22e0..c2d572c2 100644 --- a/src/cover/CoverArtGrabber.hpp +++ b/src/cover/CoverArtGrabber.hpp @@ -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 getFromTrack(Wt::Dbo::Session& session, Database::IdType trackId, Image::Format format, std::size_t size) const; + std::vector 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 getFromTrack(const boost::filesystem::path& path) const; std::vector getCoverPaths(const boost::filesystem::path& directoryPath) const; boost::optional getFromDirectory(const boost::filesystem::path& path) const; diff --git a/src/image/Image.cpp b/src/image/Image.cpp index 11c63eda..2822936e 100644 --- a/src/image/Image.cpp +++ b/src/image/Image.cpp @@ -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& data, Format format) const +std::vector +Image::save(Format format) const { Magick::Image outputImage(_image); @@ -112,8 +112,9 @@ Image::save(std::vector& 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(blob.data()); + + return std::vector(begin, begin + blob.length()); } } // namespace Image diff --git a/src/image/Image.hpp b/src/image/Image.hpp index 5520e289..0a12c8cf 100644 --- a/src/image/Image.hpp +++ b/src/image/Image.hpp @@ -49,7 +49,7 @@ class Image bool scale(std::size_t size); // output - void save(std::vector& rawData, Format format) const; + std::vector save(Format format) const; private: Magick::Image _image; diff --git a/src/ui/resource/ImageResource.cpp b/src/ui/resource/ImageResource.cpp index a41c9f8d..ea2863a4 100644 --- a/src/ui/resource/ImageResource.cpp +++ b/src/ui/resource/ImageResource.cpp @@ -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 data; - - cover.save(data, Image::Format::JPEG); - - response.setMimeType( Image::format_to_mimeType(Image::Format::JPEG) ); - response.out().write(reinterpret_cast(&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 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(&cover[0]), cover.size()); } } // namespace UserInterface diff --git a/src/ui/resource/ImageResource.hpp b/src/ui/resource/ImageResource.hpp index 608e4c17..f9ded0fc 100644 --- a/src/ui/resource/ImageResource.hpp +++ b/src/ui/resource/ImageResource.hpp @@ -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 covers, std::size_t size); - }; } // namespace UserInterface