From 2b903fc3d16695d69359c13357f5a73696423e21 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sat, 29 Dec 2018 20:38:51 +0800 Subject: [PATCH] Move Utils::Misc::isUrl() function All usage of this function gets to call Net::DownloadManager eventually. --- src/base/bittorrent/session.cpp | 2 +- src/base/net/downloadmanager.cpp | 11 +++++++++++ src/base/net/downloadmanager.h | 2 ++ src/base/search/searchpluginmanager.cpp | 3 +-- src/base/utils/misc.cpp | 8 -------- src/base/utils/misc.h | 1 - src/gui/addnewtorrentdialog.cpp | 2 +- src/gui/mainwindow.cpp | 3 ++- src/gui/rss/rsswidget.cpp | 3 +-- src/gui/search/pluginselectdialog.cpp | 3 +-- 10 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index fd3278db3..bd6072eac 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -2094,7 +2094,7 @@ bool Session::addTorrent(const QString &source, const AddTorrentParams ¶ms) { // `source`: .torrent file path/url or magnet uri - if (Utils::Misc::isUrl(source)) { + if (Net::DownloadManager::hasSupportedScheme(source)) { LogMsg(tr("Downloading '%1', please wait...", "e.g: Downloading 'xxx.torrent', please wait...").arg(source)); // Launch downloader Net::DownloadHandler *handler = diff --git a/src/base/net/downloadmanager.cpp b/src/base/net/downloadmanager.cpp index a61e102cd..68a251d57 100644 --- a/src/base/net/downloadmanager.cpp +++ b/src/base/net/downloadmanager.cpp @@ -29,6 +29,8 @@ #include "downloadmanager.h" +#include + #include #include #include @@ -210,6 +212,15 @@ bool Net::DownloadManager::deleteCookie(const QNetworkCookie &cookie) return static_cast(m_networkManager.cookieJar())->deleteCookie(cookie); } +bool Net::DownloadManager::hasSupportedScheme(const QString &url) +{ + const QStringList schemes = instance()->m_networkManager.supportedSchemes(); + return std::any_of(schemes.cbegin(), schemes.cend(), [&url](const QString &scheme) + { + return url.startsWith((scheme + QLatin1Char(':')), Qt::CaseInsensitive); + }); +} + void Net::DownloadManager::applyProxySettings() { auto proxyManager = ProxyConfigurationManager::instance(); diff --git a/src/base/net/downloadmanager.h b/src/base/net/downloadmanager.h index 1035ddf27..3aa1a1399 100644 --- a/src/base/net/downloadmanager.h +++ b/src/base/net/downloadmanager.h @@ -103,6 +103,8 @@ namespace Net void setAllCookies(const QList &cookieList); bool deleteCookie(const QNetworkCookie &cookie); + static bool hasSupportedScheme(const QString &url); + private slots: #ifndef QT_NO_OPENSSL void ignoreSslErrors(QNetworkReply *, const QList &); diff --git a/src/base/search/searchpluginmanager.cpp b/src/base/search/searchpluginmanager.cpp index fad3cf737..767859326 100644 --- a/src/base/search/searchpluginmanager.cpp +++ b/src/base/search/searchpluginmanager.cpp @@ -50,7 +50,6 @@ #include "base/utils/bytearray.h" #include "base/utils/foreignapps.h" #include "base/utils/fs.h" -#include "base/utils/misc.h" #include "searchdownloadhandler.h" #include "searchhandler.h" @@ -198,7 +197,7 @@ void SearchPluginManager::installPlugin(const QString &source) { clearPythonCache(engineLocation()); - if (Utils::Misc::isUrl(source)) { + if (Net::DownloadManager::hasSupportedScheme(source)) { using namespace Net; DownloadHandler *handler = DownloadManager::instance()->download(DownloadRequest(source).saveToFile(true)); connect(handler, static_cast(&DownloadHandler::downloadFinished) diff --git a/src/base/utils/misc.cpp b/src/base/utils/misc.cpp index 83e43cc8f..cb573ba70 100644 --- a/src/base/utils/misc.cpp +++ b/src/base/utils/misc.cpp @@ -414,14 +414,6 @@ QList Utils::Misc::boolListfromStringList(const QStringList &l) return ret; } -bool Utils::Misc::isUrl(const QString &s) -{ - static const QRegularExpression reURLScheme( - "http[s]?|ftp", QRegularExpression::CaseInsensitiveOption); - - return reURLScheme.match(QUrl(s).scheme()).hasMatch(); -} - QString Utils::Misc::parseHtmlLinks(const QString &rawText) { QString result = rawText; diff --git a/src/base/utils/misc.h b/src/base/utils/misc.h index 390217d25..f1a081b11 100644 --- a/src/base/utils/misc.h +++ b/src/base/utils/misc.h @@ -71,7 +71,6 @@ namespace Utils }; QString parseHtmlLinks(const QString &rawText); - bool isUrl(const QString &s); void shutdownComputer(const ShutdownDialogAction &action); diff --git a/src/gui/addnewtorrentdialog.cpp b/src/gui/addnewtorrentdialog.cpp index 784cb953c..5d126ab31 100644 --- a/src/gui/addnewtorrentdialog.cpp +++ b/src/gui/addnewtorrentdialog.cpp @@ -231,7 +231,7 @@ void AddNewTorrentDialog::show(const QString &source, const BitTorrent::AddTorre { AddNewTorrentDialog *dlg = new AddNewTorrentDialog(inParams, parent); - if (Utils::Misc::isUrl(source)) { + if (Net::DownloadManager::hasSupportedScheme(source)) { // Launch downloader // TODO: Don't save loaded torrent to file, just use downloaded data! Net::DownloadHandler *handler = Net::DownloadManager::instance()->download( diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 64b03877e..5bf9f05cb 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -60,6 +60,7 @@ #include "base/bittorrent/torrenthandle.h" #include "base/global.h" #include "base/logger.h" +#include "base/net/downloadmanager.h" #include "base/preferences.h" #include "base/rss/rss_folder.h" #include "base/rss/rss_session.h" @@ -1295,7 +1296,7 @@ void MainWindow::dropEvent(QDropEvent *event) for (const QString &file : asConst(files)) { const bool isTorrentLink = (file.startsWith("magnet:", Qt::CaseInsensitive) || file.endsWith(C_TORRENT_FILE_EXTENSION, Qt::CaseInsensitive) - || Utils::Misc::isUrl(file)); + || Net::DownloadManager::hasSupportedScheme(file)); if (isTorrentLink) torrentFiles << file; else diff --git a/src/gui/rss/rsswidget.cpp b/src/gui/rss/rsswidget.cpp index 77b8eb4f6..b0a0d4a6a 100644 --- a/src/gui/rss/rsswidget.cpp +++ b/src/gui/rss/rsswidget.cpp @@ -48,7 +48,6 @@ #include "base/rss/rss_feed.h" #include "base/rss/rss_folder.h" #include "base/rss/rss_session.h" -#include "base/utils/misc.h" #include "addnewtorrentdialog.h" #include "articlelistwidget.h" #include "autoexpandabledialog.h" @@ -249,7 +248,7 @@ void RSSWidget::on_newFeedButton_clicked() { // Ask for feed URL const QString clipText = qApp->clipboard()->text(); - const QString defaultURL = (Utils::Misc::isUrl(clipText) ? clipText : "http://"); + const QString defaultURL = Net::DownloadManager::hasSupportedScheme(clipText) ? clipText : "http://"; bool ok; QString newURL = AutoExpandableDialog::getText( diff --git a/src/gui/search/pluginselectdialog.cpp b/src/gui/search/pluginselectdialog.cpp index a297927b4..f2bf24c5d 100644 --- a/src/gui/search/pluginselectdialog.cpp +++ b/src/gui/search/pluginselectdialog.cpp @@ -43,7 +43,6 @@ #include "base/net/downloadhandler.h" #include "base/net/downloadmanager.h" #include "base/utils/fs.h" -#include "base/utils/misc.h" #include "autoexpandabledialog.h" #include "guiiconprovider.h" #include "pluginsourcedialog.h" @@ -337,7 +336,7 @@ void PluginSelectDialog::askForPluginUrl() bool ok = false; QString clipTxt = qApp->clipboard()->text(); QString defaultUrl = "http://"; - if (Utils::Misc::isUrl(clipTxt) && clipTxt.endsWith(".py")) + if (Net::DownloadManager::hasSupportedScheme(clipTxt) && clipTxt.endsWith(".py")) defaultUrl = clipTxt; QString url = AutoExpandableDialog::getText( this, tr("New search engine plugin URL"),