diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-02 17:52:17 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-02 17:52:17 +0200 |
| commit | cb3ab1a1f8bb0a982f4ce7e9e371ed316a77c84c (patch) | |
| tree | 37b58b4b859d2e47317c4b47c4c0dbe7b3da3be3 /src/types.h | |
| parent | 6d4fcb8fd597c39ba0b7f404e64f500b11b75e1c (diff) | |
| download | qtmaildir-cb3ab1a1f8bb0a982f4ce7e9e371ed316a77c84c.tar.gz qtmaildir-cb3ab1a1f8bb0a982f4ce7e9e371ed316a77c84c.zip | |
feat: add cross-thread value types and notmuch RAII wrappers
ThreadSummary, MessageRef, and TagChange are plain-value structs that
carry query results across the worker/UI thread boundary via queued
signals. NmHandle<T, Destroy> wraps libnotmuch's C handles (query,
threads, messages, thread, message, tags) so early returns in the
query paths can't leak.
Diffstat (limited to 'src/types.h')
| -rw-r--r-- | src/types.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/types.h b/src/types.h new file mode 100644 index 0000000..da71e19 --- /dev/null +++ b/src/types.h @@ -0,0 +1,51 @@ +#pragma once + +#include <QDateTime> +#include <QMetaType> +#include <QString> +#include <QStringList> + +struct ThreadSummary +{ + QString threadId; + QString subject; + QString authors; + QDateTime date; + int totalCount = 0; + int matchedCount = 0; + QStringList tags; + + bool isUnread() const { return tags.contains(QStringLiteral("unread")); } + bool isFlagged() const { return tags.contains(QStringLiteral("flagged")); } +}; + +struct MessageRef +{ + QString messageId; + QString filePath; + QStringList tags; + + /// True when the message itself matched the user's query, as opposed to + /// being pulled in only because a sibling in its thread matched. Drives + /// whether it renders expanded or as a stub. + bool matched = true; +}; + +/// One tag mutation, kept so it can be inverted for undo. +struct TagChange +{ + QStringList messageIds; + QStringList added; + QStringList removed; + QString description; ///< Shown in the undo action's text. + + TagChange inverted() const + { + return TagChange{ messageIds, removed, added, + QStringLiteral("Undo %1").arg(description) }; + } +}; + +Q_DECLARE_METATYPE(ThreadSummary) +Q_DECLARE_METATYPE(MessageRef) +Q_DECLARE_METATYPE(TagChange) |
