X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.h;h=d383e7d8af1bf6b6aca4ec8b6809ab0a7f7c0614;hp=77ed0328da6d4c8bcd6339b7e387a6b765bf9d7f;hb=cd467caf;hpb=b3cbcea8fdfdc71c5021fac483943a45ace816d3 diff --git a/notmuch.h b/notmuch.h index 77ed0328..d383e7d8 100644 --- a/notmuch.h +++ b/notmuch.h @@ -51,6 +51,8 @@ typedef int notmuch_bool_t; * * NOTMUCH_STATUS_SUCCESS: No error occurred. * + * NOTMUCH_STATUS_OUT_OF_MEMORY: Out of memory + * * XXX: We don't really want to expose this lame XAPIAN_EXCEPTION * value. Instead we should map to things like DATABASE_LOCKED or * whatever. @@ -78,6 +80,7 @@ typedef int notmuch_bool_t; */ typedef enum _notmuch_status { NOTMUCH_STATUS_SUCCESS = 0, + NOTMUCH_STATUS_OUT_OF_MEMORY, NOTMUCH_STATUS_XAPIAN_EXCEPTION, NOTMUCH_STATUS_FILE_ERROR, NOTMUCH_STATUS_FILE_NOT_EMAIL, @@ -99,10 +102,22 @@ 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_results notmuch_results_t; +typedef struct _notmuch_message_results notmuch_message_results_t; typedef struct _notmuch_message notmuch_message_t; typedef struct _notmuch_tags notmuch_tags_t; -typedef struct _notmuch_thread_ids notmuch_thread_ids_t; + +/* Lookup the default database path. + * + * This is the path that will be used by notmuch_database_create and + * notmuch_database_open if given a NULL path. Specifically it will be + * the value of the NOTMUCH_BASE environment variable if set, + * otherwise ${HOME}/mail + * + * Returns a newly allocated string which the caller should free() + * when finished with it. + */ +char * +notmuch_database_default_path (void); /* Create a new, empty notmuch database located at 'path'. * @@ -131,6 +146,9 @@ typedef struct _notmuch_thread_ids notmuch_thread_ids_t; notmuch_database_t * notmuch_database_create (const char *path); +/* XXX: I think I'd like this to take an extra argument of + * notmuch_status_t* for returning a status value on failure. */ + /* Open a an existing notmuch database located at 'path'. * * The database should have been created at some time in the past, @@ -159,19 +177,6 @@ notmuch_database_open (const char *path); void notmuch_database_close (notmuch_database_t *database); -/* Lookup the default database path. - * - * This is the path that will be used by notmuch_database_create and - * notmuch_database_open if given a NULL path. Specifically it will be - * the value of the NOTMUCH_BASE environment variable if set, - * otherwise ${HOME}/mail - * - * Returns a newly allocated string which the caller should free() - * when finished with it. - */ -char * -notmuch_database_default_path (void); - /* Return the database path of the given database. * * The return value is a string owned by notmuch so should not be @@ -264,8 +269,8 @@ notmuch_database_add_message (notmuch_database_t *database, * a new notmuch_message_t object is returned. The caller should call * notmuch_message_destroy when done with the message. * - * If no message is found with the given message_id, this function - * returns NULL. + * If no message is found with the given message_id or if an + * out-of-memory situation occurs, this function returns NULL. */ notmuch_message_t * notmuch_database_find_message (notmuch_database_t *database, @@ -308,22 +313,24 @@ typedef enum { void notmuch_query_set_sort (notmuch_query_t *query, notmuch_sort_t sort); -/* Execute a query, returning a notmuch_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. +/* 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 + * notmuch_query_destroy. * * Typical usage might be: * * notmuch_query_t *query; - * notmuch_results_t *results; + * notmuch_message_results_t *results; + * notmuch_message_t *message; * * query = notmuch_query_create (database, query_string); * - * for (results = notmuch_query_search (query); - * notmuch_results_has_more (results); - * notmuch_result_advance (results)) + * for (results = notmuch_query_search_messages (query); + * notmuch_message_results_has_more (results); + * notmuch_message_results_advance (results)) * { - * message = notmuch_results_get (results); + * message = notmuch_message_results_get (results); * .... * notmuch_message_destroy (message); * } @@ -338,12 +345,12 @@ notmuch_query_set_sort (notmuch_query_t *query, notmuch_sort_t sort); * when the query is destroyed. * * Note that there's no explicit destructor needed for the - * notmuch_results_t object. (For consistency, we do provide a - * notmuch_results_destroy function, but there's no good reason to - * call it if the query is about to be destroyed). + * notmuch_message_results_t object. (For consistency, we do provide a + * notmuch_message_results_destroy function, but there's no good + * reason to call it if the query is about to be destroyed). */ -notmuch_results_t * -notmuch_query_search (notmuch_query_t *query); +notmuch_message_results_t * +notmuch_query_search_messages (notmuch_query_t *query); /* Destroy a notmuch_query_t along with any associated resources. * @@ -354,45 +361,52 @@ notmuch_query_search (notmuch_query_t *query); void notmuch_query_destroy (notmuch_query_t *query); -/* Does the given notmuch_results_t object contain any more results. +/* Does the given notmuch_message_results_t object contain any more + * results. * - * When this function returns TRUE, notmuch_results_get will return a - * valid object. Whereas when this function returns FALSE, - * notmuch_results_get will return NULL. + * When this function returns TRUE, notmuch_message_results_get will + * return a valid object. Whereas when this function returns FALSE, + * notmuch_message_results_get will return NULL. * - * See the documentation of notmuch_query_search for example code - * showing how to iterate over a notmuch_results_t object. + * See the documentation of notmuch_query_search_messages for example + * code showing how to iterate over a notmuch_message_results_t + * object. */ notmuch_bool_t -notmuch_results_has_more (notmuch_results_t *results); +notmuch_message_results_has_more (notmuch_message_results_t *results); /* Get the current result from 'results' as a notmuch_message_t. * * Note: The returned message belongs to 'results' and has a lifetime * identical to it (and the query to which it belongs). * - * See the documentation of notmuch_query_search for example code - * showing how to iterate over a notmuch_results_t object. + * See the documentation of notmuch_query_search_messages for example + * code showing how to iterate over a notmuch_message_results_t + * object. + * + * If an out-of-memory situation occurs, this function will return + * NULL. */ notmuch_message_t * -notmuch_results_get (notmuch_results_t *results); +notmuch_message_results_get (notmuch_message_results_t *results); /* Advance the 'results' iterator to the next result. * - * See the documentation of notmuch_query_search for example code - * showing how to iterate over a notmuch_results_t object. + * See the documentation of notmuch_query_search_messages for example + * code showing how to iterate over a notmuch_message_results_t + * object. */ void -notmuch_results_advance (notmuch_results_t *results); +notmuch_message_results_advance (notmuch_message_results_t *results); -/* Destroy a notmuch_results_t object. +/* Destroy a notmuch_message_results_t object. * * It's not strictly necessary to call this function. All memory from - * the notmuch_results_t object will be reclaimed when the containg - * query object is destroyed. + * the notmuch_message_results_t object will be reclaimed when the + * containg query object is destroyed. */ void -notmuch_results_destroy (notmuch_results_t *results); +notmuch_message_results_destroy (notmuch_message_results_t *results); /* Get the message ID of 'message'. * @@ -408,10 +422,27 @@ notmuch_results_destroy (notmuch_results_t *results); const char * notmuch_message_get_message_id (notmuch_message_t *message); -/* Get this filename for the email corresponding to 'message'. +/* Get the thread ID of 'message'. + * + * The returned string belongs to 'message' and as such, should not be + * modified by the caller and will only be valid for as long as the + * message is valid, (for example, until the user calls + * notmuch_message_destroy on 'message' or until a query from which it + * derived is destroyed). + * + * This function will not return NULL since Notmuch ensures that every + * message belongs to a single thread. + */ +const char * +notmuch_message_get_thread_id (notmuch_message_t *message); + +/* Get the filename for the email corresponding to 'message'. * * The returned filename is relative to the base of the database from - * which 'message' was obtained. See notmuch_database_get_path() .*/ + * which 'message' was obtained. See notmuch_database_get_path() . + * The returned string belongs to the message so should not be + * modified or freed by the caller (nor should it be referenced after + * the message is destroyed). */ const char * notmuch_message_get_filename (notmuch_message_t *message); @@ -448,39 +479,6 @@ notmuch_message_get_filename (notmuch_message_t *message); notmuch_tags_t * notmuch_message_get_tags (notmuch_message_t *message); -/* Get the thread IDs for 'message', returning a notmuch_thread_ids_t - * object which can be used to iterate over all thread IDs. - * - * The thread_ids object is owned by the message and as such, will - * only be valid for as long as the message is valid, (which is until - * the query from which it derived is destroyed). - * - * Typical usage might be: - * - * notmuch_message_t *message; - * notmuch_thread_ids_t *thread_ids; - * const char *thread_id; - * - * message = notmuch_database_find_message (database, message_id); - * - * for (thread_ids = notmuch_message_get_thread_ids (message); - * notmuch_thread_ids_has_more (thread_ids); - * notmuch_thread_ids_advance (thread_ids)) - * { - * thread_id = notmuch_thread_ids_get (thread_ids); - * .... - * } - * - * notmuch_message_destroy (message); - * - * Note that there's no explicit destructor needed for the - * notmuch_thread_ids_t object. (For consistency, we do provide a - * notmuch_thread_ids_destroy function, but there's no good reason to - * call it if the message is about to be destroyed). - */ -notmuch_thread_ids_t * -notmuch_message_get_thread_ids (notmuch_message_t *message); - /* The longest possible tag value. */ #define NOTMUCH_TAG_MAX 200 @@ -563,46 +561,6 @@ notmuch_tags_advance (notmuch_tags_t *tags); void notmuch_tags_destroy (notmuch_tags_t *tags); -/* Does the given notmuch_thread_ids_t object contain any more thread IDs. - * - * When this function returns TRUE, notmuch_thread_ids_get will return a - * valid string. Whereas when this function returns FALSE, - * notmuch_thread_ids_get will return NULL. - * - * See the documentation of notmuch_message_get_thread_ids for example code - * showing how to iterate over a notmuch_thread_ids_t object. - */ -notmuch_bool_t -notmuch_thread_ids_has_more (notmuch_thread_ids_t *thread_ids); - -/* Get the current thread ID from 'thread_ids' as a string. - * - * Note: The returned string belongs to 'thread_ids' and has a lifetime - * identical to it (and the query to which it utlimately belongs). - * - * See the documentation of notmuch_message_get_thread_ids for example code - * showing how to iterate over a notmuch_thread_ids_t object. - */ -const char * -notmuch_thread_ids_get (notmuch_thread_ids_t *thread_ids); - -/* Advance the 'thread_ids' iterator to the next tag. - * - * See the documentation of notmuch_message_get_thread_ids for example code - * showing how to iterate over a notmuch_thread_ids_t object. - */ -void -notmuch_thread_ids_advance (notmuch_thread_ids_t *thread_ids); - -/* Destroy a notmuch_thread_ids_t object. - * - * It's not strictly necessary to call this function. All memory from - * the notmuch_thread_ids_t object will be reclaimed when the containg - * message or query objects are destroyed. - */ -void -notmuch_thread_ids_destroy (notmuch_thread_ids_t *thread_ids); - NOTMUCH_END_DECLS #endif