X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=thread.cc;h=e4c9e111a7c4af21901a6cadbf0df4543ce86697;hp=891572990ad8ec9b7af2783d9571528592978487;hb=fbf55bfe2fdcdf3773ba37a9921875530e94c7b3;hpb=1ba3d46fab12d616b2085f5794543444cc4bc750 diff --git a/thread.cc b/thread.cc index 89157299..e4c9e111 100644 --- a/thread.cc +++ b/thread.cc @@ -23,11 +23,23 @@ #include +#include /* GHashTable */ + struct _notmuch_thread { notmuch_database_t *notmuch; char *thread_id; + char *subject; + GHashTable *tags; }; +static int +_notmuch_thread_destructor (notmuch_thread_t *thread) +{ + g_hash_table_unref (thread->tags); + + return 0; +} + /* Create a new notmuch_thread_t object for an existing document in * the database. * @@ -54,8 +66,13 @@ _notmuch_thread_create (const void *talloc_owner, if (unlikely (thread == NULL)) return NULL; + talloc_set_destructor (thread, _notmuch_thread_destructor); + thread->notmuch = notmuch; thread->thread_id = talloc_strdup (thread, thread_id); + thread->subject = NULL; + thread->tags = g_hash_table_new_full (g_str_hash, g_str_equal, + free, NULL); return thread; } @@ -66,6 +83,46 @@ notmuch_thread_get_thread_id (notmuch_thread_t *thread) return thread->thread_id; } +void +_notmuch_thread_add_tag (notmuch_thread_t *thread, const char *tag) +{ + g_hash_table_insert (thread->tags, xstrdup (tag), NULL); +} + +void +_notmuch_thread_set_subject (notmuch_thread_t *thread, const char *subject) +{ + thread->subject = talloc_strdup (thread, subject); +} + +const char * +notmuch_thread_get_subject (notmuch_thread_t *thread) +{ + return thread->subject; +} + +notmuch_tags_t * +notmuch_thread_get_tags (notmuch_thread_t *thread) +{ + notmuch_tags_t *tags; + GList *keys, *l; + + tags = _notmuch_tags_create (thread); + if (unlikely (tags == NULL)) + return NULL; + + keys = g_hash_table_get_keys (thread->tags); + + for (l = keys; l; l = l->next) + _notmuch_tags_add_tag (tags, (char *) l->data); + + g_list_free (keys); + + _notmuch_tags_prepare_iterator (tags); + + return tags; +} + void notmuch_thread_destroy (notmuch_thread_t *thread) {