Add the new message to the notmuch database, renaming the file to encode notmuch tags as maildir flags. --- notmuch-insert.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 44 insertions(+), 0 deletions(-) diff --git a/notmuch-insert.c b/notmuch-insert.c index bab1fed..dd449bc 100644 --- a/notmuch-insert.c +++ b/notmuch-insert.c @@ -129,6 +129,42 @@ copy_fd_data (int fdin, int fdout) } static notmuch_bool_t +save_database (notmuch_database_t *notmuch, const char *path) +{ + notmuch_message_t *message; + notmuch_status_t status; + + status = notmuch_database_add_message (notmuch, path, &message); + switch (status) { + case NOTMUCH_STATUS_SUCCESS: + break; + case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: + fprintf (stderr, "Warning: duplicate message.\n"); + break; + default: + case NOTMUCH_STATUS_FILE_NOT_EMAIL: + case NOTMUCH_STATUS_READ_ONLY_DATABASE: + case NOTMUCH_STATUS_XAPIAN_EXCEPTION: + case NOTMUCH_STATUS_OUT_OF_MEMORY: + case NOTMUCH_STATUS_FILE_ERROR: + case NOTMUCH_STATUS_NULL_POINTER: + case NOTMUCH_STATUS_TAG_TOO_LONG: + case NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW: + case NOTMUCH_STATUS_UNBALANCED_ATOMIC: + case NOTMUCH_STATUS_LAST_STATUS: + fprintf (stderr, "Error: failed to add `%s' to notmuch database: %s\n", + path, notmuch_status_to_string (status)); + return FALSE; + } + + notmuch_message_tags_to_maildir_flags (message); + + notmuch_message_destroy (message); + + return TRUE; +} + +static notmuch_bool_t insert_message (void *ctx, notmuch_database_t *notmuch, int fdin, const char *dir) { @@ -152,6 +188,14 @@ insert_message (void *ctx, notmuch_database_t *notmuch, int fdin, if (!ret) { unlink (tmppath); + return FALSE; + } + + ret = save_database (notmuch, newpath); + + if (!ret) { + /* XXX maybe there should be an option to keep the file in maildir? */ + unlink (newpath); } return ret; -- 1.7.4.4