X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.h;h=522bf1b97eeafa833dc316bf7fd6c5a41b7ec89a;hp=d383e7d8af1bf6b6aca4ec8b6809ab0a7f7c0614;hb=1ba3d46f;hpb=cd467cafb5eee180661ebc14e0fb71426e67c855 diff --git a/notmuch.h b/notmuch.h index d383e7d8..522bf1b9 100644 --- a/notmuch.h +++ b/notmuch.h @@ -102,6 +102,8 @@ notmuch_status_to_string (notmuch_status_t status); * notmuch_ functions below. */ typedef struct _notmuch_database notmuch_database_t; typedef struct _notmuch_query notmuch_query_t; +typedef struct _notmuch_thread_results notmuch_thread_results_t; +typedef struct _notmuch_thread notmuch_thread_t; typedef struct _notmuch_message_results notmuch_message_results_t; typedef struct _notmuch_message notmuch_message_t; typedef struct _notmuch_tags notmuch_tags_t; @@ -313,6 +315,45 @@ typedef enum { void notmuch_query_set_sort (notmuch_query_t *query, notmuch_sort_t sort); +/* Execute a query for threads, returning a notmuch_thread_results_t + * object which can be used to iterate over the results. The results + * object is owned by the query and as such, will only be valid until + * notmuch_query_destroy. + * + * Typical usage might be: + * + * notmuch_query_t *query; + * notmuch_thread_results_t *results; + * notmuch_thread_t *thread; + * + * query = notmuch_query_create (database, query_string); + * + * for (results = notmuch_query_search_threads (query); + * notmuch_thread_results_has_more (results); + * notmuch_thread_results_advance (results)) + * { + * thread = notmuch_thread_results_get (results); + * .... + * notmuch_thread_destroy (thread); + * } + * + * notmuch_query_destroy (query); + * + * Note: If you are finished with a thread before its containing + * query, you can call notmuch_thread_destroy to clean up some memory + * sooner (as in the above example). Otherwise, if your thread objects + * are long-lived, then you don't need to call notmuch_thread_destroy + * and all the memory will still be reclaimed when the query is + * destroyed. + * + * Note that there's no explicit destructor needed for the + * notmuch_thread_results_t object. (For consistency, we do provide a + * notmuch_thread_results_destroy function, but there's no good reason + * to call it if the query is about to be destroyed). + */ +notmuch_thread_results_t * +notmuch_query_search_threads (notmuch_query_t *query); + /* Execute a query for messages, returning a notmuch_message_results_t * object which can be used to iterate over the results. The results * object is owned by the query and as such, will only be valid until @@ -354,13 +395,73 @@ notmuch_query_search_messages (notmuch_query_t *query); /* Destroy a notmuch_query_t along with any associated resources. * - * This will in turn destroy any notmuch_results_t objects generated - * by this query, (and in turn any notmuch_message_t objects generated - * from those results, etc.). + * This will in turn destroy any notmuch_thread_results_t and + * notmuch_message_results_t objects generated by this query, (and in + * turn any notmuch_thrad_t and notmuch_message_t objects generated + * from those results, etc.), if such objects haven't already been + * destroyed. */ void notmuch_query_destroy (notmuch_query_t *query); +/* Does the given notmuch_thread_results_t object contain any more + * results. + * + * When this function returns TRUE, notmuch_thread_results_get will + * return a valid object. Whereas when this function returns FALSE, + * notmuch_thread_results_get will return NULL. + * + * See the documentation of notmuch_query_search_threads for example + * code showing how to iterate over a notmuch_thread_results_t object. + */ +notmuch_bool_t +notmuch_thread_results_has_more (notmuch_thread_results_t *results); + +/* Get the current result from 'results' as a notmuch_thread_t. + * + * Note: The returned thread belongs to 'results' and has a lifetime + * identical to it (and the query to which it belongs). + * + * See the documentation of notmuch_query_search_threads for example + * code showing how to iterate over a notmuch_thread_results_t object. + * + * If an out-of-memory situation occurs, this function will return + * NULL. + */ +notmuch_thread_t * +notmuch_thread_results_get (notmuch_thread_results_t *results); + +/* Advance the 'results' iterator to the next result. + * + * See the documentation of notmuch_query_search_threads for example + * code showing how to iterate over a notmuch_thread_results_t object. + */ +void +notmuch_thread_results_advance (notmuch_thread_results_t *results); + +/* Destroy a notmuch_thread_results_t object. + * + * It's not strictly necessary to call this function. All memory from + * the notmuch_thread_results_t object will be reclaimed when the + * containg query object is destroyed. + */ +void +notmuch_thread_results_destroy (notmuch_thread_results_t *results); + +/* Get the thread ID of 'thread'. + * + * The returned string belongs to 'thread' and as such, should not be + * modified by the caller and will only be valid for as long as the + * thread is valid, (which is until notmuch_thread_destroy or until + * the query from which it derived is destroyed). + */ +const char * +notmuch_thread_get_thread_id (notmuch_thread_t *thread); + +/* Destroy a notmuch_thread_t object. */ +void +notmuch_thread_destroy (notmuch_thread_t *thread); + /* Does the given notmuch_message_results_t object contain any more * results. *