diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2013-06-10 11:50:45 +0200 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2013-06-10 11:54:28 +0200 |
commit | 7330968510ffd83ab208ae0ffa8febe49c4dbcdb (patch) | |
tree | a5cd146787d922e66484b3887f93b8010b8aa698 | |
parent | i18n: toEncoded -> toString (diff) | |
download | rekonq-7330968510ffd83ab208ae0ffa8febe49c4dbcdb.tar.xz |
Link custom rekonq QNAM to KDE proxy settings
This is a first attempt to link our needed QNAM to KDE proxy settings.
It will try to fix proxy problems when used.
Oh... I also added some new error strings in case of proxy problems :)
CCBUG: 304378
CCBUG: 315598
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/icons/icondownloader.cpp | 6 | ||||
-rw-r--r-- | src/webtab/knetworkaccessmanager.cpp | 73 | ||||
-rw-r--r-- | src/webtab/knetworkaccessmanager.h | 46 | ||||
-rw-r--r-- | src/webtab/networkaccessmanager.cpp | 3 | ||||
-rw-r--r-- | src/webtab/webpage.cpp | 32 |
6 files changed, 158 insertions, 3 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 59844589..e31c05c6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -99,6 +99,7 @@ set(rekonq_KDEINIT_SRCS webtab/networkaccessmanager.cpp webtab/previewselectorbar.cpp webtab/protocolhandler.cpp + webtab/knetworkaccessmanager.cpp webtab/searchenginebar.cpp webtab/sslinfodialog.cpp webtab/walletbar.cpp diff --git a/src/icons/icondownloader.cpp b/src/icons/icondownloader.cpp index 6d1f3a5e..b1d813a3 100644 --- a/src/icons/icondownloader.cpp +++ b/src/icons/icondownloader.cpp @@ -28,8 +28,10 @@ #include "icondownloader.h" #include "icondownloader.moc" +// Local Includes +#include "knetworkaccessmanager.h" + // Qt Includes -#include <QNetworkAccessManager> #include <QNetworkReply> #include <QNetworkRequest> #include <QFile> @@ -41,7 +43,7 @@ IconDownloader::IconDownloader(const KUrl &srcUrl, const KUrl &destUrl, QObject , m_srcUrl(srcUrl) , m_destUrl(destUrl) { - QNetworkAccessManager *manager = new QNetworkAccessManager(this); + KNetworkAccessManager *manager = new KNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(srcUrl)); } diff --git a/src/webtab/knetworkaccessmanager.cpp b/src/webtab/knetworkaccessmanager.cpp new file mode 100644 index 00000000..f02ec2d8 --- /dev/null +++ b/src/webtab/knetworkaccessmanager.cpp @@ -0,0 +1,73 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2013 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + + +// Self Includes +#include "knetworkaccessmanager.h" +#include "knetworkaccessmanager.moc" + +// KDE Includes +#include <KConfig> +#include <KConfigGroup> + +// Qt Includes +#include <QNetworkProxy> + + +KNetworkAccessManager::KNetworkAccessManager(QObject *parent) + : QNetworkAccessManager(parent) +{ + // Proxy + QNetworkProxy proxy; + + KConfig config("kioslaverc", KConfig::NoGlobals); + + KConfigGroup proxyGroup(&config, QL1S("Proxy Settings")); + + int proxyType = proxyGroup.readEntry( QL1S("ProxyType"), 0); + kDebug() << "PROXY TYPE: " << proxyType; + + if (proxyType == 0) + proxy.setType(QNetworkProxy::NoProxy); + else + proxy.setType(QNetworkProxy::Socks5Proxy); + + QString proxyHost = proxyGroup.readEntry( QL1S("socksProxy"), QString("") ); + QStringList proxyInfoList = proxyHost.split(QL1C(' ')); + kDebug() << proxyInfoList; + if (proxyInfoList.isEmpty()) + return; + + proxy.setHostName(proxyInfoList.at(0)); + + if (proxyInfoList.count() == 2) + proxy.setPort(proxyInfoList.at(1).toInt()); + +// proxy.setUser("username"); +// proxy.setPassword("password"); +// + setProxy(proxy); +} diff --git a/src/webtab/knetworkaccessmanager.h b/src/webtab/knetworkaccessmanager.h new file mode 100644 index 00000000..fccddb69 --- /dev/null +++ b/src/webtab/knetworkaccessmanager.h @@ -0,0 +1,46 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2013 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef K_NETWORK_ACCESS_MANAGER_H +#define K_NETWORK_ACCESS_MANAGER_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes +#include <QNetworkAccessManager> + + +class REKONQ_TESTS_EXPORT KNetworkAccessManager : public QNetworkAccessManager +{ + Q_OBJECT + +public: + explicit KNetworkAccessManager(QObject *parent = 0); +}; + +#endif // K_NETWORK_ACCESS_MANAGER_H diff --git a/src/webtab/networkaccessmanager.cpp b/src/webtab/networkaccessmanager.cpp index ae3c44f7..19613403 100644 --- a/src/webtab/networkaccessmanager.cpp +++ b/src/webtab/networkaccessmanager.cpp @@ -32,6 +32,7 @@ // Local Includes #include "adblockmanager.h" +#include "knetworkaccessmanager.h" // KDE Includes #include <KLocale> @@ -113,7 +114,7 @@ QNetworkAccessManager *NetworkAccessManager::privateAccessManager() { if (s_privateAccessManager == 0) { - s_privateAccessManager = new QNetworkAccessManager(); + s_privateAccessManager = new KNetworkAccessManager(); } return s_privateAccessManager; diff --git a/src/webtab/webpage.cpp b/src/webtab/webpage.cpp index bae10f5a..01116e73 100644 --- a/src/webtab/webpage.cpp +++ b/src/webtab/webpage.cpp @@ -726,7 +726,39 @@ QString WebPage::errorPage(QNetworkReply *reply) return html; } + QString errString = reply->errorString().toLower(); + if (errString.contains(QL1S("proxy"))) + { + msg += QL1S("<h2>") + i18n("Oops... Proxy problems!") + QL1S("</h2>"); + + QString faceIconPath = QString("file://") + KIconLoader::global()->iconPath("face-surprise" , -KIconLoader::SizeHuge, false); + msg += QL1S("<table>"); + msg += QL1S("<tr><td width=\"100px\">"); + msg += QL1S("<img style=\"margin: 0 auto;\" src=\"") + faceIconPath + QL1S("\" />"); + msg += QL1S("</td><td>"); + + msg += QL1S("<p><em>") + reply->errorString() + QL1S("</em></p>"); + + msg += QL1S("<p>"); + + msg += i18n("It seems you are having problems with your <a href=\"%1\">proxy settings</a>. Try checking them, <br /><br />then <a href=\"%4\">try again</a>.<br />", QL1S("rekonq:settings/proxy"), urlString); + + msg += QL1S("</p>"); + msg += QL1S("</td></tr></table>"); + + // done. Replace variables and show it + QString html = QL1S(file.readAll()); + + html.replace(QL1S("$DEFAULT_PATH"), dataPath); + html.replace(QL1S("$PAGE_TITLE"), title); + html.replace(QL1S("$MAIN_CONTENT"), msg); + html.replace(QL1S("$GENERAL_FONT"), QWebSettings::globalSettings()->fontFamily(QWebSettings::StandardFont)); + + return html; + } + + // general error page msg += QL1S("<h2>") + i18n("Oops! Cannot load <em>%1</em>", urlString) + QL1S("</h1>"); QString faceIconPath = QString("file://") + KIconLoader::global()->iconPath("face-surprise" , -KIconLoader::SizeHuge, false); |