The logic of notmuch_threads_move_to_next iterator was on notmuch_threads_valid function. Now notmuch_threads_valid just check if the iterator is valid and is notmuch_threads_move_to_next wich actually update the iterator. --- lib/query.cc | 47 ++++++++++++++++++++++++----------------------- 1 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lib/query.cc b/lib/query.cc index 970c35a..44950c1 100644 --- a/lib/query.cc +++ b/lib/query.cc @@ -285,6 +285,7 @@ notmuch_threads_t * notmuch_query_search_threads (notmuch_query_t *query) { notmuch_threads_t *threads; + notmuch_message_t *message; threads = talloc (query, notmuch_threads_t); if (threads == NULL) @@ -296,7 +297,10 @@ notmuch_query_search_threads (notmuch_query_t *query) threads->messages = notmuch_query_search_messages (query); - threads->thread_id = NULL; + message = notmuch_messages_get (threads->messages); + threads->thread_id = notmuch_message_get_thread_id (message); + g_hash_table_insert (threads->threads, + xstrdup (threads->thread_id), NULL); talloc_set_destructor (threads, _notmuch_threads_destructor); @@ -312,10 +316,25 @@ notmuch_query_destroy (notmuch_query_t *query) notmuch_bool_t notmuch_threads_valid (notmuch_threads_t *threads) { - notmuch_message_t *message; + return (threads->thread_id != NULL); +} - if (threads->thread_id) - return TRUE; +notmuch_thread_t * +notmuch_threads_get (notmuch_threads_t *threads) +{ + if (! notmuch_threads_valid (threads)) + return NULL; + + return _notmuch_thread_create (threads->query, + threads->query->notmuch, + threads->thread_id, + threads->query->query_string); +} + +void +notmuch_threads_move_to_next (notmuch_threads_t *threads) +{ + notmuch_message_t *message; while (notmuch_messages_valid (threads->messages)) { @@ -330,33 +349,15 @@ notmuch_threads_valid (notmuch_threads_t *threads) g_hash_table_insert (threads->threads, xstrdup (threads->thread_id), NULL); notmuch_messages_move_to_next (threads->messages); - return TRUE; + return; } notmuch_messages_move_to_next (threads->messages); } threads->thread_id = NULL; - return FALSE; -} - -notmuch_thread_t * -notmuch_threads_get (notmuch_threads_t *threads) -{ - if (! notmuch_threads_valid (threads)) - return NULL; - - return _notmuch_thread_create (threads->query, - threads->query->notmuch, - threads->thread_id, - threads->query->query_string); } -void -notmuch_threads_move_to_next (notmuch_threads_t *threads) -{ - threads->thread_id = NULL; -} void notmuch_threads_destroy (notmuch_threads_t *threads) -- 1.7.0