diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2009-11-23 01:25:17 +0100 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2009-11-23 01:25:17 +0100 |
commit | ae723ad13075808d687ad1b14f46f4a8cae87849 (patch) | |
tree | 0638fccb68de55749e33abf3f5512a35b61e096a | |
parent | Ok, same other bits on the adblock manager. (diff) | |
download | rekonq-ae723ad13075808d687ad1b14f46f4a8cae87849.tar.xz |
First adblock implementation. now rekonq seems... slower :(
But at least it's ads free!
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/adblock/adblockmanager.cpp | 65 | ||||
-rw-r--r-- | src/adblock/adblockmanager.h | 3 | ||||
-rw-r--r-- | src/webpage.cpp | 4 |
4 files changed, 58 insertions, 15 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4e12ccd7..1061f3e7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -38,6 +38,7 @@ SET( rekonq_KDEINIT_SRCS bookmarkspanel/bookmarksproxy.cpp #---------------------------------------- adblock/adblockmanager.cpp + adblock/adblockrule.cpp ) diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index 6b2f9616..70960b44 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -27,6 +27,16 @@ #include "adblockmanager.h" #include "adblockmanager.moc" + +// Local Includes +#include "adblockrule.h" + +// KDE Includes +#include <KSharedConfig> +#include <KConfigGroup> +#include <KDebug> + +// Qt Includes #include <QUrl> @@ -45,26 +55,53 @@ AdBlockManager::~AdBlockManager() void AdBlockManager::loadSettings() { -// KConfigGroup cg(_config, _group); -// groupBox->setChecked( cg.readEntry("Enabled", false) ); -// -// int num = cg.readEntry("Count", 0); -// for (int i = 0; i < num; ++i) -// { -// QString key = "Filter-" + QString::number(i); -// QString filter = cg.readEntry( key, QString() ); -// listWidget->addItem(filter); -// } + _blockList.clear(); + + KSharedConfig::Ptr config = KSharedConfig::openConfig("webkitrc", KConfig::NoGlobals); + KConfigGroup cg(config, "adblock"); + + _isAdblockEnabled = cg.readEntry("Enabled", false); + + int num = cg.readEntry("Count", 0); + for (int i = 0; i < num; ++i) + { + QString key = "Filter-" + QString::number(i); + QString filter = cg.readEntry( key, QString() ); + if(!filter.isEmpty()) + { + if (filter.startsWith(QLatin1String("@@"))) + _whiteList << filter; + else + _blockList << filter; + } + } } bool AdBlockManager::isUrlAllowed(const QUrl &url) { - if (url.scheme() == QLatin1String("data")) - return false; - + kDebug() << "matching rule..."; if (!_isAdblockEnabled) - return false; + return true; + QString urlString = QString::fromUtf8(url.toEncoded()); + + foreach(const QString &str, _whiteList) + { + AdBlockRule rule(str); + kDebug() << "checking white list rule..."; + if(rule.match(urlString)) + return true; + } + + foreach(const QString &str, _blockList) + { + AdBlockRule rule(str); + kDebug() << "checking block list rule..."; + if(rule.match(urlString)) + return false; + } + + kDebug() << "done"; return true; } diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index c782ee0d..a175fa2f 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -50,7 +50,8 @@ public: private: bool _isAdblockEnabled; - QStringList _blocks; + QStringList _blockList; + QStringList _whiteList; }; #endif diff --git a/src/webpage.cpp b/src/webpage.cpp index 9803d8a3..e8c204f8 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -253,5 +253,9 @@ QString WebPage::errorPage(QNetworkReply *reply) bool WebPage::authorizedRequest(const QUrl &url) const { + // we filter just http sites + if(url.scheme() != QLatin1String("http")) + return true; + return m_adBlockMan->isUrlAllowed(url); } |