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()); 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);
} }

View File

@ -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

View File

@ -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";