summaryrefslogtreecommitdiffstats
path: root/src/types.h
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-02 17:52:17 +0200
committerDanilo M. <danix@danix.xyz>2026-08-04 12:52:33 +0200
commit9002b3bf4310f6a657d27a1f16f002c2d256e79d (patch)
tree843d0f8de1a3c7d641a76de592a7218d0072a798 /src/types.h
parentb09a44173e8671cbf25aff7db73b34f947ed49cf (diff)
downloadqtmaildir-9002b3bf4310f6a657d27a1f16f002c2d256e79d.tar.gz
qtmaildir-9002b3bf4310f6a657d27a1f16f002c2d256e79d.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.h51
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)