on xenial help sign in
fix album artwork containg / in the name
commit8f8cbc3802b5b49412d4e325391baecb14baee9e authorMichael Zanetti <michael.zanetti@canonical.com> dateWed 30 Oct 2013, 14:13 (13 years ago) parenta8b869d
2 files changed+20−17
plugins/Unity/iconutils.cpp+10−10 plugins/Utils/albumartprovider.cpp+10−7
plugins/Unity/iconutils.cpp+10−10
@@ -17,11 +17,13 @@
1717 * Michal Hruby <michal.hruby@canonical.com>
1818 */
1919
20−#include <QStringList>
21−#include <QUrl>
20+#include "iconutils.h"
2221
2322#include <gio/gio.h>
24−#include "iconutils.h"
23+
24+#include <QStringList>
25+#include <QUrl>
26+#include <QUrlQuery>
2527
2628#define BASE_THEME_ICON_URI "image://theme/"
2729#define BASE_THUMBNAILER_URI "image://thumbnailer/"
@@ -104,13 +106,11 @@ QString uriToThumbnailerProviderString(QString const &uri, QString const &mimety
104106 if (contentHash.contains("content")) { // nested content in Home?
105107 contentHash = contentHash["content"].toHash();
106108 }
107− if (contentHash.contains("album") &&
108− contentHash.contains("artist")) {
109− const QString album = contentHash["album"].toString();
110− const QString artist = contentHash["artist"].toString();
111− thumbnailerUri.append(QUrl::toPercentEncoding(artist));
112− thumbnailerUri.append("/");
113− thumbnailerUri.append(QUrl::toPercentEncoding(album));
109+ if (contentHash.contains("album") && contentHash.contains("artist")) {
110+ QUrlQuery query;
111+ query.addQueryItem(QStringLiteral("artist"), contentHash["artist"].toString());
112+ query.addQueryItem(QStringLiteral("album"), contentHash["album"].toString());
113+ thumbnailerUri.append(query.toString());
114114 }
115115 }
116116 } else {
plugins/Utils/albumartprovider.cpp+10−7
@@ -32,6 +32,7 @@
3232#include <QByteArray>
3333#include <QImage>
3434#include <QUrl>
35+#include <QUrlQuery>
3536
3637using namespace std;
3738
@@ -65,6 +66,9 @@ AlbumArtProvider::~AlbumArtProvider()
6566std::string AlbumArtProvider::get_lastfm_url(const albuminfo &ai) {
6667 QString artist = QString::fromStdString(ai.artist);
6768 QString album = QString::fromStdString(ai.album);
69+ // audioscrobbler wants it without any / (as it would break the URL)
70+ artist.remove('/');
71+ album.remove('/');
6872
6973 /// @todo: this is the old API which will probably get axed at some point in the future
7074 /// The new 2.0 API requires an API key, but supports JSON output, etc, so switching
@@ -200,21 +204,20 @@ std::string AlbumArtProvider::get_image(const std::string &artist, const std::st
200204QImage AlbumArtProvider::requestImage(const QString &id, QSize *realSize, const QSize &requestedSize) {
201205 Q_UNUSED(requestedSize)
202206
203− const QStringList parts = id.split("/");
204− if (parts.size() != 2) {
207+ QUrlQuery query(id);
208+ if (!query.hasQueryItem(QStringLiteral("artist")) || !query.hasQueryItem(QStringLiteral("album"))) {
205209 qWarning() << "Invalid albumart uri:" << id;
206210 return QImage(QString::fromStdString(DEFAULT_ALBUM_ART));
207211 }
208− const std::string artist = QUrl::fromPercentEncoding(parts[0].toUtf8()).toStdString();
209− const std::string album = QUrl::fromPercentEncoding(parts[1].toUtf8()).toStdString();
212+ const QString artist = query.queryItemValue(QStringLiteral("artist"), QUrl::FullyEncoded);
213+ const QString album = query.queryItemValue(QStringLiteral("album"), QUrl::FullyEncoded);
210214
211215 std::string tgt_path;
212216 try {
213− tgt_path = get_image(artist, album);
217+ tgt_path = get_image(artist.toStdString(), album.toStdString());
214218 if(!tgt_path.empty()) {
215− QString tgt(tgt_path.c_str());
216219 QImage image;
217− image.load(tgt);
220+ image.load(QString::fromStdString(tgt_path));
218221 // FIXME: Rescale to requested size preserving aspect.
219222 *realSize = image.size();
220223 return image;