From 8e65d8f5eba78acc9558e26f9b728521f323b1a6 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 3 Aug 2026 20:49:25 +0200 Subject: feat(worker): list every tag in the database Query bar completion cannot offer tag names without a way to enumerate them, and libnotmuch had no call wired up for it. Follows the existing generation-counter pattern; the result crosses the thread boundary as a QStringList. Co-Authored-By: Claude Opus 5 --- src/notmuchworker.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/notmuchworker.cpp') diff --git a/src/notmuchworker.cpp b/src/notmuchworker.cpp index ed97e39..a5096d2 100644 --- a/src/notmuchworker.cpp +++ b/src/notmuchworker.cpp @@ -332,3 +332,24 @@ void NotmuchWorker::applyTags(const TagChange &change) emit tagsApplied(change); } + +void NotmuchWorker::requestAllTags(quint64 generation) +{ + if (!openReadOnly()) + return; + + NmTags tags(notmuch_database_get_all_tags(m_db)); + if (!tags) { + emit errorOccurred(QStringLiteral("Cannot list tags")); + return; + } + + QStringList result; + for (; notmuch_tags_valid(tags.get()); notmuch_tags_move_to_next(tags.get())) + result.append(QString::fromUtf8(notmuch_tags_get(tags.get()))); + + // Sorted once here so no consumer has to sort again. notmuch returns tags + // in Xapian term order, which is byte order, not the user's locale order. + result.sort(); + emit allTagsReady(result, generation); +} -- cgit v1.2.3