Work on filters gui.
This commit is contained in:
parent
5d8fd25173
commit
e0415a8060
|
@ -1,3 +1,6 @@
|
|||
#include <QDateTime>
|
||||
#include <QJSEngine>
|
||||
|
||||
// For license of this file, see <project-root-folder>/LICENSE.md.
|
||||
|
||||
#include "gui/dialogs/formmessagefiltersmanager.h"
|
||||
|
@ -12,7 +15,7 @@
|
|||
|
||||
FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const QList<ServiceRoot*>& accounts, QWidget* parent)
|
||||
: 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);
|
||||
|
||||
GuiUtilities::applyDialogProperties(*this, qApp->icons()->fromTheme(QSL("view-list-details")));
|
||||
|
@ -30,6 +33,11 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q
|
|||
this, &FormMessageFiltersManager::loadFilter);
|
||||
connect(m_ui.m_btnAddNew, &QPushButton::clicked,
|
||||
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() {
|
||||
|
@ -37,11 +45,11 @@ FormMessageFiltersManager::~FormMessageFiltersManager() {
|
|||
}
|
||||
|
||||
MessageFilter* FormMessageFiltersManager::selectedFilter() const {
|
||||
if (m_ui.m_listFilters->selectedItems().isEmpty()) {
|
||||
if (m_ui.m_listFilters->currentItem() == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
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() {
|
||||
auto* filter = selectedFilter();
|
||||
auto* acc = selectedAccount();
|
||||
|
@ -68,7 +94,32 @@ void FormMessageFiltersManager::loadFilter() {
|
|||
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) {
|
||||
m_loadingFilter = true;
|
||||
|
||||
if (filter == nullptr) {
|
||||
m_ui.m_txtTitle->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_gbDetails->setEnabled(true);
|
||||
}
|
||||
|
||||
m_loadingFilter = false;
|
||||
}
|
||||
|
||||
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:
|
||||
void addNewFilter();
|
||||
void saveSelectedFilter();
|
||||
void loadFilter();
|
||||
void testFilter();
|
||||
|
||||
// Display filter title/contents.
|
||||
void showFilter(MessageFilter* filter);
|
||||
|
@ -33,12 +35,17 @@ class FormMessageFiltersManager : public QDialog {
|
|||
// Load feeds/categories of the account, place checkmarks where filter is used.
|
||||
void updateFeedAssignments(MessageFilter* filter, ServiceRoot* account);
|
||||
|
||||
private:
|
||||
void initializeTestingMessage();
|
||||
Message testingMessage() const;
|
||||
|
||||
private:
|
||||
Ui::FormMessageFiltersManager m_ui;
|
||||
AccountCheckModel* m_feedsModel;
|
||||
RootItem* m_rootItem;
|
||||
QList<ServiceRoot*> m_accounts;
|
||||
FeedReader* m_reader;
|
||||
bool m_loadingFilter;
|
||||
};
|
||||
|
||||
#endif // FORMMESSAGEFILTERSMANAGER_H
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>900</width>
|
||||
<height>625</height>
|
||||
<height>644</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -117,6 +117,12 @@
|
|||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -135,12 +141,6 @@
|
|||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<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">
|
||||
<string>Your JavaScript-based message filtering logic</string>
|
||||
</property>
|
||||
|
@ -155,14 +155,14 @@
|
|||
<item row="0" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<widget class="QCheckBox" name="m_cbSampleRead">
|
||||
<property name="text">
|
||||
<string>Read</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox_2">
|
||||
<widget class="QCheckBox" name="m_cbSampleImportant">
|
||||
<property name="text">
|
||||
<string>Important</string>
|
||||
</property>
|
||||
|
@ -189,12 +189,12 @@
|
|||
<string>Title</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEdit</cstring>
|
||||
<cstring>m_txtSampleTitle</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit"/>
|
||||
<widget class="QLineEdit" name="m_txtSampleTitle"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
|
@ -202,12 +202,12 @@
|
|||
<string>URL</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEdit_2</cstring>
|
||||
<cstring>m_txtSampleUrl</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_2"/>
|
||||
<widget class="QLineEdit" name="m_txtSampleUrl"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
|
@ -215,12 +215,12 @@
|
|||
<string>Author</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEdit_3</cstring>
|
||||
<cstring>m_txtSampleAuthor</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_3"/>
|
||||
<widget class="QLineEdit" name="m_txtSampleAuthor"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
|
@ -228,12 +228,12 @@
|
|||
<string>Created on</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lineEdit_4</cstring>
|
||||
<cstring>m_txtSampleCreatedOn</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="lineEdit_4"/>
|
||||
<widget class="QLineEdit" name="m_txtSampleCreatedOn"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
|
@ -241,12 +241,12 @@
|
|||
<string>Contents</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>plainTextEdit</cstring>
|
||||
<cstring>m_txtSampleContents</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QPlainTextEdit" name="plainTextEdit"/>
|
||||
<widget class="QPlainTextEdit" name="m_txtSampleContents"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
@ -258,7 +258,7 @@
|
|||
<item>
|
||||
<widget class="QPushButton" name="m_btnTest">
|
||||
<property name="text">
|
||||
<string>&Test</string>
|
||||
<string>&Test the script</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -338,13 +338,13 @@
|
|||
<tabstop>m_txtScript</tabstop>
|
||||
<tabstop>m_btnTest</tabstop>
|
||||
<tabstop>m_btnDetailedHelp</tabstop>
|
||||
<tabstop>checkBox</tabstop>
|
||||
<tabstop>checkBox_2</tabstop>
|
||||
<tabstop>lineEdit</tabstop>
|
||||
<tabstop>lineEdit_2</tabstop>
|
||||
<tabstop>lineEdit_3</tabstop>
|
||||
<tabstop>lineEdit_4</tabstop>
|
||||
<tabstop>plainTextEdit</tabstop>
|
||||
<tabstop>m_cbSampleRead</tabstop>
|
||||
<tabstop>m_cbSampleImportant</tabstop>
|
||||
<tabstop>m_txtSampleTitle</tabstop>
|
||||
<tabstop>m_txtSampleUrl</tabstop>
|
||||
<tabstop>m_txtSampleAuthor</tabstop>
|
||||
<tabstop>m_txtSampleCreatedOn</tabstop>
|
||||
<tabstop>m_txtSampleContents</tabstop>
|
||||
<tabstop>m_txtErrors</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
|
|
|
@ -159,9 +159,14 @@ MessageFilter* FeedReader::addMessageFilter(const QString& title, const QString&
|
|||
|
||||
// TODO: Save into database, then return.
|
||||
|
||||
m_messageFilters.append(fltr);
|
||||
return fltr;
|
||||
}
|
||||
|
||||
void FeedReader::updateMessageFilter(MessageFilter* filter) {
|
||||
// TODO: Filter's name or script is changed, save to database.
|
||||
}
|
||||
|
||||
void FeedReader::updateAllFeeds() {
|
||||
updateFeeds(m_feedsModel->rootItem()->getSubTreeFeeds());
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ class RSSGUARD_DLLSPEC FeedReader : public QObject {
|
|||
void loadSavedMessageFilters();
|
||||
QList<MessageFilter*> messageFilters() const;
|
||||
MessageFilter* addMessageFilter(const QString& title, const QString& script);
|
||||
void updateMessageFilter(MessageFilter* filter);
|
||||
|
||||
public slots:
|
||||
void updateAllFeeds();
|
||||
|
|
Loading…
Reference in New Issue