21std::vector<AlbumArtProvider::AlbumArt>
LastFM::album_art(
const std::string& artist,
const std::string& title,
const int width,
const int height) {
22 cURLpp::Cleanup cleanup;
23 cURLpp::Easy easyhandle;
31 easyhandle.setOpt(cURLpp::Options::Url(request_url));
32 easyhandle.setOpt(cURLpp::Options::WriteStream(&ss));
38 const Json::Value image = root[
"album"][
"image"];
40 const std::vector<std::string> sizes = {{
50 std::vector<AlbumArtProvider::AlbumArt> albumArts;
52 for (
unsigned int i = 0; i < sizes.size(); i++) {
53 for (
unsigned int j = 0; j < image.size(); j++) {
54 const Json::Value element = image[j];
55 if (element[
"size"] == sizes[i]) {
56 request_url = element[
"#text"].asString();
57 if (!request_url.empty()) {
58 easyhandle.setOpt(cURLpp::Options::Url(request_url));
63 std::string data = ss.str();
64 Glib::RefPtr<Glib::Bytes> bytes = Glib::Bytes::create(data.c_str(), data.size());
65 Glib::RefPtr<Gio::MemoryInputStream> is = Gio::MemoryInputStream::create();
69 .art = Gdk::Pixbuf::create_from_stream_at_scale(is, width, height,
true),
73 albumArts.push_back(art);
79 if (albumArts.empty()) {
static std::string url_with_params(const std::string &url, const std::map< std::string, std::string > ¶ms)
Returns the URL of the API endpoint with the given parameters encoded as query parameters.
std::vector< AlbumArt > album_art(const std::string &artist, const std::string &title, const int width, const int height) override
Retrieves all album art matching the artist and title.
static std::string url(const Method method, const std::map< std::string, std::string > ¶ms)
Calls url_with_params() after adding additional parameters in params. These additional parameters set...