summaryrefslogtreecommitdiff
path: root/thread.cc
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-10-29 17:31:07 -0700
committerCarl Worth <cworth@cworth.org>2009-10-29 17:31:07 -0700
commitc771eaf362edb021888d114989d38d8fb2b4cfb3 (patch)
treeba5a02ac5a84560733b5e31d3b633b8d256bb382 /thread.cc
parent41c7ad2c91e56bfc0b2fefa0be303605d34f4042 (diff)
notmuch search: Add (relative) date to search output
The new function for formatting relative dates is nice enough that we need to start using it more places. Here's one of them.
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)
{