[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepim] messageviewer/adblock: improve++
From: Montel Laurent <montel () kde ! org>
Date: 2013-09-30 20:03:01
Message-ID: E1VQjgL-0004Pa-ES () scm ! kde ! org
[Download RAW message or body]
Git commit 6727dff434030f53f1579058a5424432cd1cee27 by Montel Laurent.
Committed on 30/09/2013 at 20:02.
Pushed by mlaurent into branch 'master'.
improve++
M +60 -7 messageviewer/adblock/adblockblockableitemswidget.cpp
M +1 -0 messageviewer/adblock/adblockblockableitemswidget.h
M +6 -1 messageviewer/adblock/adblocksettingwidget.cpp
http://commits.kde.org/kdepim/6727dff434030f53f1579058a5424432cd1cee27
diff --git a/messageviewer/adblock/adblockblockableitemswidget.cpp b/messageviewer/adblock/adblockblockableitemswidget.cpp
index 9b1123e..8a47ba7 100644
--- a/messageviewer/adblock/adblockblockableitemswidget.cpp
+++ b/messageviewer/adblock/adblockblockableitemswidget.cpp
@@ -17,17 +17,25 @@
#include "adblockblockableitemswidget.h"
#include "adblockcreatefilterdialog.h"
+#include "settings/globalsettings.h"
+#include "adblock/adblockmanager.h"
#include <KLocale>
#include <KTreeWidgetSearchLine>
#include <KMenu>
+#include <KConfigGroup>
+#include <KStandardDirs>
+#include <QHeaderView>
#include <QTreeWidget>
#include <QVBoxLayout>
#include <QWebFrame>
#include <QWebElement>
#include <QDebug>
#include <QPointer>
+#include <QClipboard>
+#include <QApplication>
+#include <QFile>
using namespace MessageViewer;
@@ -52,11 +60,16 @@ AdBlockBlockableItemsWidget::AdBlockBlockableItemsWidget(QWidget *parent)
lay->addWidget(searchLine);
lay->addWidget(mListItems);
- //TODO save/restore headers.
+
+ KConfigGroup config( MessageViewer::GlobalSettings::self()->config(),"AdBlockHeaders");
+ mListItems->header()->restoreState(config.readEntry("HeaderState",QByteArray()));
}
AdBlockBlockableItemsWidget::~AdBlockBlockableItemsWidget()
{
+ KConfigGroup groupHeader( MessageViewer::GlobalSettings::self()->config(),"AdBlockHeaders" );
+ groupHeader.writeEntry( "HeaderState", mListItems->header()->saveState());
+ groupHeader.sync();
}
void AdBlockBlockableItemsWidget::setWebFrame(QWebFrame *frame)
@@ -86,12 +99,17 @@ void AdBlockBlockableItemsWidget::searchBlockableElement(QWebFrame *frame)
void AdBlockBlockableItemsWidget::customContextMenuRequested(const QPoint &)
{
- if (!mListItems->currentItem())
+ QTreeWidgetItem *item = mListItems->currentItem();
+ if (!item)
return;
KMenu menu;
- menu.addAction(i18n("Copy"),this,SLOT(slotCopyItem()));
- menu.addAction(i18n("Block item"),this,SLOT(slotBlockItem()));
+ menu.addAction(i18n("Copy url"),this,SLOT(slotCopyItem()));
+ menu.addAction(i18n("Block item..."),this,SLOT(slotBlockItem()));
+ if (!item->text(FilterValue).isEmpty()) {
+ menu.addSeparator();
+ menu.addAction(i18n("Remove filter"),this,SLOT(slotRemoveFilter()));
+ }
menu.exec(QCursor::pos());
}
@@ -115,13 +133,48 @@ void AdBlockBlockableItemsWidget::slotCopyItem()
QTreeWidgetItem *item = mListItems->currentItem();
if (!item)
return;
-
- //TODO
+ QClipboard *cb = QApplication::clipboard();
+ cb->setText(item->text(Url), QClipboard::Clipboard);
}
void AdBlockBlockableItemsWidget::saveFilters()
{
- //TODO
+ const int numberOfElement(mListItems->topLevelItemCount());
+ QString filters;
+ for (int i = 0; i < numberOfElement; ++i) {
+ QTreeWidgetItem *item = mListItems->topLevelItem(i);
+ if (!item->text(FilterValue).isEmpty()) {
+ if (filters.isEmpty()) {
+ filters = item->text(FilterValue);
+ } else {
+ filters += QLatin1Char('\n') + item->text(FilterValue);
+ }
+ }
+ }
+
+ if (filters.isEmpty())
+ return;
+
+ const QString localRulesFilePath = KStandardDirs::locateLocal("appdata" , QLatin1String("adblockrules_local"));
+
+ QFile ruleFile(localRulesFilePath);
+ if (!ruleFile.open(QFile::WriteOnly | QFile::Text)) {
+ kDebug() << "Unable to open rule file" << localRulesFilePath;
+ return;
+ }
+
+ QTextStream out(&ruleFile);
+ out << filters;
+
+ AdBlockManager::self()->reloadConfig();
+}
+
+void AdBlockBlockableItemsWidget::slotRemoveFilter()
+{
+ QTreeWidgetItem *item = mListItems->currentItem();
+ if (!item)
+ return;
+ item->setText(FilterValue, QString());
}
#include "adblockblockableitemswidget.moc"
diff --git a/messageviewer/adblock/adblockblockableitemswidget.h b/messageviewer/adblock/adblockblockableitemswidget.h
index 4064c45..c30161b 100644
--- a/messageviewer/adblock/adblockblockableitemswidget.h
+++ b/messageviewer/adblock/adblockblockableitemswidget.h
@@ -38,6 +38,7 @@ private Q_SLOTS:
void slotCopyItem();
void slotBlockItem();
void customContextMenuRequested(const QPoint &);
+ void slotRemoveFilter();
private:
enum BlockType {
diff --git a/messageviewer/adblock/adblocksettingwidget.cpp b/messageviewer/adblock/adblocksettingwidget.cpp
index 751310d..8a77b0c 100644
--- a/messageviewer/adblock/adblocksettingwidget.cpp
+++ b/messageviewer/adblock/adblocksettingwidget.cpp
@@ -216,7 +216,7 @@ void AdBlockSettingWidget::save()
// automatic filters
KConfig config(QLatin1String("messagevieweradblockrc"));
- const QStringList list = config.groupList().filter( QRegExp( QLatin1String("MessageListTab\\d+") ) );
+ const QStringList list = config.groupList().filter( QRegExp( QLatin1String("FilterList \\d+") ) );
foreach ( const QString &group, list ) {
config.deleteGroup( group );
}
@@ -294,6 +294,7 @@ void AdBlockSettingWidget::slotAddFilter()
subItem->setData(UrlList, url);
subItem->setData(LastUpdateList, QDateTime());
subItem->setData(PathList, QString());
+ hasChanged();
}
delete dlg;
}
@@ -310,6 +311,7 @@ void AdBlockSettingWidget::slotRemoveSubscription()
}
delete item;
}
+ hasChanged();
}
}
@@ -328,6 +330,9 @@ void AdBlockSettingWidget::slotImportFilters()
{
const QString filter = i18n( "*|all files (*)" );
const QString result = PimCommon::Util::loadToFile(filter, this);
+ if (result.isEmpty()) {
+ return;
+ }
const QStringList listFilter = result.split(QLatin1Char('\n'));
QStringList excludeFilter;
const int numberOfElement(manualFiltersListWidget->count());
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic