diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/notmuchworker.cpp | 21 | ||||
| -rw-r--r-- | src/notmuchworker.h | 6 |
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: |
