From 5d0cf343d52c59800822c1f90c8cad3396747ec3 Mon Sep 17 00:00:00 2001 From: John Maguire Date: Mon, 6 Mar 2017 18:15:59 +0000 Subject: [PATCH] Use new clementine images API. --- src/songinfo/spotifyimages.cpp | 70 +++++++++------------------------- 1 file changed, 19 insertions(+), 51 deletions(-) diff --git a/src/songinfo/spotifyimages.cpp b/src/songinfo/spotifyimages.cpp index 0778eb09c..5a5ba2927 100644 --- a/src/songinfo/spotifyimages.cpp +++ b/src/songinfo/spotifyimages.cpp @@ -11,14 +11,8 @@ #include "core/network.h" namespace { -static const char* kSpotifySearchUrl = "https://api.spotify.com/v1/search"; -static const char* kSpotifyArtistUrl = "https://api.spotify.com/v1/artists/%1"; -} // namespace - -namespace { -QString ExtractSpotifyId(const QString& spotify_uri) { - return spotify_uri.split(':')[2]; -} +static const char* kSpotifyImagesUrl = + "https://data.clementine-player.org/fetchimages"; } // namespace SpotifyImages::SpotifyImages() : network_(new NetworkAccessManager) {} @@ -31,64 +25,38 @@ void SpotifyImages::FetchInfo(int id, const Song& metadata) { return; } - // Fetch artist id. - QUrl search_url(kSpotifySearchUrl); - search_url.addQueryItem("q", metadata.artist()); - search_url.addQueryItem("type", "artist"); - search_url.addQueryItem("limit", "1"); + QUrl url(kSpotifyImagesUrl); + url.addQueryItem("artist", metadata.artist()); - qLog(Debug) << "Fetching artist:" << search_url; - - QNetworkRequest request(search_url); + QNetworkRequest request(url); QNetworkReply* reply = network_->get(request); NewClosure(reply, SIGNAL(finished()), [this, id, reply]() { reply->deleteLater(); QJson::Parser parser; - QVariantMap result = parser.parse(reply).toMap(); - QVariantMap artists = result["artists"].toMap(); - if (artists.isEmpty()) { + bool ok = false; + QVariant result = parser.parse(reply, &ok); + if (!ok || result.type() != QVariant::List) { emit Finished(id); return; } - QVariantList items = artists["items"].toList(); - if (items.isEmpty()) { - emit Finished(id); - return; - } - QVariantMap artist = items.first().toMap(); - QString spotify_uri = artist["uri"].toString(); - FetchImagesForArtist(id, ExtractSpotifyId(spotify_uri)); - }); -} - -void SpotifyImages::FetchImagesForArtist(int id, const QString& spotify_id) { - QUrl artist_url(QString(kSpotifyArtistUrl).arg(spotify_id)); - qLog(Debug) << "Fetching images for artist:" << artist_url; - QNetworkRequest request(artist_url); - QNetworkReply* reply = network_->get(request); - NewClosure(reply, SIGNAL(finished()), [this, id, reply]() { - reply->deleteLater(); - QJson::Parser parser; - QVariantMap result = parser.parse(reply).toMap(); - QVariantList images = result["images"].toList(); + QVariantList results = result.toList(); QList> image_candidates; - for (QVariant i : images) { - QVariantMap image = i.toMap(); + for (QVariant v : results) { + QVariantMap image = v.toMap(); + QUrl url = image["url"].toUrl(); int height = image["height"].toInt(); int width = image["width"].toInt(); - QUrl url = image["url"].toUrl(); image_candidates.append(qMakePair(url, QSize(width, height))); } if (!image_candidates.isEmpty()) { - QPair winner = - *std::max_element( - image_candidates.begin(), image_candidates.end(), - [](const QPair& a, const QPair& b) { - return (a.second.height() * a.second.width()) < - (b.second.height() * b.second.width()); - }); - emit ImageReady(id, winner.first); + QPair best = *std::max_element( + image_candidates.begin(), image_candidates.end(), + [](const QPair& a, const QPair& b) { + return (a.second.height() * a.second.width()) < + (b.second.height() * b.second.width()); + }); + emit ImageReady(id, best.first); } emit Finished(id); });