aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/notmuchworker.cpp21
-rw-r--r--src/notmuchworker.h6
2 files changed, 27 insertions, 0 deletions
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);
+}
diff --git a/src/notmuchworker.h b/src/notmuchworker.h
index e0c80c6..88187ec 100644
--- a/src/notmuchworker.h
+++ b/src/notmuchworker.h
@@ -69,11 +69,17 @@ public slots:
const QStringList &remove,
const QString &description);
+ /// Every tag in the database, sorted. Feeds query bar completion, which
+ /// cannot offer tag names it has no way to enumerate. Called at startup,
+ /// after a sync, and after a tag mutation introduces an unknown tag.
+ void requestAllTags(quint64 generation);
+
signals:
void threadsReady(const QVector<ThreadSummary> &threads, quint64 generation);
void queryFinished(int totalThreads, quint64 generation);
void threadLoaded(const QVector<MessageRef> &messages, quint64 generation);
void tagsApplied(const TagChange &change);
+ void allTagsReady(const QStringList &tags, quint64 generation);
void errorOccurred(const QString &message);
private: