Fixed #278.
This commit is contained in:
		
							parent
							
								
									9e31eda78a
								
							
						
					
					
						commit
						34fb273212
					
				
					 3 changed files with 61 additions and 7 deletions
				
			
		|  | @ -131,9 +131,19 @@ void MessagesForFiltersModel::testFilter(MessageFilter* filter, QJSEngine* engin | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Message* MessagesForFiltersModel::messageForRow(int row) { | 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 { | Message MessagesForFiltersModel::messageForRow(int row) const { | ||||||
|   return m_messages[row]; |   if (row >= 0 && row < m_messages.size()) { | ||||||
|  |     return m_messages[row]; | ||||||
|  |   } | ||||||
|  |   else { | ||||||
|  |     return Message(); | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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_btnRunOnMessages->setIcon(qApp->icons()->fromTheme(QSL("media-playback-start"))); | ||||||
|   m_ui.m_btnDetailedHelp->setIcon(qApp->icons()->fromTheme(QSL("help-contents"))); |   m_ui.m_btnDetailedHelp->setIcon(qApp->icons()->fromTheme(QSL("help-contents"))); | ||||||
|   m_ui.m_txtScript->setFont(QFontDatabase::systemFont(QFontDatabase::SystemFont::FixedFont)); |   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_ISREAD, QHeaderView::ResizeMode::ResizeToContents); | ||||||
|   m_ui.m_treeExistingMessages->header()->setSectionResizeMode(MFM_MODEL_ISIMPORTANT, 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, |   connect(m_ui.m_listFilters, &QListWidget::currentRowChanged, | ||||||
|           this, &FormMessageFiltersManager::loadFilter); |           this, &FormMessageFiltersManager::loadFilter); | ||||||
|   connect(m_ui.m_btnAddNew, &QPushButton::clicked, |   connect(m_ui.m_btnAddNew, &QPushButton::clicked, this, [this]() { | ||||||
|           this, &FormMessageFiltersManager::addNewFilter); |     addNewFilter(); | ||||||
|  |   }); | ||||||
|   connect(m_ui.m_btnRemoveSelected, &QPushButton::clicked, |   connect(m_ui.m_btnRemoveSelected, &QPushButton::clicked, | ||||||
|           this, &FormMessageFiltersManager::removeSelectedFilter); |           this, &FormMessageFiltersManager::removeSelectedFilter); | ||||||
|   connect(m_ui.m_txtTitle, &QLineEdit::textChanged, this, &FormMessageFiltersManager::saveSelectedFilter); |   connect(m_ui.m_txtTitle, &QLineEdit::textChanged, this, &FormMessageFiltersManager::saveSelectedFilter); | ||||||
|  | @ -78,6 +80,8 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q | ||||||
|           this, &FormMessageFiltersManager::displayMessagesOfFeed); |           this, &FormMessageFiltersManager::displayMessagesOfFeed); | ||||||
|   connect(m_ui.m_btnRunOnMessages, &QPushButton::clicked, |   connect(m_ui.m_btnRunOnMessages, &QPushButton::clicked, | ||||||
|           this, &FormMessageFiltersManager::processCheckedFeeds); |           this, &FormMessageFiltersManager::processCheckedFeeds); | ||||||
|  |   connect(m_ui.m_treeExistingMessages, &QTreeView::customContextMenuRequested, | ||||||
|  |           this, &FormMessageFiltersManager::showMessageContextMenu); | ||||||
| 
 | 
 | ||||||
|   initializeTestingMessage(); |   initializeTestingMessage(); | ||||||
|   loadFilters(); |   loadFilters(); | ||||||
|  | @ -104,6 +108,42 @@ ServiceRoot* FormMessageFiltersManager::selectedAccount() const { | ||||||
|   return dat.isNull() ? nullptr : dat.value<ServiceRoot*>(); |   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() { | void FormMessageFiltersManager::removeSelectedFilter() { | ||||||
|   auto* fltr = selectedFilter(); |   auto* fltr = selectedFilter(); | ||||||
| 
 | 
 | ||||||
|  | @ -123,11 +163,13 @@ void FormMessageFiltersManager::loadFilters() { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FormMessageFiltersManager::addNewFilter() { | void FormMessageFiltersManager::addNewFilter(const QString& filter_script) { | ||||||
|   try { |   try { | ||||||
|     auto* fltr = m_reader->addMessageFilter( |     auto* fltr = m_reader->addMessageFilter( | ||||||
|       tr("New message filter"), |       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); |     auto* it = new QListWidgetItem(fltr->name(), m_ui.m_listFilters); | ||||||
| 
 | 
 | ||||||
|     it->setData(Qt::ItemDataRole::UserRole, QVariant::fromValue<MessageFilter*>(fltr)); |     it->setData(Qt::ItemDataRole::UserRole, QVariant::fromValue<MessageFilter*>(fltr)); | ||||||
|  |  | ||||||
|  | @ -25,8 +25,10 @@ class FormMessageFiltersManager : public QDialog { | ||||||
|     ServiceRoot* selectedAccount() const; |     ServiceRoot* selectedAccount() const; | ||||||
| 
 | 
 | ||||||
|   private slots: |   private slots: | ||||||
|  |     void filterMessagesLikeThis(const Message& msg); | ||||||
|  |     void showMessageContextMenu(const QPoint& pos); | ||||||
|     void removeSelectedFilter(); |     void removeSelectedFilter(); | ||||||
|     void addNewFilter(); |     void addNewFilter(const QString& filter_script = QString()); | ||||||
|     void saveSelectedFilter(); |     void saveSelectedFilter(); | ||||||
|     void loadFilter(); |     void loadFilter(); | ||||||
|     void loadFilters(); |     void loadFilters(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue