If the number of session keys for a given message increased after running "notmuch show" then we just learned something new that might let us do automatic decryption. We should reindex this message using our newfound knowledge. --- notmuch-show.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/notmuch-show.c b/notmuch-show.c index 9871159d..90e45cd9 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -873,6 +873,11 @@ show_message (void *ctx, void *local = talloc_new (ctx); mime_node_t *root, *part; notmuch_status_t status; + unsigned int session_keys = 0; + notmuch_status_t session_key_count_error = NOTMUCH_STATUS_SUCCESS; + + if (params->crypto.decrypt == NOTMUCH_DECRYPT_TRUE) + session_key_count_error = notmuch_message_count_properties (message, "session-key", &session_keys); status = mime_node_open (local, message, &(params->crypto), &root); if (status) @@ -880,6 +885,21 @@ show_message (void *ctx, part = mime_node_seek_dfs (root, (params->part < 0 ? 0 : params->part)); if (part) status = format->part (local, sp, part, indent, params); + + if (params->crypto.decrypt == NOTMUCH_DECRYPT_TRUE && session_key_count_error == NOTMUCH_STATUS_SUCCESS) { + unsigned int new_session_keys = 0; + if (notmuch_message_count_properties (message, "session-key", &new_session_keys) == NOTMUCH_STATUS_SUCCESS && + new_session_keys > session_keys) { + /* try a quiet re-indexing */ + notmuch_indexopts_t *indexopts = notmuch_database_get_default_indexopts (notmuch_message_get_database (message)); + if (indexopts) { + notmuch_indexopts_set_decrypt_policy (indexopts, NOTMUCH_DECRYPT_AUTO); + status = notmuch_message_reindex (message, indexopts); + if (status) + fprintf (stderr, "Error re-indexing message with --decrypt=stash. (%d) %s\n", status, notmuch_status_to_string (status)); + } + } + } DONE: talloc_free (local); return status; -- 2.15.1 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch