Fix album cover handling in Jamendo.

This commit is contained in:
John Maguire 2010-11-29 13:34:30 +00:00
parent c679a19c91
commit 880909104e
3 changed files with 21 additions and 3 deletions

View File

@ -177,20 +177,34 @@ void AlbumCoverLoader::RemoteFetchFinished() {
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
if (!reply)
return;
reply->deleteLater();
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) {
// Try to load the image
QImage image;
if (image.load(reply, 0)) {
emit ImageLoaded(task.id, ScaleAndPad(image));
reply->deleteLater();
return;
}
}
reply->deleteLater();
NextState(&task);
}

View File

@ -72,12 +72,14 @@ class AlbumCoverLoader : public QObject {
};
struct Task {
Task() : redirects(0) {}
quint64 id;
QString art_automatic;
QString art_manual;
QString song_filename;
QImage embedded_image;
State state;
int redirects;
};
struct TryLoadResult {
@ -107,6 +109,8 @@ class AlbumCoverLoader : public QObject {
quint64 next_id_;
NetworkAccessManager* network_;
static const int kMaxRedirects = 3;
};
#endif // ALBUMCOVERLOADER_H

View File

@ -49,7 +49,7 @@ const char* JamendoService::kMp3StreamUrl =
const char* JamendoService::kOggStreamUrl =
"http://api.jamendo.com/get2/stream/track/redirect/?id=%1&streamencoding=ogg2";
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::kAlbumInfoUrl = "http://www.jamendo.com/album/%1";
const char* JamendoService::kDownloadAlbumUrl = "http://www.jamendo.com/download/album/%1";