From 92fc42ceb5924f9b89cc65fb76f0d3ef93a4e654 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 17 Sep 2020 00:38:13 -0500 Subject: [PATCH] Scrape www subdomain for favicon (#1451) * fix: scrape other subdomains for favicon --- qt/FaviconCache.cc | 52 ++++++++++++++++++++++++++++++++++++++++------ qt/Session.cc | 6 +++--- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/qt/FaviconCache.cc b/qt/FaviconCache.cc index 66d15fb87..50b2fc9bc 100644 --- a/qt/FaviconCache.cc +++ b/qt/FaviconCache.cc @@ -6,6 +6,9 @@ * */ +#include +#include + #include #include #include @@ -160,12 +163,49 @@ FaviconCache::Key FaviconCache::add(QString const& url_str) { markUrlAsScraped(url_str); - auto const path = QStringLiteral("http://%1/favicon.").arg(url.host()); - nam_->get(QNetworkRequest(path + QStringLiteral("gif"))); - nam_->get(QNetworkRequest(path + QStringLiteral("ico"))); - nam_->get(QNetworkRequest(path + QStringLiteral("jpg"))); - nam_->get(QNetworkRequest(path + QStringLiteral("png"))); - nam_->get(QNetworkRequest(path + QStringLiteral("svg"))); + auto const scrape = [this](auto const host) + { + auto const schemes = std::array{ + QStringLiteral("http"), + QStringLiteral("https") + }; + auto const suffixes = std::array{ + QStringLiteral("gif"), + QStringLiteral("ico"), + QStringLiteral("jpg"), + QStringLiteral("png"), + QStringLiteral("svg") + }; + for (auto const& scheme : schemes) + { + for (auto const& suffix : suffixes) + { + auto const path = QStringLiteral("%1://%2/favicon.%3").arg(scheme).arg(host).arg(suffix); + nam_->get(QNetworkRequest(path)); + } + } + }; + + // tracker.domain.com + auto host = url.host(); + scrape(host); + + auto const delim = QStringLiteral("."); + auto const has_subdomain = host.count(delim) > 1; + if (has_subdomain) + { + auto const original_subdomain = host.left(host.indexOf(delim)); + host.remove(0, original_subdomain.size() + 1); + // domain.com + scrape(host); + + auto const www = QStringLiteral("www"); + if (original_subdomain != www) + { + // www.domain.com + scrape(QStringLiteral("%1.%2").arg(www).arg(host)); + } + } } return key; diff --git a/qt/Session.cc b/qt/Session.cc index 5a8570a88..036cfe4c4 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -520,7 +520,7 @@ void Session::torrentRenamePath(torrent_ids_t const& ids, QString const& oldpath tr(R"(

Unable to rename "%1" as "%2": %3.

Please correct the errors and try again.

)"). arg(path).arg(name).arg(r.result), QMessageBox::Close, qApp->activeWindow()); - QObject::connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater); + d->connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater); d->show(); }); @@ -1095,7 +1095,7 @@ void Session::addTorrent(AddData const& add_me, tr_variant* args, bool trash_ori auto* d = new QMessageBox(QMessageBox::Warning, tr("Error Adding Torrent"), QStringLiteral("

%1

%2

").arg(r.result).arg(add_me.readableName()), QMessageBox::Close, qApp->activeWindow()); - QObject::connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater); + d->connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater); d->show(); }); @@ -1167,7 +1167,7 @@ void Session::onDuplicatesTimer() d->setDetailedText(detail); } - QObject::connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater); + d->connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater); d->show(); } }