summaryrefslogtreecommitdiff
path: root/src/settings
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2010-03-13 23:24:45 +0100
committerAndrea Diamantini <adjam7@gmail.com>2010-03-13 23:24:45 +0100
commit6faa12680a0d7d2f13c2862628325ab65521004b (patch)
treed749f40b304feb6c1d007dcce46c9c8e9d17932d /src/settings
parentUpdating forgotten files (diff)
downloadrekonq-6faa12680a0d7d2f13c2862628325ab65521004b.tar.xz
Implemented automatic adblock update.
This (squashed) commit adds this new feature in rekonq, letting people to simply "forgot" adblock and let rekonq do everything for it I added: - a new (rekonq) adblock widget - an asyncronous method to update rules from the net every TOT days - a better AdBlockManager management. What it is actually missing is the adp protocol support to add new subscriptions to adblock. This will come the next week. For now this part seems stable and needs just testing :)
Diffstat (limited to 'src/settings')
-rw-r--r--src/settings/adblockwidget.cpp158
-rw-r--r--src/settings/adblockwidget.h56
-rw-r--r--src/settings/settings_adblock.ui167
-rw-r--r--src/settings/settingsdialog.cpp22
4 files changed, 393 insertions, 10 deletions
diff --git a/src/settings/adblockwidget.cpp b/src/settings/adblockwidget.cpp
new file mode 100644
index 00000000..45e5fd5c
--- /dev/null
+++ b/src/settings/adblockwidget.cpp
@@ -0,0 +1,158 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2010 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/>.
+*
+* ============================================================ */
+
+
+#include "adblockwidget.h"
+#include "adblockwidget.moc"
+
+#include "rekonq.h"
+
+#include <KSharedConfig>
+#include <KIcon>
+#include <KDebug>
+
+#include <QString>
+#include <QWhatsThis>
+#include <QListWidgetItem>
+
+
+AdBlockWidget::AdBlockWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ setupUi(this);
+
+ hintLabel->setText( i18n("<qt>Filter expression (e.g. <tt>http://www.example.com/ad/*</tt>, <a href=\"filterhelp\">more information</a>):") );
+ connect( hintLabel, SIGNAL(linkActivated(const QString &)), this, SLOT(slotInfoLinkActivated(const QString &)) );
+
+ listWidget->setSortingEnabled(true);
+ listWidget->setSelectionMode(QAbstractItemView::SingleSelection);
+
+ searchLine->setListWidget(listWidget);
+
+ insertButton->setIcon( KIcon("list-add") );
+ connect( insertButton, SIGNAL( clicked() ), this, SLOT( insertRule() ) );
+
+ removeButton->setIcon( KIcon("list-remove") );
+ connect( removeButton, SIGNAL( clicked() ), this, SLOT( removeRule() ) );
+
+ load();
+}
+
+
+void AdBlockWidget::slotInfoLinkActivated(const QString &url)
+{
+ Q_UNUSED(url)
+
+ QString hintHelpString = i18n("<qt><p>Enter an expression to filter. Filters can be defined as either:"
+ "<ul><li>a shell-style wildcard, e.g. <tt>http://www.example.com/ads*</tt>, the wildcards <tt>*?[]</tt> may be used</li>"
+ "<li>a full regular expression by surrounding the string with '<tt>/</tt>', e.g. <tt>/\\/(ad|banner)\\./</tt></li></ul>"
+ "<p>Any filter string can be preceded by '<tt>@@</tt>' to whitelist (allow) any matching URL, "
+ "which takes priority over any blacklist (blocking) filter.");
+
+ QWhatsThis::showText( QCursor::pos(), hintHelpString );
+}
+
+
+void AdBlockWidget::insertRule()
+{
+ QString rule = addFilterLineEdit->text();
+ if(rule.isEmpty())
+ return;
+
+ listWidget->addItem( rule );
+ addFilterLineEdit->clear();
+}
+
+
+void AdBlockWidget::removeRule()
+{
+ listWidget->takeItem( listWidget->currentRow() );
+}
+
+
+void AdBlockWidget::load()
+{
+ bool isAdBlockEnabled = ReKonfig::adBlockEnabled();
+ checkEnableAdblock->setChecked(isAdBlockEnabled);
+
+ bool areImageFiltered = ReKonfig::hideAdsEnabled();
+ checkHideImages->setChecked(areImageFiltered);
+
+ QStringList subscriptions = ReKonfig::subscriptionNames();
+
+ // load automatic rules
+ foreach(QString sub, subscriptions)
+ {
+ QTreeWidgetItem *subItem = new QTreeWidgetItem(treeWidget);
+ subItem->setText(0, sub);
+ loadRules(subItem);
+ }
+
+ // load local rules
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup localGroup( config, "rules" );
+ QStringList rules = localGroup.readEntry( "local-rules" , QStringList() );
+ foreach(const QString &rule, rules)
+ {
+ listWidget->addItem( rule );
+ }
+}
+
+
+void AdBlockWidget::loadRules(QTreeWidgetItem *item)
+{
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup localGroup( config, "rules" );
+
+ QString str = item->text(0) + "-rules";
+ kDebug() << str;
+ QStringList rules = localGroup.readEntry( str , QStringList() );
+
+ foreach(const QString &rule, rules)
+ {
+ QTreeWidgetItem *subItem = new QTreeWidgetItem(item);
+ subItem->setText(0, rule);
+ }
+}
+
+
+void AdBlockWidget::save()
+{
+ int n;
+
+ // local rules
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup localGroup( config , "rules" );
+
+ QStringList localRules;
+
+ n = listWidget->count();
+ for(int i = 0; i < n; ++i)
+ {
+ QListWidgetItem *item = listWidget->takeItem(i);
+ localRules << item->text();
+ }
+ localGroup.writeEntry( "local-rules" , localRules );
+}
diff --git a/src/settings/adblockwidget.h b/src/settings/adblockwidget.h
new file mode 100644
index 00000000..67061800
--- /dev/null
+++ b/src/settings/adblockwidget.h
@@ -0,0 +1,56 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2010 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 ADBLOCK_WIDGET_H
+#define ADBLOCK_WIDGET_H
+
+
+#include "ui_settings_adblock.h"
+
+#include <QWidget>
+#include <QTreeWidgetItem>
+
+
+class AdBlockWidget : public QWidget, private Ui::adblock
+{
+Q_OBJECT
+
+public:
+ AdBlockWidget(QWidget *parent = 0);
+
+ void save();
+
+private slots:
+ void slotInfoLinkActivated(const QString &);
+ void insertRule();
+ void removeRule();
+
+private:
+ void load();
+ void loadRules(QTreeWidgetItem *item);
+};
+
+#endif // ADBLOCK_WIDGET_H
diff --git a/src/settings/settings_adblock.ui b/src/settings/settings_adblock.ui
new file mode 100644
index 00000000..28e1f973
--- /dev/null
+++ b/src/settings/settings_adblock.ui
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>adblock</class>
+ <widget class="QWidget" name="adblock">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>601</width>
+ <height>507</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QCheckBox" name="checkEnableAdblock">
+ <property name="text">
+ <string>&amp;Enable AdBlock</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkHideImages">
+ <property name="text">
+ <string>&amp;Hide filtered Elements</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="KTabWidget" name="tabWidget">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tab_3">
+ <attribute name="title">
+ <string>Automatic Filters</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QTreeWidget" name="treeWidget">
+ <column>
+ <property name="text">
+ <string notr="true">1</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Automatic update interval:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox">
+ <property name="value">
+ <number>7</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>Manual Filters</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Search:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="KListWidgetSearchLine" name="searchLine"/>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="KListWidget" name="listWidget"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="hintLabel">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="KLineEdit" name="addFilterLineEdit"/>
+ </item>
+ <item>
+ <widget class="QToolButton" name="insertButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="removeButton">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>KListWidget</class>
+ <extends>QListWidget</extends>
+ <header>klistwidget.h</header>
+ </customwidget>
+ <customwidget>
+ <class>KLineEdit</class>
+ <extends>QLineEdit</extends>
+ <header>klineedit.h</header>
+ </customwidget>
+ <customwidget>
+ <class>KTabWidget</class>
+ <extends>QTabWidget</extends>
+ <header>ktabwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>KListWidgetSearchLine</class>
+ <extends>KLineEdit</extends>
+ <header>klistwidgetsearchline.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp
index e7a9d1e8..fa1e8891 100644
--- a/src/settings/settingsdialog.cpp
+++ b/src/settings/settingsdialog.cpp
@@ -36,12 +36,14 @@
#include "application.h"
#include "mainwindow.h"
#include "webtab.h"
+#include "adblockwidget.h"
//Ui Includes
#include "ui_settings_general.h"
#include "ui_settings_tabs.h"
#include "ui_settings_fonts.h"
#include "ui_settings_webkit.h"
+#include "ui_settings_adblock.h"
// KDE Includes
#include <KConfig>
@@ -63,12 +65,14 @@ private:
Ui::tabs tabsUi;
Ui::fonts fontsUi;
Ui::webkit webkitUi;
+
+ AdBlockWidget *adBlockWidg;
KCModuleProxy *proxyModule;
KCModuleProxy *ebrowsingModule;
KCModuleProxy *cookiesModule;
KCModuleProxy *cacheModule;
- KCModuleProxy *adblockModule;
+
KShortcutsEditor *shortcutsEditor;
Private(SettingsDialog *parent);
@@ -123,10 +127,10 @@ Private::Private(SettingsDialog *parent)
KIcon webkitIcon = KIcon(QIcon(webkitIconPath));
pageItem->setIcon(webkitIcon);
- KCModuleInfo adblockInfo("khtml_filter.desktop");
- adblockModule = new KCModuleProxy(adblockInfo,parent);
- pageItem = parent->addPage(adblockModule, i18n(adblockInfo.moduleName().toLocal8Bit()));
- pageItem->setIcon(KIcon(adblockInfo.icon()));
+ adBlockWidg = new AdBlockWidget(parent);
+ adBlockWidg->layout()->setMargin(0);
+ pageItem = parent->addPage(adBlockWidg , i18n("Ad Block"));
+ pageItem->setIcon( KIcon("preferences-web-browser-adblock") );
shortcutsEditor = new KShortcutsEditor(Application::instance()->mainWindow()->actionCollection(), parent);
pageItem = parent->addPage(shortcutsEditor , i18n("Shortcuts"));
@@ -137,7 +141,7 @@ Private::Private(SettingsDialog *parent)
pageItem = parent->addPage(ebrowsingModule, i18n(ebrowsingInfo.moduleName().toLocal8Bit()));
pageItem->setIcon(KIcon(ebrowsingInfo.icon()));
- // WARNING remember wheh changing here that the smaller netbooks
+ // WARNING remember wheh changing here that the smallest netbooks
// have a 1024x576 resolution. So DON'T bother that limits!!
parent->setMinimumSize(700,525);
}
@@ -162,8 +166,7 @@ SettingsDialog::SettingsDialog(QWidget *parent)
connect(d->cookiesModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
connect(d->proxyModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
connect(d->cacheModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
- connect(d->adblockModule, SIGNAL(changed(bool)), this, SLOT(updateButtons()));
-
+
connect(d->shortcutsEditor, SIGNAL(keyChange()), this, SLOT(updateButtons()));
connect(this, SIGNAL(applyClicked()), this, SLOT(saveSettings()));
@@ -213,7 +216,7 @@ void SettingsDialog::saveSettings()
d->proxyModule->save();
d->cacheModule->save();
d->shortcutsEditor->save();
- d->adblockModule->save();
+ d->adBlockWidg->save();
}
@@ -224,7 +227,6 @@ bool SettingsDialog::hasChanged()
|| d->cookiesModule->changed()
|| d->proxyModule->changed()
|| d->cacheModule->changed()
- || d->adblockModule->changed()
|| d->shortcutsEditor->isModified();
;
}