summaryrefslogtreecommitdiff
path: root/thread.cc
diff options
context:
space:
mode:
Diffstat (limited to 'thread.cc')
-rw-r--r--thread.cc55
1 files changed, 48 insertions, 7 deletions
diff --git a/thread.cc b/thread.cc
index e4c9e11..b67dfad 100644
--- a/thread.cc
+++ b/thread.cc
@@ -30,6 +30,10 @@ struct _notmuch_thread {
char *thread_id;
char *subject;
GHashTable *tags;
+
+ notmuch_bool_t has_message;
+ time_t oldest;
+ time_t newest;
};
static int
@@ -74,6 +78,10 @@ _notmuch_thread_create (const void *talloc_owner,
thread->tags = g_hash_table_new_full (g_str_hash, g_str_equal,
free, NULL);
+ thread->has_message = 0;
+ thread->oldest = 0;
+ thread->newest = 0;
+
return thread;
}
@@ -84,15 +92,36 @@ notmuch_thread_get_thread_id (notmuch_thread_t *thread)
}
void
-_notmuch_thread_add_tag (notmuch_thread_t *thread, const char *tag)
+_notmuch_thread_add_message (notmuch_thread_t *thread,
+ notmuch_message_t *message)
{
- g_hash_table_insert (thread->tags, xstrdup (tag), NULL);
-}
+ notmuch_tags_t *tags;
+ const char *tag;
+ time_t date;
-void
-_notmuch_thread_set_subject (notmuch_thread_t *thread, const char *subject)
-{
- thread->subject = talloc_strdup (thread, subject);
+ if (! thread->subject) {
+ const char *subject;
+ subject = notmuch_message_get_header (message, "subject");
+ thread->subject = talloc_strdup (thread, subject);
+ }
+
+ for (tags = notmuch_message_get_tags (message);
+ notmuch_tags_has_more (tags);
+ notmuch_tags_advance (tags))
+ {
+ tag = notmuch_tags_get (tags);
+ g_hash_table_insert (thread->tags, xstrdup (tag), NULL);
+ }
+
+ date = notmuch_message_get_date (message);
+
+ if (date < thread->oldest || ! thread->has_message)
+ thread->oldest = date;
+
+ if (date > thread->newest || ! thread->has_message)
+ thread->newest = date;
+
+ thread->has_message = 1;
}
const char *
@@ -101,6 +130,18 @@ notmuch_thread_get_subject (notmuch_thread_t *thread)
return thread->subject;
}
+time_t
+notmuch_thread_get_oldest_date (notmuch_thread_t *thread)
+{
+ return thread->oldest;
+}
+
+time_t
+notmuch_thread_get_newest_date (notmuch_thread_t *thread)
+{
+ return thread->newest;
+}
+
notmuch_tags_t *
notmuch_thread_get_tags (notmuch_thread_t *thread)
{