This commit is contained in:
Martin Rotter 2020-12-14 08:50:30 +01:00
parent 9e31eda78a
commit 34fb273212
3 changed files with 61 additions and 7 deletions

View File

@ -131,9 +131,19 @@ void MessagesForFiltersModel::testFilter(MessageFilter* filter, QJSEngine* engin
}
Message* MessagesForFiltersModel::messageForRow(int row) {
return &m_messages[row];
if (row >= 0 && row < m_messages.size()) {
return &m_messages[row];
}
else {
return nullptr;
}
}
Message MessagesForFiltersModel::messageForRow(int row) const {
return m_messages[row];
if (row >= 0 && row < m_messages.size()) {
return m_messages[row];
}
else {
return Message();
}
}

View File

@ -45,6 +45,7 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q
m_ui.m_btnRunOnMessages->setIcon(qApp->icons()->fromTheme(QSL("media-playback-start")));
m_ui.m_btnDetailedHelp->setIcon(qApp->icons()->fromTheme(QSL("help-contents")));
m_ui.m_txtScript->setFont(QFontDatabase::systemFont(QFontDatabase::SystemFont::FixedFont));
m_ui.m_treeExistingMessages->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu);
m_ui.m_treeExistingMessages->header()->setSectionResizeMode(MFM_MODEL_ISREAD, QHeaderView::ResizeMode::ResizeToContents);
m_ui.m_treeExistingMessages->header()->setSectionResizeMode(MFM_MODEL_ISIMPORTANT, QHeaderView::ResizeMode::ResizeToContents);
@ -59,8 +60,9 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q
});
connect(m_ui.m_listFilters, &QListWidget::currentRowChanged,
this, &FormMessageFiltersManager::loadFilter);
connect(m_ui.m_btnAddNew, &QPushButton::clicked,
this, &FormMessageFiltersManager::addNewFilter);
connect(m_ui.m_btnAddNew, &QPushButton::clicked, this, [this]() {
addNewFilter();
});
connect(m_ui.m_btnRemoveSelected, &QPushButton::clicked,
this, &FormMessageFiltersManager::removeSelectedFilter);
connect(m_ui.m_txtTitle, &QLineEdit::textChanged, this, &FormMessageFiltersManager::saveSelectedFilter);
@ -78,6 +80,8 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q
this, &FormMessageFiltersManager::displayMessagesOfFeed);
connect(m_ui.m_btnRunOnMessages, &QPushButton::clicked,
this, &FormMessageFiltersManager::processCheckedFeeds);
connect(m_ui.m_treeExistingMessages, &QTreeView::customContextMenuRequested,
this, &FormMessageFiltersManager::showMessageContextMenu);
initializeTestingMessage();
loadFilters();
@ -104,6 +108,42 @@ ServiceRoot* FormMessageFiltersManager::selectedAccount() const {
return dat.isNull() ? nullptr : dat.value<ServiceRoot*>();
}
void FormMessageFiltersManager::filterMessagesLikeThis(const Message& msg) {
QString filter_script = QSL("function filterMessage() {\n"
" // Adjust the condition to suit your needs.\n"
" var is_message_same =\n"
" msg.isRead == %1 &&\n"
" msg.isImportant == %2 &&\n"
" msg.title == '%3' &&\n"
" msg.url == '%4';\n"
"\n"
" if (is_message_same) {\n"
" return MessageObject.Accept;\n"
" }\n"
" else {\n"
" return MessageObject.Ignore;\n"
" }\n"
"}").arg(QString::number(int(msg.m_isRead)),
QString::number(int(msg.m_isImportant)),
msg.m_title,
msg.m_url);
addNewFilter(filter_script);
}
void FormMessageFiltersManager::showMessageContextMenu(const QPoint& pos) {
Message* msg = m_msgModel->messageForRow(m_ui.m_treeExistingMessages->indexAt(pos).row());
if (msg != nullptr) {
QMenu menu(tr("Context menu"), m_ui.m_treeExistingMessages);
menu.addAction(tr("Filter messages like this"), this, [=]() {
filterMessagesLikeThis(*msg);
});
menu.exec(m_ui.m_treeExistingMessages->mapToGlobal(pos));
}
}
void FormMessageFiltersManager::removeSelectedFilter() {
auto* fltr = selectedFilter();
@ -123,11 +163,13 @@ void FormMessageFiltersManager::loadFilters() {
}
}
void FormMessageFiltersManager::addNewFilter() {
void FormMessageFiltersManager::addNewFilter(const QString& filter_script) {
try {
auto* fltr = m_reader->addMessageFilter(
tr("New message filter"),
QSL("function filterMessage() { return MessageObject.Accept; }"));
filter_script.isEmpty()
? QSL("function filterMessage() { return MessageObject.Accept; }")
: filter_script);
auto* it = new QListWidgetItem(fltr->name(), m_ui.m_listFilters);
it->setData(Qt::ItemDataRole::UserRole, QVariant::fromValue<MessageFilter*>(fltr));

View File

@ -25,8 +25,10 @@ class FormMessageFiltersManager : public QDialog {
ServiceRoot* selectedAccount() const;
private slots:
void filterMessagesLikeThis(const Message& msg);
void showMessageContextMenu(const QPoint& pos);
void removeSelectedFilter();
void addNewFilter();
void addNewFilter(const QString& filter_script = QString());
void saveSelectedFilter();
void loadFilter();
void loadFilters();