diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2012-02-13 21:54:54 +0100 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2012-03-13 10:24:41 +0100 |
commit | 7327127a7852704df9282a45a2995139aa862f4e (patch) | |
tree | e203c81e910adad0f1f08bb7162f95d2d9f621bd | |
parent | Move adblock manager to use multiple text files for rules and (diff) | |
download | rekonq-7327127a7852704df9282a45a2995139aa862f4e.tar.xz |
Update adblock dialog
-rw-r--r-- | src/adblock/adblockmanager.cpp | 7 | ||||
-rw-r--r-- | src/adblock/adblockmanager.h | 2 | ||||
-rw-r--r-- | src/adblock/adblockwidget.cpp | 163 | ||||
-rw-r--r-- | src/adblock/adblockwidget.h | 14 | ||||
-rw-r--r-- | src/adblock/settings_adblock.ui | 47 |
5 files changed, 139 insertions, 94 deletions
diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index ff3aad6a..0c0a66db 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -112,6 +112,7 @@ void AdBlockManager::loadSettings() } // else + // load automatic and local rules KConfigGroup filtersGroup(_adblockConfig, "FiltersList"); for (int i = 1; i <= 60; ++i) { @@ -123,6 +124,10 @@ void AdBlockManager::loadSettings() loadRules(rulesFilePath); } } + + // load local rules + QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); + loadRules(localRulesFilePath); } @@ -328,7 +333,7 @@ void AdBlockManager::showSettings() dialog->setCaption(i18nc("@title:window", "Ad Block Settings")); dialog->setButtons(KDialog::Ok | KDialog::Cancel); - AdBlockWidget widget; + AdBlockWidget widget(_adblockConfig); dialog->setMainWidget(&widget); connect(dialog, SIGNAL(okClicked()), &widget, SLOT(save())); connect(dialog, SIGNAL(okClicked()), this, SLOT(loadSettings())); diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index 6b7c225e..f853a8ed 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -165,8 +165,6 @@ private: void updateSubscriptions(); void loadRules(const QString &); - KSharedConfig::Ptr config(); - private: bool _isAdblockEnabled; bool _isHideAdsEnabled; diff --git a/src/adblock/adblockwidget.cpp b/src/adblock/adblockwidget.cpp index 8e6a81ae..5ada506e 100644 --- a/src/adblock/adblockwidget.cpp +++ b/src/adblock/adblockwidget.cpp @@ -33,8 +33,8 @@ // KDE Includes #include <KSharedConfig> +#include <KStandardDirs> #include <KIcon> -#include <KDebug> // Qt Includes #include <QString> @@ -42,19 +42,20 @@ #include <QListWidgetItem> -AdBlockWidget::AdBlockWidget(QWidget *parent) +AdBlockWidget::AdBlockWidget(KSharedConfig::Ptr config, QWidget *parent) : QWidget(parent) , _changed(false) + , _adblockConfig(config) { 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(QString)), this, SLOT(slotInfoLinkActivated(QString))); - listWidget->setSortingEnabled(true); - listWidget->setSelectionMode(QAbstractItemView::SingleSelection); + manualFiltersListWidget->setSortingEnabled(true); + manualFiltersListWidget->setSelectionMode(QAbstractItemView::SingleSelection); - searchLine->setListWidget(listWidget); + searchLine->setListWidget(manualFiltersListWidget); insertButton->setIcon(KIcon("list-add")); connect(insertButton, SIGNAL(clicked()), this, SLOT(insertRule())); @@ -72,6 +73,8 @@ AdBlockWidget::AdBlockWidget(QWidget *parent) connect(checkEnableAdblock, SIGNAL(stateChanged(int)), this, SLOT(hasChanged())); connect(checkHideAds, SIGNAL(stateChanged(int)), this, SLOT(hasChanged())); connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(hasChanged())); + + connect(automaticFiltersListWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(hasChanged())); } @@ -80,8 +83,10 @@ 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>" + "<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."); @@ -95,64 +100,79 @@ void AdBlockWidget::insertRule() if (rule.isEmpty()) return; - listWidget->addItem(rule); + manualFiltersListWidget->addItem(rule); addFilterLineEdit->clear(); } void AdBlockWidget::removeRule() { - listWidget->takeItem(listWidget->currentRow()); + manualFiltersListWidget->takeItem(manualFiltersListWidget->currentRow()); } 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); -// } -} + // General settings + KConfigGroup settingsGroup(_adblockConfig, "Settings"); + const bool isAdBlockEnabled = settingsGroup.readEntry("adBlockEnabled", false); + checkEnableAdblock->setChecked(isAdBlockEnabled); -void AdBlockWidget::loadRules(QTreeWidgetItem *item) -{ - KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); - KConfigGroup localGroup(config, "rules"); + // update enabled status + checkHideAds->setEnabled(isAdBlockEnabled); + tabWidget->setEnabled(isAdBlockEnabled); + + const bool areImageFiltered = settingsGroup.readEntry("hideAdsEnabled", false); + checkHideAds->setChecked(areImageFiltered); + + const int days = settingsGroup.readEntry("updateInterval", 7); + spinBox->setValue(days); + + // ------------------------------------------------------------------------------ + + // automatic filters + KConfigGroup autoFiltersGroup(_adblockConfig, "FiltersList"); + + int i = 1; + QString n = QString::number(i); + + while (autoFiltersGroup.hasKey("FilterName-" + n)) + { + bool filterEnabled = autoFiltersGroup.readEntry("FilterEnabled-" + n, false); + QString filterName = autoFiltersGroup.readEntry("FilterName-" + n, QString()); + + QListWidgetItem *subItem = new QListWidgetItem(automaticFiltersListWidget); + subItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); + if (filterEnabled) + subItem->setCheckState(Qt::Checked); + else + subItem->setCheckState(Qt::Unchecked); + + subItem->setText(filterName); + + i++; + n = QString::number(i); + } + + // ------------------------------------------------------------------------------ - QString str = item->text(0) + "-rules"; - QStringList rules = localGroup.readEntry(str , QStringList()); + // local filters + QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - Q_FOREACH(const QString & rule, rules) + QFile ruleFile(localRulesFilePath); + if (!ruleFile.open(QFile::ReadOnly | QFile::Text)) { - QTreeWidgetItem *subItem = new QTreeWidgetItem(item); - subItem->setText(0, rule); + kDebug() << "Unable to open rule file" << localRulesFilePath; + return; + } + + QTextStream in(&ruleFile); + while (!in.atEnd()) + { + QString stringRule = in.readLine(); + QListWidgetItem *subItem = new QListWidgetItem(manualFiltersListWidget); + subItem->setText(stringRule); } } @@ -162,24 +182,45 @@ void AdBlockWidget::save() if (!_changed) return; - // local rules - KSharedConfig::Ptr config = KSharedConfig::openConfig("adblock", KConfig::SimpleConfig, "appdata"); - KConfigGroup localGroup(config , "rules"); + // General settings + KConfigGroup settingsGroup(_adblockConfig, "Settings"); + + settingsGroup.writeEntry("adBlockEnabled", checkEnableAdblock->isChecked()); + settingsGroup.writeEntry("hideAdsEnabled", checkHideAds->isChecked()); + settingsGroup.writeEntry("updateInterval", spinBox->value()); - QStringList localRules; + // automatic filters + KConfigGroup autoFiltersGroup(_adblockConfig, "FiltersList"); + for (int i = 0; i < automaticFiltersListWidget->count(); i++) + { + QListWidgetItem *subItem = automaticFiltersListWidget->item(i); + bool active = true; + if (subItem->checkState() == Qt::Unchecked) + active = false; + + QString n = QString::number(i + 1); + autoFiltersGroup.writeEntry("FilterEnabled-" + n, active); + } + + // local filters + QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QL1S("adblockrules_local")); - const int n = listWidget->count(); - for (int i = 0; i < n; ++i) + QFile ruleFile(localRulesFilePath); + if (!ruleFile.open(QFile::WriteOnly | QFile::Text)) { - QListWidgetItem *item = listWidget->item(i); - localRules << item->text(); + kDebug() << "Unable to open rule file" << localRulesFilePath; + return; } - localGroup.writeEntry("local-rules" , localRules); -// ReKonfig::setAdBlockEnabled(checkEnableAdblock->isChecked()); -// ReKonfig::setHideAdsEnabled(checkHideAds->isChecked()); -// ReKonfig::setUpdateInterval(spinBox->value()); + QTextStream out(&ruleFile); + for (int i = 0; i < manualFiltersListWidget->count(); i++) + { + QListWidgetItem *subItem = manualFiltersListWidget->item(i); + QString stringRule = subItem->text(); + out << stringRule << '\n'; + } + // ------------------------------------------------------------------------------- _changed = false; emit changed(false); } diff --git a/src/adblock/adblockwidget.h b/src/adblock/adblockwidget.h index 3c7c667b..0f9e4d7f 100644 --- a/src/adblock/adblockwidget.h +++ b/src/adblock/adblockwidget.h @@ -28,12 +28,18 @@ #define ADBLOCK_WIDGET_H +// Rekonq Includes +#include "rekonq_defines.h" + // Ui Includes #include "ui_settings_adblock.h" +// KDE Includes +#include <KSharedConfig> + // Qt Includes -#include <QtGui/QWidget> -#include <QtGui/QTreeWidgetItem> +#include <QWidget> +#include <QTreeWidgetItem> class AdBlockWidget : public QWidget, private Ui::adblock @@ -41,7 +47,7 @@ class AdBlockWidget : public QWidget, private Ui::adblock Q_OBJECT public: - AdBlockWidget(QWidget *parent = 0); + AdBlockWidget(KSharedConfig::Ptr config, QWidget *parent = 0); bool changed(); @@ -60,9 +66,9 @@ private Q_SLOTS: private: void load(); - void loadRules(QTreeWidgetItem *item); bool _changed; + KSharedConfig::Ptr _adblockConfig; }; #endif // ADBLOCK_WIDGET_H diff --git a/src/adblock/settings_adblock.ui b/src/adblock/settings_adblock.ui index 68fcf520..cf6c49d3 100644 --- a/src/adblock/settings_adblock.ui +++ b/src/adblock/settings_adblock.ui @@ -39,26 +39,14 @@ </attribute> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> - <widget class="QTreeWidget" name="treeWidget"> - <attribute name="headerVisible"> - <bool>false</bool> - </attribute> - <attribute name="headerVisible"> - <bool>false</bool> - </attribute> - <column> - <property name="text"> - <string notr="true">1</string> - </property> - </column> - </widget> + <widget class="QListWidget" name="automaticFiltersListWidget"/> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_3"> <item> <widget class="QLabel" name="label_3"> <property name="text"> - <string>Update automatic filters every:</string> + <string>Update enabled automatic filters every:</string> </property> </widget> </item> @@ -79,6 +67,13 @@ </widget> </item> <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>days</string> + </property> + </widget> + </item> + <item> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> @@ -115,7 +110,7 @@ </layout> </item> <item> - <widget class="KListWidget" name="listWidget"/> + <widget class="KListWidget" name="manualFiltersListWidget"/> </item> <item> <widget class="QLabel" name="hintLabel"> @@ -159,9 +154,14 @@ </widget> <customwidgets> <customwidget> - <class>KListWidget</class> - <extends>QListWidget</extends> - <header>klistwidget.h</header> + <class>KListWidgetSearchLine</class> + <extends>KLineEdit</extends> + <header>klistwidgetsearchline.h</header> + </customwidget> + <customwidget> + <class>KLineEdit</class> + <extends>QLineEdit</extends> + <header>klineedit.h</header> </customwidget> <customwidget> <class>KIntSpinBox</class> @@ -169,9 +169,9 @@ <header>knuminput.h</header> </customwidget> <customwidget> - <class>KLineEdit</class> - <extends>QLineEdit</extends> - <header>klineedit.h</header> + <class>KListWidget</class> + <extends>QListWidget</extends> + <header>klistwidget.h</header> </customwidget> <customwidget> <class>KTabWidget</class> @@ -179,11 +179,6 @@ <header>ktabwidget.h</header> <container>1</container> </customwidget> - <customwidget> - <class>KListWidgetSearchLine</class> - <extends>KLineEdit</extends> - <header>klistwidgetsearchline.h</header> - </customwidget> </customwidgets> <resources/> <connections/> |