X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fquery.cc;h=b6c0f12d9cd87f73993be6ef6c822319df888995;hp=6f02b04b95dc81def0c240a055b95ea7917153b8;hb=00c60fbcb3b2b7c9f90c36e4dfb9393fdf678735;hpb=ed20210b6db0b237d48765351cb99b87be7a0509 diff --git a/lib/query.cc b/lib/query.cc index 6f02b04b..b6c0f12d 100644 --- a/lib/query.cc +++ b/lib/query.cc @@ -457,3 +457,47 @@ notmuch_query_count_messages (notmuch_query_t *query) return count; } + +unsigned +notmuch_query_count_threads (notmuch_query_t *query) +{ + notmuch_messages_t *messages; + GHashTable *hash; + unsigned int count; + notmuch_sort_t sort; + + sort = query->sort; + query->sort = NOTMUCH_SORT_UNSORTED; + messages = notmuch_query_search_messages (query); + query->sort = sort; + if (messages == NULL) + return 0; + + hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL); + if (hash == NULL) { + talloc_free (messages); + return 0; + } + + while (notmuch_messages_valid (messages)) { + notmuch_message_t *message = notmuch_messages_get (messages); + const char *thread_id = notmuch_message_get_thread_id (message); + char *thread_id_copy = talloc_strdup (messages, thread_id); + if (unlikely (thread_id_copy == NULL)) { + notmuch_message_destroy (message); + count = 0; + goto DONE; + } + g_hash_table_insert (hash, thread_id_copy, NULL); + notmuch_message_destroy (message); + notmuch_messages_move_to_next (messages); + } + + count = g_hash_table_size (hash); + + DONE: + g_hash_table_unref (hash); + talloc_free (messages); + + return count; +}