From 7330968510ffd83ab208ae0ffa8febe49c4dbcdb Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Mon, 10 Jun 2013 11:50:45 +0200 Subject: 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 --- src/CMakeLists.txt | 1 + src/icons/icondownloader.cpp | 6 ++- src/webtab/knetworkaccessmanager.cpp | 73 ++++++++++++++++++++++++++++++++++++ src/webtab/knetworkaccessmanager.h | 46 +++++++++++++++++++++++ src/webtab/networkaccessmanager.cpp | 3 +- src/webtab/webpage.cpp | 32 ++++++++++++++++ 6 files changed, 158 insertions(+), 3 deletions(-) create mode 100644 src/webtab/knetworkaccessmanager.cpp create mode 100644 src/webtab/knetworkaccessmanager.h 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 #include #include #include @@ -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 +* +* +* 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 . +* +* ============================================================ */ + + + +// Self Includes +#include "knetworkaccessmanager.h" +#include "knetworkaccessmanager.moc" + +// KDE Includes +#include +#include + +// Qt Includes +#include + + +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 +* +* +* 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 . +* +* ============================================================ */ + + +#ifndef K_NETWORK_ACCESS_MANAGER_H +#define K_NETWORK_ACCESS_MANAGER_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes +#include + + +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 @@ -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("

") + i18n("Oops... Proxy problems!") + QL1S("

"); + + QString faceIconPath = QString("file://") + KIconLoader::global()->iconPath("face-surprise" , -KIconLoader::SizeHuge, false); + msg += QL1S(""); + msg += QL1S("
"); + msg += QL1S(""); + msg += QL1S(""); + + msg += QL1S("

") + reply->errorString() + QL1S("

"); + + msg += QL1S("

"); + + msg += i18n("It seems you are having problems with your proxy settings. Try checking them,

then try again.
", QL1S("rekonq:settings/proxy"), urlString); + + msg += QL1S("

"); + msg += QL1S("
"); + + // 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("

") + i18n("Oops! Cannot load %1", urlString) + QL1S("

"); QString faceIconPath = QString("file://") + KIconLoader::global()->iconPath("face-surprise" , -KIconLoader::SizeHuge, false); -- cgit v1.2.1