X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.h;h=2c290fda85c8c6e97e2459b20ecfec46fa2b9058;hp=57ff8c8f3003fd63298ca7acd9464399ffe9262b;hb=68a10091d6b2c29e996ee84040eecad487cb5e91;hpb=868d3b30683e40af723a8c94141172bd78d2b118 diff --git a/notmuch.h b/notmuch.h index 57ff8c8f..2c290fda 100644 --- a/notmuch.h +++ b/notmuch.h @@ -31,6 +31,8 @@ NOTMUCH_BEGIN_DECLS +#include + #ifndef FALSE #define FALSE 0 #endif @@ -172,6 +174,57 @@ notmuch_database_default_path (void); const char * notmuch_database_get_path (notmuch_database_t *database); +/* Store a timestamp within the database. + * + * The Notmuch database will not interpret this key nor the timestamp + * values at all. It will merely store them together and return the + * timestamp when notmuch_database_get_timestamp is called with the + * same value for 'key'. + * + * The intention is for the caller to use the timestamp to allow + * efficient identification of new messages to be added to the + * database. The recommended usage is as follows: + * + * o Read the mtime of a directory from the filesystem + * + * o Call add_message for all mail files in the directory + * + * o Call notmuch_database_set_timestamp with the path of the + * directory as 'key' and the originally read mtime as 'value'. + * + * Then, when wanting to check for updates to the directory in the + * future, the client can call notmuch_database_get_timestamp and know + * that it only needs to add files if the mtime of the directory and + * files are newer than the stored timestamp. + * + * Note: The notmuch_database_get_timestamp function does not allow + * the caller to distinguish a timestamp of 0 from a non-existent + * timestamp. So don't store a timestamp of 0 unless you are + * comfortable with that. + * + * Return value: + * + * NOTMUCH_STATUS_SUCCESS: Timestamp successfully stored in database. + * + * NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception + * occurred. Timestamp not stored. + */ +notmuch_status_t +notmuch_database_set_timestamp (notmuch_database_t *database, + const char *key, time_t timestamp); + +/* Retrieve a timestamp from the database. + * + * Returns the timestamp value previously stored by calling + * notmuch_database_set_timestamp with the same value for 'key'. + * + * Returns 0 if no timestamp is stored for 'key' or if any error + * occurred querying the database. + */ +time_t +notmuch_database_get_timestamp (notmuch_database_t *database, + const char *key); + /* Add a new message to the given notmuch database. * * Here,'filename' should be a path relative to the the path of @@ -338,6 +391,10 @@ notmuch_results_destroy (notmuch_results_t *results); * modified by the caller and will only be valid for as long as the * message is valid, (which is until the query from which it derived * is destroyed). + * + * This function will not return NULL since Notmuch ensures that every + * message has a unique message ID, (Notmuch will generate an ID for a + * message if the original file does not contain one). */ const char * notmuch_message_get_message_id (notmuch_message_t *message);