aboutsummaryrefslogtreecommitdiffstats
path: root/src/notmuchworker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/notmuchworker.cpp')
-rw-r--r--src/notmuchworker.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/notmuchworker.cpp b/src/notmuchworker.cpp
index 2588f4e..d41b54b 100644
--- a/src/notmuchworker.cpp
+++ b/src/notmuchworker.cpp
@@ -41,6 +41,7 @@
#include "maildirname.h"
#include "mimeparser.h"
#include "nmraii.h"
+#include "searchterm.h"
namespace {
@@ -1082,6 +1083,27 @@ void NotmuchWorker::applyTagsToThreads(const QStringList &threadIds,
applyTags(TagChange{ messageIds, add, remove, description });
}
+void NotmuchWorker::applyTagsToQuery(const QString &query,
+ const QStringList &add,
+ const QStringList &remove,
+ const QString &description)
+{
+ if (!openReadOnly())
+ return;
+
+ QStringList messageIds;
+ if (!collectMessageIds(m_db, SearchTerm::changes(query, add, remove),
+ &messageIds)) {
+ emit errorOccurred(QStringLiteral("Cannot resolve the rule's query"));
+ return;
+ }
+
+ // Empty is not an error: the rule has nothing left to do. applyTags()
+ // returns at once on an empty list, and stays silent, as it must
+ // (CLAUDE.md, item 176).
+ applyTags(TagChange{ messageIds, add, remove, description });
+}
+
void NotmuchWorker::applyTags(const TagChange &change)
{
if (change.messageIds.isEmpty())