Work on filters gui.
This commit is contained in:
parent
5d8fd25173
commit
e0415a8060
5 changed files with 121 additions and 30 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
#include <QDateTime>
|
||||||
|
#include <QJSEngine>
|
||||||
|
|
||||||
// For license of this file, see <project-root-folder>/LICENSE.md.
|
// For license of this file, see <project-root-folder>/LICENSE.md.
|
||||||
|
|
||||||
#include "gui/dialogs/formmessagefiltersmanager.h"
|
#include "gui/dialogs/formmessagefiltersmanager.h"
|
||||||
|
@ -12,7 +15,7 @@
|
||||||
|
|
||||||
FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const QList<ServiceRoot*>& accounts, QWidget* parent)
|
FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const QList<ServiceRoot*>& accounts, QWidget* parent)
|
||||||
: QDialog(parent), m_feedsModel(new AccountCheckModel(this)), m_rootItem(new RootItem()),
|
: QDialog(parent), m_feedsModel(new AccountCheckModel(this)), m_rootItem(new RootItem()),
|
||||||
m_accounts(accounts), m_reader(reader) {
|
m_accounts(accounts), m_reader(reader), m_loadingFilter(false) {
|
||||||
m_ui.setupUi(this);
|
m_ui.setupUi(this);
|
||||||
|
|
||||||
GuiUtilities::applyDialogProperties(*this, qApp->icons()->fromTheme(QSL("view-list-details")));
|
GuiUtilities::applyDialogProperties(*this, qApp->icons()->fromTheme(QSL("view-list-details")));
|
||||||
|
@ -30,6 +33,11 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q
|
||||||
this, &FormMessageFiltersManager::loadFilter);
|
this, &FormMessageFiltersManager::loadFilter);
|
||||||
connect(m_ui.m_btnAddNew, &QPushButton::clicked,
|
connect(m_ui.m_btnAddNew, &QPushButton::clicked,
|
||||||
this, &FormMessageFiltersManager::addNewFilter);
|
this, &FormMessageFiltersManager::addNewFilter);
|
||||||
|
connect(m_ui.m_txtTitle, &QLineEdit::textChanged, this, &FormMessageFiltersManager::saveSelectedFilter);
|
||||||
|
connect(m_ui.m_txtScript, &QPlainTextEdit::textChanged, this, &FormMessageFiltersManager::saveSelectedFilter);
|
||||||
|
connect(m_ui.m_btnTest, &QPushButton::clicked, this, &FormMessageFiltersManager::testFilter);
|
||||||
|
|
||||||
|
initializeTestingMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
FormMessageFiltersManager::~FormMessageFiltersManager() {
|
FormMessageFiltersManager::~FormMessageFiltersManager() {
|
||||||
|
@ -37,11 +45,11 @@ FormMessageFiltersManager::~FormMessageFiltersManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageFilter* FormMessageFiltersManager::selectedFilter() const {
|
MessageFilter* FormMessageFiltersManager::selectedFilter() const {
|
||||||
if (m_ui.m_listFilters->selectedItems().isEmpty()) {
|
if (m_ui.m_listFilters->currentItem() == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return m_ui.m_listFilters->selectedItems().at(0)->data(Qt::ItemDataRole::UserRole).value<MessageFilter*>();
|
return m_ui.m_listFilters->currentItem()->data(Qt::ItemDataRole::UserRole).value<MessageFilter*>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +68,24 @@ void FormMessageFiltersManager::addNewFilter() {
|
||||||
m_ui.m_listFilters->setCurrentRow(m_ui.m_listFilters->count() - 1);
|
m_ui.m_listFilters->setCurrentRow(m_ui.m_listFilters->count() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FormMessageFiltersManager::saveSelectedFilter() {
|
||||||
|
if (m_loadingFilter) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto* fltr = selectedFilter();
|
||||||
|
|
||||||
|
if (fltr == nullptr || m_ui.m_txtTitle->text().isEmpty() || m_ui.m_txtScript->toPlainText().isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fltr->setName(m_ui.m_txtTitle->text());
|
||||||
|
fltr->setScript(m_ui.m_txtScript->toPlainText());
|
||||||
|
m_ui.m_listFilters->currentItem()->setText(fltr->name());
|
||||||
|
|
||||||
|
m_reader->updateMessageFilter(fltr);
|
||||||
|
}
|
||||||
|
|
||||||
void FormMessageFiltersManager::loadFilter() {
|
void FormMessageFiltersManager::loadFilter() {
|
||||||
auto* filter = selectedFilter();
|
auto* filter = selectedFilter();
|
||||||
auto* acc = selectedAccount();
|
auto* acc = selectedAccount();
|
||||||
|
@ -68,7 +94,32 @@ void FormMessageFiltersManager::loadFilter() {
|
||||||
updateFeedAssignments(filter, acc);
|
updateFeedAssignments(filter, acc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FormMessageFiltersManager::testFilter() {
|
||||||
|
// Perform per-message filtering.
|
||||||
|
QJSEngine filter_engine;
|
||||||
|
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
||||||
|
|
||||||
|
// Create JavaScript communication wrapper for the message.
|
||||||
|
MessageObject msg_obj(&database, QString::number(NO_PARENT_CATEGORY), NO_PARENT_CATEGORY);
|
||||||
|
|
||||||
|
// Register the wrapper.
|
||||||
|
auto js_object = filter_engine.newQObject(&msg_obj);
|
||||||
|
|
||||||
|
filter_engine.installExtensions(QJSEngine::Extension::ConsoleExtension);
|
||||||
|
filter_engine.globalObject().setProperty("msg", js_object);
|
||||||
|
|
||||||
|
Message msg = testingMessage();
|
||||||
|
|
||||||
|
msg_obj.setMessage(&msg);
|
||||||
|
|
||||||
|
auto* fltr = selectedFilter();
|
||||||
|
FilteringAction decision = fltr->filterMessage(&filter_engine);
|
||||||
|
int aa = 5;
|
||||||
|
}
|
||||||
|
|
||||||
void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
||||||
|
m_loadingFilter = true;
|
||||||
|
|
||||||
if (filter == nullptr) {
|
if (filter == nullptr) {
|
||||||
m_ui.m_txtTitle->clear();
|
m_ui.m_txtTitle->clear();
|
||||||
m_ui.m_txtScript->clear();
|
m_ui.m_txtScript->clear();
|
||||||
|
@ -79,6 +130,33 @@ void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
||||||
m_ui.m_txtScript->setPlainText(filter->script());
|
m_ui.m_txtScript->setPlainText(filter->script());
|
||||||
m_ui.m_gbDetails->setEnabled(true);
|
m_ui.m_gbDetails->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_loadingFilter = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormMessageFiltersManager::updateFeedAssignments(MessageFilter* filter, ServiceRoot* account) {}
|
void FormMessageFiltersManager::updateFeedAssignments(MessageFilter* filter, ServiceRoot* account) {}
|
||||||
|
|
||||||
|
void FormMessageFiltersManager::initializeTestingMessage() {
|
||||||
|
m_ui.m_cbSampleImportant->setChecked(true);
|
||||||
|
m_ui.m_txtSampleUrl->setText(QSL("https://mynews.com/news/5"));
|
||||||
|
m_ui.m_txtSampleTitle->setText(QSL("Year of Linux Desktop"));
|
||||||
|
m_ui.m_txtSampleAuthor->setText(QSL("Napoleon Bonaparte"));
|
||||||
|
m_ui.m_txtSampleContents->setPlainText(QSL("<p>Browsers usually insert quotation marks around the q element.</p>"
|
||||||
|
"<p>WWF's goal is to: <q>Build a future where people live in harmony "
|
||||||
|
"with nature.</q></p>"));
|
||||||
|
m_ui.m_txtSampleCreatedOn->setText(QString::number(QDateTime::currentDateTimeUtc().toMSecsSinceEpoch()));
|
||||||
|
}
|
||||||
|
|
||||||
|
Message FormMessageFiltersManager::testingMessage() const {
|
||||||
|
Message msg;
|
||||||
|
|
||||||
|
msg.m_url = m_ui.m_txtSampleUrl->text();
|
||||||
|
msg.m_title = m_ui.m_txtSampleTitle->text();
|
||||||
|
msg.m_author = m_ui.m_txtSampleAuthor->text();
|
||||||
|
msg.m_isRead = m_ui.m_cbSampleRead->isChecked();
|
||||||
|
msg.m_isImportant = m_ui.m_cbSampleImportant->isChecked();
|
||||||
|
msg.m_created = QDateTime::fromMSecsSinceEpoch(m_ui.m_txtSampleCreatedOn->text().toLongLong());
|
||||||
|
msg.m_contents = m_ui.m_txtSampleContents->toPlainText();
|
||||||
|
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
|
@ -25,7 +25,9 @@ class FormMessageFiltersManager : public QDialog {
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void addNewFilter();
|
void addNewFilter();
|
||||||
|
void saveSelectedFilter();
|
||||||
void loadFilter();
|
void loadFilter();
|
||||||
|
void testFilter();
|
||||||
|
|
||||||
// Display filter title/contents.
|
// Display filter title/contents.
|
||||||
void showFilter(MessageFilter* filter);
|
void showFilter(MessageFilter* filter);
|
||||||
|
@ -33,12 +35,17 @@ class FormMessageFiltersManager : public QDialog {
|
||||||
// Load feeds/categories of the account, place checkmarks where filter is used.
|
// Load feeds/categories of the account, place checkmarks where filter is used.
|
||||||
void updateFeedAssignments(MessageFilter* filter, ServiceRoot* account);
|
void updateFeedAssignments(MessageFilter* filter, ServiceRoot* account);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void initializeTestingMessage();
|
||||||
|
Message testingMessage() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::FormMessageFiltersManager m_ui;
|
Ui::FormMessageFiltersManager m_ui;
|
||||||
AccountCheckModel* m_feedsModel;
|
AccountCheckModel* m_feedsModel;
|
||||||
RootItem* m_rootItem;
|
RootItem* m_rootItem;
|
||||||
QList<ServiceRoot*> m_accounts;
|
QList<ServiceRoot*> m_accounts;
|
||||||
FeedReader* m_reader;
|
FeedReader* m_reader;
|
||||||
|
bool m_loadingFilter;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FORMMESSAGEFILTERSMANAGER_H
|
#endif // FORMMESSAGEFILTERSMANAGER_H
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>900</width>
|
<width>900</width>
|
||||||
<height>625</height>
|
<height>644</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -117,6 +117,12 @@
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -135,12 +141,6 @@
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPlainTextEdit" name="m_txtScript">
|
<widget class="QPlainTextEdit" name="m_txtScript">
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>1</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="placeholderText">
|
<property name="placeholderText">
|
||||||
<string>Your JavaScript-based message filtering logic</string>
|
<string>Your JavaScript-based message filtering logic</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -155,14 +155,14 @@
|
||||||
<item row="0" column="0" colspan="2">
|
<item row="0" column="0" colspan="2">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="checkBox">
|
<widget class="QCheckBox" name="m_cbSampleRead">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Read</string>
|
<string>Read</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="checkBox_2">
|
<widget class="QCheckBox" name="m_cbSampleImportant">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Important</string>
|
<string>Important</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -189,12 +189,12 @@
|
||||||
<string>Title</string>
|
<string>Title</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>lineEdit</cstring>
|
<cstring>m_txtSampleTitle</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QLineEdit" name="lineEdit"/>
|
<widget class="QLineEdit" name="m_txtSampleTitle"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_6">
|
<widget class="QLabel" name="label_6">
|
||||||
|
@ -202,12 +202,12 @@
|
||||||
<string>URL</string>
|
<string>URL</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>lineEdit_2</cstring>
|
<cstring>m_txtSampleUrl</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QLineEdit" name="lineEdit_2"/>
|
<widget class="QLineEdit" name="m_txtSampleUrl"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_7">
|
<widget class="QLabel" name="label_7">
|
||||||
|
@ -215,12 +215,12 @@
|
||||||
<string>Author</string>
|
<string>Author</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>lineEdit_3</cstring>
|
<cstring>m_txtSampleAuthor</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QLineEdit" name="lineEdit_3"/>
|
<widget class="QLineEdit" name="m_txtSampleAuthor"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_8">
|
<widget class="QLabel" name="label_8">
|
||||||
|
@ -228,12 +228,12 @@
|
||||||
<string>Created on</string>
|
<string>Created on</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>lineEdit_4</cstring>
|
<cstring>m_txtSampleCreatedOn</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="4" column="1">
|
||||||
<widget class="QLineEdit" name="lineEdit_4"/>
|
<widget class="QLineEdit" name="m_txtSampleCreatedOn"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="label_5">
|
<widget class="QLabel" name="label_5">
|
||||||
|
@ -241,12 +241,12 @@
|
||||||
<string>Contents</string>
|
<string>Contents</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>plainTextEdit</cstring>
|
<cstring>m_txtSampleContents</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1">
|
<item row="5" column="1">
|
||||||
<widget class="QPlainTextEdit" name="plainTextEdit"/>
|
<widget class="QPlainTextEdit" name="m_txtSampleContents"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -258,7 +258,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="m_btnTest">
|
<widget class="QPushButton" name="m_btnTest">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Test</string>
|
<string>&Test the script</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -338,13 +338,13 @@
|
||||||
<tabstop>m_txtScript</tabstop>
|
<tabstop>m_txtScript</tabstop>
|
||||||
<tabstop>m_btnTest</tabstop>
|
<tabstop>m_btnTest</tabstop>
|
||||||
<tabstop>m_btnDetailedHelp</tabstop>
|
<tabstop>m_btnDetailedHelp</tabstop>
|
||||||
<tabstop>checkBox</tabstop>
|
<tabstop>m_cbSampleRead</tabstop>
|
||||||
<tabstop>checkBox_2</tabstop>
|
<tabstop>m_cbSampleImportant</tabstop>
|
||||||
<tabstop>lineEdit</tabstop>
|
<tabstop>m_txtSampleTitle</tabstop>
|
||||||
<tabstop>lineEdit_2</tabstop>
|
<tabstop>m_txtSampleUrl</tabstop>
|
||||||
<tabstop>lineEdit_3</tabstop>
|
<tabstop>m_txtSampleAuthor</tabstop>
|
||||||
<tabstop>lineEdit_4</tabstop>
|
<tabstop>m_txtSampleCreatedOn</tabstop>
|
||||||
<tabstop>plainTextEdit</tabstop>
|
<tabstop>m_txtSampleContents</tabstop>
|
||||||
<tabstop>m_txtErrors</tabstop>
|
<tabstop>m_txtErrors</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
@ -159,9 +159,14 @@ MessageFilter* FeedReader::addMessageFilter(const QString& title, const QString&
|
||||||
|
|
||||||
// TODO: Save into database, then return.
|
// TODO: Save into database, then return.
|
||||||
|
|
||||||
|
m_messageFilters.append(fltr);
|
||||||
return fltr;
|
return fltr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FeedReader::updateMessageFilter(MessageFilter* filter) {
|
||||||
|
// TODO: Filter's name or script is changed, save to database.
|
||||||
|
}
|
||||||
|
|
||||||
void FeedReader::updateAllFeeds() {
|
void FeedReader::updateAllFeeds() {
|
||||||
updateFeeds(m_feedsModel->rootItem()->getSubTreeFeeds());
|
updateFeeds(m_feedsModel->rootItem()->getSubTreeFeeds());
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ class RSSGUARD_DLLSPEC FeedReader : public QObject {
|
||||||
void loadSavedMessageFilters();
|
void loadSavedMessageFilters();
|
||||||
QList<MessageFilter*> messageFilters() const;
|
QList<MessageFilter*> messageFilters() const;
|
||||||
MessageFilter* addMessageFilter(const QString& title, const QString& script);
|
MessageFilter* addMessageFilter(const QString& title, const QString& script);
|
||||||
|
void updateMessageFilter(MessageFilter* filter);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateAllFeeds();
|
void updateAllFeeds();
|
||||||
|
|
Loading…
Add table
Reference in a new issue