From 4dd4fd31fcf65076abe75e8dff28da3ded200af4 Mon Sep 17 00:00:00 2001 From: "craig.p.drummond" Date: Tue, 17 Sep 2013 21:16:15 +0000 Subject: [PATCH] Scale podcast images down if they are too large. --- models/musiclibraryitempodcast.cpp | 2 +- models/onlineservicesmodel.cpp | 15 ++++++++++++++- models/onlineservicesmodel.h | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/models/musiclibraryitempodcast.cpp b/models/musiclibraryitempodcast.cpp index f532856ce..1e809ff69 100644 --- a/models/musiclibraryitempodcast.cpp +++ b/models/musiclibraryitempodcast.cpp @@ -258,7 +258,7 @@ const QPixmap & MusicLibraryItemPodcast::cover() } m_coverIsDefault = true; QImage img=OnlineServicesModel::self()->requestImage(static_cast(parentItem())->id(), data(), QString(), m_imageUrl.toString(), // ?? - m_fileName.left(m_fileName.length()-constExt.length())); + m_fileName.left(m_fileName.length()-constExt.length()), 300); if (!img.isNull()) { setCoverImage(img); diff --git a/models/onlineservicesmodel.cpp b/models/onlineservicesmodel.cpp index 16f06cf72..69d8fe8ec 100644 --- a/models/onlineservicesmodel.cpp +++ b/models/onlineservicesmodel.cpp @@ -367,8 +367,9 @@ static const char * constIdProperty="id"; static const char * constArtistProperty="artist"; static const char * constAlbumProperty="album"; static const char * constCacheProperty="cacheName"; +static const char * constMaxSizeProperty="maxSize"; -QImage OnlineServicesModel::requestImage(const QString &id, const QString &artist, const QString &album, const QString &url, const QString cacheName) +QImage OnlineServicesModel::requestImage(const QString &id, const QString &artist, const QString &album, const QString &url, const QString cacheName, int maxSize) { QString baseName=cacheName.isEmpty() ? Utils::cacheDir(id.toLower(), false)+Covers::encodeName(album.isEmpty() ? artist : (artist+" - "+album)) : cacheName; for (int e=0; constExtensions[e]; ++e) { @@ -387,6 +388,7 @@ QImage OnlineServicesModel::requestImage(const QString &id, const QString &artis j->setProperty(constArtistProperty, artist); j->setProperty(constAlbumProperty, album); j->setProperty(constCacheProperty, cacheName); + j->setProperty(constMaxSizeProperty, maxSize); connect(j, SIGNAL(finished()), this, SLOT(imageDownloaded())); } @@ -453,6 +455,17 @@ void OnlineServicesModel::imageDownloaded() ? Utils::cacheDir(id.toLower(), true)+Covers::encodeName(song.album.isEmpty() ? song.artist : (song.artist+" - "+song.album)) : cacheName) +(jpeg ? ".jpg" : ".png"); + + int maxSize=j->property(constMaxSizeProperty).toInt(); + + if (maxSize>16) { + QImage img=QImage::fromData(data, jpeg ? "JPG" : "PNG"); + if (!img.isNull() && (img.width()>maxSize || img.height()>maxSize)) { + img=img.scaled(maxSize, maxSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + img.save(fileName); + return; + } + } QFile f(fileName); if (f.open(QIODevice::WriteOnly)) { f.write(data); diff --git a/models/onlineservicesmodel.h b/models/onlineservicesmodel.h index cc0090de5..0f8cc69a2 100644 --- a/models/onlineservicesmodel.h +++ b/models/onlineservicesmodel.h @@ -66,7 +66,8 @@ public: Action * unSubscribeAct() const { return unSubscribeAction; } Action * refreshSubscriptionAct() const { return refreshSubscriptionAction; } - QImage requestImage(const QString &id, const QString &artist, const QString &album, const QString &url, const QString cacheName=QString()); + QImage requestImage(const QString &id, const QString &artist, const QString &album, const QString &url, + const QString cacheName=QString(), int maxSize=-1); public Q_SLOTS: void stateChanged(const QString &name, bool state);