Use original image format when saving images from Subsonic and Tidal

Fixes #435
This commit is contained in:
Jonas Kvinge
2020-05-12 18:50:57 +02:00
parent 84ec4bdc79
commit 7e22e0e552
5 changed files with 93 additions and 33 deletions

View File

@@ -24,6 +24,7 @@
#include <QString>
#include <QUrl>
#include <QImage>
#include <QImageReader>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonObject>
@@ -1151,27 +1152,45 @@ void TidalRequest::AlbumCoverReceived(QNetworkReply *reply, const QString &album
return;
}
if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() != 200) {
Error(QString("Received HTTP code %1 for %2.").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()).arg(url.toString()));
if (album_covers_requests_sent_.contains(album_id)) album_covers_requests_sent_.remove(album_id);
AlbumCoverFinishCheck();
return;
}
QString mimetype = reply->header(QNetworkRequest::ContentTypeHeader).toString();
if (!QImageReader::supportedMimeTypes().contains(mimetype.toUtf8())) {
Error(QString("Unsupported mimetype for image reader %1 for %2").arg(mimetype).arg(url.toString()));
if (album_covers_requests_sent_.contains(album_id)) album_covers_requests_sent_.remove(album_id);
AlbumCoverFinishCheck();
return;
}
QByteArray format = QImageReader::imageFormatsForMimeType(mimetype.toUtf8()).first();
QByteArray data = reply->readAll();
if (data.isEmpty()) {
Error(QString("Received empty image data for %1").arg(url.toString()));
album_covers_requests_sent_.remove(album_id);
if (album_covers_requests_sent_.contains(album_id)) album_covers_requests_sent_.remove(album_id);
AlbumCoverFinishCheck();
return;
}
QImage image;
if (image.loadFromData(data)) {
if (image.save(filename, "JPG")) {
if (image.loadFromData(data, format)) {
if (image.save(filename, format)) {
while (album_covers_requests_sent_.contains(album_id)) {
Song *song = album_covers_requests_sent_.take(album_id);
song->set_art_automatic(QUrl::fromLocalFile(filename));
}
}
else {
Error(QString("Error saving image data to %1").arg(filename));
if (album_covers_requests_sent_.contains(album_id)) album_covers_requests_sent_.remove(album_id);
}
}
else {
album_covers_requests_sent_.remove(album_id);
if (album_covers_requests_sent_.contains(album_id)) album_covers_requests_sent_.remove(album_id);
Error(QString("Error decoding image data from %1").arg(url.toString()));
}