Fix album cover handling in Jamendo.
This commit is contained in:
parent
c679a19c91
commit
880909104e
|
@ -177,20 +177,34 @@ void AlbumCoverLoader::RemoteFetchFinished() {
|
||||||
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
|
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
|
||||||
if (!reply)
|
if (!reply)
|
||||||
return;
|
return;
|
||||||
|
reply->deleteLater();
|
||||||
|
|
||||||
Task task = remote_tasks_.take(reply);
|
Task task = remote_tasks_.take(reply);
|
||||||
|
|
||||||
|
// Handle redirects.
|
||||||
|
QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
|
||||||
|
if (redirect.isValid()) {
|
||||||
|
if (++task.redirects > kMaxRedirects) {
|
||||||
|
return; // Give up.
|
||||||
|
}
|
||||||
|
QNetworkRequest request = reply->request();
|
||||||
|
request.setUrl(redirect.toUrl());
|
||||||
|
QNetworkReply* redirected_reply = network_->get(request);
|
||||||
|
connect(redirected_reply, SIGNAL(finished()), SLOT(RemoteFetchFinished()));
|
||||||
|
|
||||||
|
remote_tasks_.insert(redirected_reply, task);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (reply->error() == QNetworkReply::NoError) {
|
if (reply->error() == QNetworkReply::NoError) {
|
||||||
// Try to load the image
|
// Try to load the image
|
||||||
QImage image;
|
QImage image;
|
||||||
if (image.load(reply, 0)) {
|
if (image.load(reply, 0)) {
|
||||||
emit ImageLoaded(task.id, ScaleAndPad(image));
|
emit ImageLoaded(task.id, ScaleAndPad(image));
|
||||||
reply->deleteLater();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reply->deleteLater();
|
|
||||||
NextState(&task);
|
NextState(&task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,12 +72,14 @@ class AlbumCoverLoader : public QObject {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Task {
|
struct Task {
|
||||||
|
Task() : redirects(0) {}
|
||||||
quint64 id;
|
quint64 id;
|
||||||
QString art_automatic;
|
QString art_automatic;
|
||||||
QString art_manual;
|
QString art_manual;
|
||||||
QString song_filename;
|
QString song_filename;
|
||||||
QImage embedded_image;
|
QImage embedded_image;
|
||||||
State state;
|
State state;
|
||||||
|
int redirects;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TryLoadResult {
|
struct TryLoadResult {
|
||||||
|
@ -107,6 +109,8 @@ class AlbumCoverLoader : public QObject {
|
||||||
quint64 next_id_;
|
quint64 next_id_;
|
||||||
|
|
||||||
NetworkAccessManager* network_;
|
NetworkAccessManager* network_;
|
||||||
|
|
||||||
|
static const int kMaxRedirects = 3;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ALBUMCOVERLOADER_H
|
#endif // ALBUMCOVERLOADER_H
|
||||||
|
|
|
@ -49,7 +49,7 @@ const char* JamendoService::kMp3StreamUrl =
|
||||||
const char* JamendoService::kOggStreamUrl =
|
const char* JamendoService::kOggStreamUrl =
|
||||||
"http://api.jamendo.com/get2/stream/track/redirect/?id=%1&streamencoding=ogg2";
|
"http://api.jamendo.com/get2/stream/track/redirect/?id=%1&streamencoding=ogg2";
|
||||||
const char* JamendoService::kAlbumCoverUrl =
|
const char* JamendoService::kAlbumCoverUrl =
|
||||||
"http://api.jamendo.com/get2/image/album/redirect/?id=%1&imagesize=260";
|
"http://api.jamendo.com/get2/image/album/redirect/?id=%1&imagesize=300";
|
||||||
const char* JamendoService::kHomepage = "http://www.jamendo.com/";
|
const char* JamendoService::kHomepage = "http://www.jamendo.com/";
|
||||||
const char* JamendoService::kAlbumInfoUrl = "http://www.jamendo.com/album/%1";
|
const char* JamendoService::kAlbumInfoUrl = "http://www.jamendo.com/album/%1";
|
||||||
const char* JamendoService::kDownloadAlbumUrl = "http://www.jamendo.com/download/album/%1";
|
const char* JamendoService::kDownloadAlbumUrl = "http://www.jamendo.com/download/album/%1";
|
||||||
|
|
Loading…
Reference in New Issue