diff --git a/src/lib/tools/iconprovider.cpp b/src/lib/tools/iconprovider.cpp index df69a9890..f2da88a17 100644 --- a/src/lib/tools/iconprovider.cpp +++ b/src/lib/tools/iconprovider.cpp @@ -30,6 +30,11 @@ Q_GLOBAL_STATIC(IconProvider, qz_icon_provider) +static QByteArray encodeUrl(const QUrl &url) +{ + return url.toEncoded(QUrl::RemoveFragment | QUrl::StripTrailingSlash); +} + IconProvider::IconProvider() : QWidget() { @@ -178,15 +183,17 @@ QImage IconProvider::imageForUrl(const QUrl &url, bool allowEmpty) return allowEmpty ? QImage() : IconProvider::emptyWebImage(); } + const QByteArray encodedUrl = encodeUrl(url); + foreach (const BufferedIcon &ic, instance()->m_iconBuffer) { - if (ic.first.toString().startsWith(url.toString())) { + if (encodeUrl(ic.first) == encodedUrl) { return ic.second; } } QSqlQuery query; query.prepare(QSL("SELECT icon FROM icons WHERE url GLOB ? LIMIT 1")); - query.addBindValue(QString("%1*").arg(QzTools::escapeSqlGlobString(QString::fromUtf8(url.toEncoded(QUrl::RemoveFragment))))); + query.addBindValue(QString("%1*").arg(QzTools::escapeSqlGlobString(QString::fromUtf8(encodedUrl)))); SqlDatabase::instance()->exec(query); if (query.next()) { @@ -251,7 +258,7 @@ void IconProvider::saveIconsToDatabase() buffer.open(QIODevice::WriteOnly); ic.second.save(&buffer, "PNG"); query.bindValue(0, buffer.data()); - query.bindValue(1, ic.first.toEncoded(QUrl::RemoveFragment)); + query.bindValue(1, encodeUrl(ic.first)); SqlDatabase::instance()->execAsync(query); }