diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2012-02-13 12:03:23 +0100 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2012-03-13 10:24:41 +0100 |
commit | fdb6bf971a3f3e0edea840cd92d18374b494aacb (patch) | |
tree | 5a106ef755c56b2dd8bd696d4f63552d135b7790 | |
parent | Remove ability to manage abp schemes and add subscriptions on click (diff) | |
download | rekonq-fdb6bf971a3f3e0edea840cd92d18374b494aacb.tar.xz |
Move adblock manager to use multiple text files for rules and
separate adblock settings from rekonq ones.
We now have 60 adblock rules list sites stored to be enabled
"on click"
-rw-r--r-- | src/adblock/adblockmanager.cpp | 164 | ||||
-rw-r--r-- | src/adblock/adblockmanager.h | 13 | ||||
-rw-r--r-- | src/adblock/adblockwidget.cpp | 66 | ||||
-rw-r--r-- | src/data/CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/data/adblockrc | 187 | ||||
-rw-r--r-- | src/rekonq.kcfg | 23 |
6 files changed, 302 insertions, 158 deletions
diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index e48cc753..ff3aad6a 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -37,9 +37,8 @@ #include "webpage.h" // KDE Includes -#include <KSharedConfig> -#include <KConfigGroup> -#include <KIO/TransferJob> +#include <KIO/FileCopyJob> +#include <KStandardDirs> // Qt Includes #include <QUrl> @@ -50,7 +49,6 @@ AdBlockManager::AdBlockManager(QObject *parent) : QObject(parent) , _isAdblockEnabled(false) , _isHideAdsEnabled(false) - , _index(0) { loadSettings(); } @@ -66,8 +64,21 @@ AdBlockManager::~AdBlockManager() void AdBlockManager::loadSettings() { - _index = 0; - _buffer.clear(); + // first, check this... + QString adblockFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrc")); + if (!QFile::exists(adblockFilePath)) + { + QString generalAdblockFilePath = KStandardDirs::locate("appdata" , QL1S("adblockrc")); + QFile adblockFile(generalAdblockFilePath); + bool copied = adblockFile.copy(adblockFilePath); + if (!copied) + { + kDebug() << "oh oh... Problems copying default adblock file"; + return; + } + } + _adblockConfig = KSharedConfig::openConfig("adblockrc", KConfig::SimpleConfig, "appdata"); + // ---------------- _hostWhiteList.clear(); _hostBlackList.clear(); @@ -75,7 +86,8 @@ void AdBlockManager::loadSettings() _blackList.clear(); _hideList.clear(); - _isAdblockEnabled = ReKonfig::adBlockEnabled(); + KConfigGroup settingsGroup(_adblockConfig, "Settings"); + _isAdblockEnabled = settingsGroup.readEntry("adBlockEnabled", false); kDebug() << "ADBLOCK ENABLED = " << _isAdblockEnabled; // no need to load filters if adblock is not enabled :) @@ -83,43 +95,51 @@ void AdBlockManager::loadSettings() return; // just to be sure.. - _isHideAdsEnabled = ReKonfig::hideAdsEnabled(); - - // read settings - KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); - KConfigGroup rulesGroup(config, "rules"); - QStringList rules; - rules = rulesGroup.readEntry("local-rules" , QStringList()); - loadRules(rules); + _isHideAdsEnabled = settingsGroup.readEntry("hideAdsEnabled", false); // ---------------------------------------------------------- QDateTime today = QDateTime::currentDateTime(); - QDateTime lastUpdate = ReKonfig::lastUpdate(); // the day of the implementation.. :) - int days = ReKonfig::updateInterval(); + QDateTime lastUpdate = QDateTime::fromString(settingsGroup.readEntry("lastUpdate", QString())); + int days = settingsGroup.readEntry("updateInterval", 7); if (today > lastUpdate.addDays(days)) { - ReKonfig::setLastUpdate(today); + settingsGroup.writeEntry("lastUpdate", today.toString()); - updateNextSubscription(); + updateSubscriptions(); return; } // else - QStringList titles = ReKonfig::subscriptionTitles(); - Q_FOREACH(const QString & title, titles) + KConfigGroup filtersGroup(_adblockConfig, "FiltersList"); + for (int i = 1; i <= 60; ++i) { - rules = rulesGroup.readEntry(title + "-rules" , QStringList()); - loadRules(rules); + QString n = QString::number(i); + bool filterActive = filtersGroup.readEntry("FilterEnabled-" + n, false); + if (filterActive) + { + QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n); + loadRules(rulesFilePath); + } } } -void AdBlockManager::loadRules(const QStringList &rules) +void AdBlockManager::loadRules(const QString &rulesFilePath) { - Q_FOREACH(const QString & stringRule, rules) + QFile ruleFile(rulesFilePath); + if (!ruleFile.open(QFile::ReadOnly | QFile::Text)) + { + kDebug() << "Unable to open rule file" << rulesFilePath; + return; + } + + QTextStream in(&ruleFile); + while (!in.atEnd()) { + QString stringRule = in.readLine(); + // ! rules are comments if (stringRule.startsWith('!')) continue; @@ -267,82 +287,38 @@ void AdBlockManager::applyHidingRules(WebPage *page) } -void AdBlockManager::updateNextSubscription() +void AdBlockManager::updateSubscriptions() { - QStringList locations = ReKonfig::subscriptionLocations(); - - if (_index < locations.size()) - { - QString urlString = locations.at(_index); - KUrl subUrl = KUrl(urlString); - - KIO::TransferJob* job = KIO::get(subUrl , KIO::Reload , KIO::HideProgressInfo); - job->metaData().insert("ssl_no_client_cert", "TRUE"); - job->metaData().insert("ssl_no_ui", "TRUE"); - job->metaData().insert("UseCache", "false"); - job->metaData().insert("cookies", "none"); - job->metaData().insert("no-auth", "true"); - - connect(job, SIGNAL(data(KIO::Job*,QByteArray)), this, SLOT(subscriptionData(KIO::Job*,QByteArray))); - connect(job, SIGNAL(result(KJob*)), this, SLOT(slotResult(KJob*))); - - return; - } - - _index = 0; - _buffer.clear(); -} + KConfigGroup filtersGroup(_adblockConfig, "FiltersList"); + int i = 1; + QString n = QString::number(i); -void AdBlockManager::slotResult(KJob *job) -{ - if (job->error()) - return; - - QList<QByteArray> list = _buffer.split('\n'); - QStringList ruleList; - Q_FOREACH(const QByteArray & ba, list) + while (filtersGroup.hasKey("FilterName-" + n)) { - ruleList << QString(ba); - } - loadRules(ruleList); - saveRules(ruleList); - - _index++; - - // last.. - updateNextSubscription(); -} - - -void AdBlockManager::subscriptionData(KIO::Job* job, const QByteArray& data) -{ - Q_UNUSED(job) - - if (data.isEmpty()) - return; - - int oldSize = _buffer.size(); - _buffer.resize(_buffer.size() + data.size()); - memcpy(_buffer.data() + oldSize, data.data(), data.size()); -} - + bool isFilterEnabled = filtersGroup.readEntry("FilterEnabled-" + n, false); + if (isFilterEnabled) + { + QString fUrl = filtersGroup.readEntry("FilterURL-" + n, QString()); + KUrl subUrl = KUrl(fUrl); + + kDebug() << "Filter ENABLED: " << fUrl; + QString rulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_") + n); + KUrl destUrl = KUrl(rulesFilePath); + + KIO::FileCopyJob* job = KIO::file_copy(subUrl , destUrl, -1, KIO::HideProgressInfo); + job->metaData().insert("ssl_no_client_cert", "TRUE"); + job->metaData().insert("ssl_no_ui", "TRUE"); + job->metaData().insert("UseCache", "false"); + job->metaData().insert("cookies", "none"); + job->metaData().insert("no-auth", "true"); + } -void AdBlockManager::saveRules(const QStringList &rules) -{ - QStringList cleanedRules; - Q_FOREACH(const QString & r, rules) - { - if (!r.startsWith('!') && !r.startsWith('[') && !r.isEmpty()) - cleanedRules << r; + i++; + n = QString::number(i); } - QStringList titles = ReKonfig::subscriptionTitles(); - QString title = titles.at(_index) + "-rules"; - - KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); - KConfigGroup cg(config , "rules"); - cg.writeEntry(title, cleanedRules); + loadSettings(); } diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index cce00877..6b7c225e 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -130,6 +130,7 @@ // KDE Includes #include <KIO/Job> +#include <KSharedConfig> // Qt Includes #include <QObject> @@ -161,13 +162,10 @@ public Q_SLOTS: void showSettings(); private: - void updateNextSubscription(); - void saveRules(const QStringList &); - void loadRules(const QStringList &); + void updateSubscriptions(); + void loadRules(const QString &); -private Q_SLOTS: - void slotResult(KJob *); - void subscriptionData(KIO::Job*, const QByteArray&); + KSharedConfig::Ptr config(); private: bool _isAdblockEnabled; @@ -179,8 +177,7 @@ private: AdBlockRuleList _whiteList; QStringList _hideList; - int _index; - QByteArray _buffer; + KSharedConfig::Ptr _adblockConfig; }; #endif diff --git a/src/adblock/adblockwidget.cpp b/src/adblock/adblockwidget.cpp index c26e31f4..8e6a81ae 100644 --- a/src/adblock/adblockwidget.cpp +++ b/src/adblock/adblockwidget.cpp @@ -108,36 +108,36 @@ void AdBlockWidget::removeRule() void AdBlockWidget::load() { - const bool isAdBlockEnabled = ReKonfig::adBlockEnabled(); - checkEnableAdblock->setChecked(isAdBlockEnabled); - // update enabled status - checkHideAds->setEnabled(checkEnableAdblock->isChecked()); - tabWidget->setEnabled(checkEnableAdblock->isChecked()); - - const bool areImageFiltered = ReKonfig::hideAdsEnabled(); - checkHideAds->setChecked(areImageFiltered); - - const int days = ReKonfig::updateInterval(); - spinBox->setValue(days); - - const QStringList subscriptions = ReKonfig::subscriptionTitles(); - - // load automatic rules - Q_FOREACH(const QString & sub, subscriptions) - { - QTreeWidgetItem *subItem = new QTreeWidgetItem(treeWidget); - subItem->setText(0, sub); - loadRules(subItem); - } - - // load local rules - KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); - KConfigGroup localGroup(config, "rules"); - const QStringList rules = localGroup.readEntry("local-rules" , QStringList()); - Q_FOREACH(const QString & rule, rules) - { - listWidget->addItem(rule); - } +// const bool isAdBlockEnabled = ReKonfig::adBlockEnabled(); +// checkEnableAdblock->setChecked(isAdBlockEnabled); +// // update enabled status +// checkHideAds->setEnabled(checkEnableAdblock->isChecked()); +// tabWidget->setEnabled(checkEnableAdblock->isChecked()); +// +// const bool areImageFiltered = ReKonfig::hideAdsEnabled(); +// checkHideAds->setChecked(areImageFiltered); +// +// const int days = ReKonfig::updateInterval(); +// spinBox->setValue(days); +// +// const QStringList subscriptions = ReKonfig::subscriptionTitles(); +// +// // load automatic rules +// Q_FOREACH(const QString & sub, subscriptions) +// { +// QTreeWidgetItem *subItem = new QTreeWidgetItem(treeWidget); +// subItem->setText(0, sub); +// loadRules(subItem); +// } +// +// // load local rules +// KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); +// KConfigGroup localGroup(config, "rules"); +// const QStringList rules = localGroup.readEntry("local-rules" , QStringList()); +// Q_FOREACH(const QString & rule, rules) +// { +// listWidget->addItem(rule); +// } } @@ -176,9 +176,9 @@ void AdBlockWidget::save() } localGroup.writeEntry("local-rules" , localRules); - ReKonfig::setAdBlockEnabled(checkEnableAdblock->isChecked()); - ReKonfig::setHideAdsEnabled(checkHideAds->isChecked()); - ReKonfig::setUpdateInterval(spinBox->value()); +// ReKonfig::setAdBlockEnabled(checkEnableAdblock->isChecked()); +// ReKonfig::setHideAdsEnabled(checkHideAds->isChecked()); +// ReKonfig::setUpdateInterval(spinBox->value()); _changed = false; emit changed(false); diff --git a/src/data/CMakeLists.txt b/src/data/CMakeLists.txt index 091650b9..5c3cfd80 100644 --- a/src/data/CMakeLists.txt +++ b/src/data/CMakeLists.txt @@ -28,6 +28,13 @@ INSTALL( DESTINATION ${DATA_INSTALL_DIR}/rekonq/htmls ) +# adblock default settings +INSTALL( + FILES + adblockrc + DESTINATION ${DATA_INSTALL_DIR}/rekonq +) + # opensearch engines INSTALL( FILES diff --git a/src/data/adblockrc b/src/data/adblockrc new file mode 100644 index 00000000..13843ba8 --- /dev/null +++ b/src/data/adblockrc @@ -0,0 +1,187 @@ +[Settings] +adBlockEnabled=false +hideAdsEnabled=false +updateInterval=7 +lastUpdate=Mon Feb 13 11:58:51 2012 + +[FiltersList] +FilterEnabled-1=true +FilterName-1=EasyList +FilterURL-1=https://easylist-downloads.adblockplus.org/easylist.txt +FilterEnabled-2=false +FilterName-2=Corset+EasyList +FilterURL-2=https://easylist-downloads.adblockplus.org/corset+easylist.txt +FilterEnabled-3=false +FilterName-3=Corset +FilterURL-3=http://brianyi.com/corset.txt +FilterEnabled-4=false +FilterName-4=EasyList Germany+EasyList +FilterURL-4=https://easylist-downloads.adblockplus.org/ares+easylist.txt +FilterEnabled-5=false +FilterName-5=EasyList Germany +FilterURL-5=https://easylist-downloads.adblockplus.org/easylistgermany.txt +FilterEnabled-6=false +FilterName-6=Liste FR+EasyList +FilterURL-6=https://easylist-downloads.adblockplus.org/liste_fr+easylist.txt +FilterEnabled-7=false +FilterName-7=Liste FR +FilterURL-7=http://lian.info.tm/liste_fr.txt +FilterEnabled-8=false +FilterName-8=ROList+EasyList +FilterURL-8=https://easylist-downloads.adblockplus.org/rolist+easylist.txt +FilterEnabled-9=false +FilterName-9=ROList +FilterURL-9=http://www.picpoc.ro/menetzrolist.txt +FilterEnabled-10=false +FilterName-10=Việt Nam List+EasyList +FilterURL-10=https://easylist-downloads.adblockplus.org/abpvn+easylist.txt +FilterEnabled-11=false +FilterName-11=Việt Nam List +FilterURL-11=http://adblockplus-vietnam.googlecode.com/svn/trunk/abpvn.txt +FilterEnabled-12=false +FilterName-12=AdblockList.org +FilterURL-12=http://adblocklist.org/adblock-pxf-polish.txt +FilterEnabled-13=false +FilterName-13=Bulgarian list +FilterURL-13=http://stanev.org/abp/adblock_bg.txt +FilterEnabled-14=false +FilterName-14=EasyPrivacy+EasyList +FilterURL-14=https://easylist-downloads.adblockplus.org/easyprivacy+easylist.txt +FilterEnabled-15=false +FilterName-15=EasyPrivacy+Cédrics Liste +FilterURL-15=https://easylist-downloads.adblockplus.org/easyprivacy+cedrics.txt +FilterEnabled-16=false +FilterName-16=EasyPrivacy +FilterURL-16=https://easylist-downloads.adblockplus.org/easyprivacy.txt +FilterEnabled-17=false +FilterName-17=IsraelList +FilterURL-17=http://israellist.googlecode.com/files/IsraelList.txt +FilterEnabled-18=false +FilterName-18=Morpeh Rus List+EasyList +FilterURL-18=https://easylist-downloads.adblockplus.org/morpeh+easylist.txt +FilterEnabled-19=false +FilterName-19=Morpeh Rus List +FilterURL-19=http://adblockplus.mihalkin.ru/Russia.txt +FilterEnabled-20=false +FilterName-20=Norsk adblockliste +FilterURL-20=http://home.online.no/~mlangsho/adblock.txt +FilterEnabled-21=false +FilterName-21=void.gr +FilterURL-21=http://www.void.gr/kargig/void-gr-filters.txt +FilterEnabled-22=false +FilterName-22=Wiltteri +FilterURL-22=http://www.wiltteri.net/wiltteri.txt +FilterEnabled-23=false +FilterName-23=ChinaList +FilterURL-23=http://adblock-chinalist.googlecode.com/svn/trunk/adblock.txt +FilterEnabled-24=false +FilterName-24=Filter von Dr.Evil +FilterURL-24=http://adblock.maltekraus.de/adblock.txt +FilterEnabled-25=false +FilterName-25=RuAdList +FilterURL-25=http://ruadlist.googlecode.com/svn/trunk/adblock.txt +FilterEnabled-26=false +FilterName-26=AdblockRules.org +FilterURL-26=http://adblockrules.org/download.php?type=all +FilterEnabled-27=false +FilterName-27=BSI Lista Polska +FilterURL-27=http://www.bsi.info.pl/filtrABP.txt +FilterEnabled-28=false +FilterName-28=Czech List +FilterURL-28=http://dajbych.net/adblock.txt +FilterEnabled-29=false +FilterName-29=Cédrics Liste +FilterURL-29=http://chewey.de/mozilla/data/adblock.txt +FilterEnabled-30=false +FilterName-30=dutchblock +FilterURL-30=http://dutchmega.nl/dutchblock/list.txt +FilterEnabled-31=false +FilterName-31=Fanboy's List +FilterURL-31=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-current-expanded.txt +FilterEnabled-32=false +FilterName-32=Fanboy's Chinese +FilterURL-32=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-chn.txt +FilterEnabled-33=false +FilterName-33=Fanboy's Czech +FilterURL-33=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-cz.txt +FilterEnabled-34=false +FilterName-34=Fanboy's Espanol/Portuguese +FilterURL-34=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-esp.txt +FilterEnabled-35=false +FilterName-35=Fanboy's Japanese +FilterURL-35=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-jpn.txt +FilterEnabled-36=false +FilterName-36=Fanboy's Korean +FilterURL-36=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-krn.txt +FilterEnabled-37=false +FilterName-37=Fanboy's Tracking/Stats Blocking +FilterURL-37=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-stats.txt +FilterEnabled-38=false +FilterName-38=Fanboy's Turkish +FilterURL-38=http://www.fanboy.co.nz/adblock/fanboy-adblocklist-tky.txt +FilterEnabled-39=false +FilterName-39=Filter von MonztA +FilterURL-39=http://monzta.maltekraus.de/adblock.txt +FilterEnabled-40=false +FilterName-40=Filtros Nauscopicos +FilterURL-40=http://s3.amazonaws.com/lcp/maty/myfiles/AdBlock-Nauscopio-maty.txt +FilterEnabled-41=false +FilterName-41=Hackrus anti-advertisement +FilterURL-41=http://nsis.narod.ru/clean_internet/aag.txt +FilterEnabled-42=false +FilterName-42=Hackrus anti-advertisement supplemental +FilterURL-42=http://nsis.narod.ru/clean_internet/aas.txt +FilterEnabled-43=false +FilterName-43=Hackrus anti-counter +FilterURL-43=http://nsis.narod.ru/clean_internet/ac.txt +FilterEnabled-44=false +FilterName-44=hufilter +FilterURL-44=http://pete.teamlupus.hu/hufilter.txt +FilterEnabled-45=false +FilterName-45=Iceland List +FilterURL-45=http://adblock-iceland.googlecode.com/files/icelandic%20filter.txt +FilterEnabled-46=false +FilterName-46=Japanese General Filter +FilterURL-46=http://adblock-plus-japanese-filter.googlecode.com/svn/trunk/abp_jp_general.txt +FilterEnabled-47=false +FilterName-47=Japanese Site-Specific Filter +FilterURL-47=http://adblock-plus-japanese-filter.googlecode.com/svn/trunk/abp_jp_site_specific.txt +FilterEnabled-48=false +FilterName-48=Lista Basa +FilterURL-48=http://www.photographer.neostrada.pl/abp.txt +FilterEnabled-49=false +FilterName-49=NLBlock +FilterURL-49=http://www.verzijlbergh.com/adblock/nlblock.txt +FilterEnabled-50=false +FilterName-50=PLgeneral +FilterURL-50=http://www.niecko.pl/adblock/adblock.txt +FilterEnabled-51=false +FilterName-51=Schacks Adblock Plus liste +FilterURL-51=http://adblock.schack.dk/block.txt +FilterEnabled-52=false +FilterName-52=UA-IX Бан-лист +FilterURL-52=http://adblock.oasis.org.ua/banlist.txt +FilterEnabled-53=false +FilterName-53=Xfiles +FilterURL-53=http://mozilla.gfsolone.com/filtri.txt +FilterEnabled-54=false +FilterName-54=adblock.free.fr +FilterURL-54=http://adblock.free.fr/adblock.txt +FilterEnabled-55=false +FilterName-55=adblock.free.fr basic (bloque les pubs uniquement) +FilterURL-55=http://adblock.free.fr/adblock_basic.txt +FilterEnabled-56=false +FilterName-56=Ajnasz's list +FilterURL-56=http://ajnasz.hu/adblock/recent +FilterEnabled-57=false +FilterName-57=Schuzak's Universal Filter +FilterURL-57=http://www.schuzak.jp/other/abp.txt +FilterEnabled-58=false +FilterName-58=Malware Domains +FilterURL-58=http://malwaredomains.lanik.us/malwaredomains_full.txt +FilterEnabled-59=false +FilterName-59=Rickroll Blacklist +FilterURL-59=http://rickrolldb.com/ricklist.txt +FilterEnabled-60=false +FilterName-60=EasyList without element hiding +FilterURL-60=https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt diff --git a/src/rekonq.kcfg b/src/rekonq.kcfg index 6de6d1f1..bdcbcb60 100644 --- a/src/rekonq.kcfg +++ b/src/rekonq.kcfg @@ -249,29 +249,6 @@ </group> -<!-- AdBlock Settings --> -<group name="AdBlock"> - <entry name="adBlockEnabled" type="Bool"> - <default>false</default> - </entry> - <entry name="hideAdsEnabled" type="Bool"> - <default>false</default> - </entry> - <entry name="subscriptionTitles" type="StringList"> - <default>EasyList</default> - </entry> - <entry name="subscriptionLocations" type="StringList"> - <default>https://easylist-downloads.adblockplus.org/easylist.txt</default> - </entry> - <entry name="lastUpdate" type="DateTime"> - <default code="true">QDateTime(QDate(2009,03,13))</default> - </entry> - <entry name="updateInterval" type="Int"> - <default>7</default> - </entry> -</group> - - <!-- Sync Settings --> <group name="Sync"> <entry name="syncEnabled" type="Bool"> |