#include "curs_lib.h"
#include "globals.h"
#include "mutt_curses.h"
+#include "muttlib.h"
+#include "mx.h"
#include "ncrypt/ncrypt.h"
#include "send.h"
mutt_autocrypt_db_peer_free(&peer);
return rv;
}
+
+/* This is invoked during the first autocrypt initialization,
+ * to scan one or more mailboxes for autocrypt headers.
+ *
+ * Due to the implementation, header-cached headers are not scanned,
+ * so this routine just opens up the mailboxes with $header_cache
+ * temporarily disabled.
+ */
+void mutt_autocrypt_scan_mailboxes(void)
+{
+ int scan;
+ struct Buffer *folderbuf = NULL;
+ struct Context *ctx = NULL;
+
+#ifdef USE_HCACHE
+ char *old_hdrcache = C_HeaderCache;
+ C_HeaderCache = NULL;
+#endif
+
+ folderbuf = mutt_buffer_pool_get();
+
+ /* L10N:
+ The first time autocrypt is enabled, Mutt will ask to scan
+ through one or more mailboxes for Autocrypt: headers.
+ Those headers are then captured in the database as peer records
+ and used for encryption.
+ If this is answered yes, they will be prompted for a mailbox.
+ */
+ scan = mutt_yesorno(_("Scan a mailbox for autocrypt headers?"), MUTT_YES);
+ while (scan == MUTT_YES)
+ {
+ /* L10N:
+ The prompt for a mailbox to scan for Autocrypt: headers
+ */
+ if ((!mutt_buffer_enter_fname(_("Scan mailbox"), folderbuf, 1)) &&
+ mutt_buffer_len(folderbuf))
+ {
+ mutt_buffer_expand_path_regex(folderbuf, false);
+ struct Mailbox *m = mx_path_resolve(mutt_b2s(folderbuf));
+ /* NOTE: I am purposely *not* executing folder hooks here,
+ * as they can do all sorts of things like push into the getch() buffer.
+ * Authentication should be in account-hooks. */
+ ctx = mx_mbox_open(m, MUTT_READONLY);
+ mx_mbox_close(&ctx);
+ mutt_buffer_reset(folderbuf);
+ }
+
+ /* outside of the MUTTMENU system, we have to deal with issues
+ * like the file browser not being cleared from the screen... */
+ move(0, 0);
+ clrtobot();
+
+ /* L10N:
+ This is the second prompt to see if the user would like
+ to scan more than one mailbox for Autocrypt headers.
+ I'm purposely being extra verbose; asking first then prompting
+ for a mailbox. This is because this is a one-time operation
+ and I don't want them to accidentally ctrl-g and abort it.
+ */
+ scan = mutt_yesorno(_("Scan another mailbox for autocrypt headers?"), MUTT_YES);
+ }
+
+#ifdef USE_HCACHE
+ C_HeaderCache = old_hdrcache;
+#endif
+ mutt_buffer_pool_release(&folderbuf);
+}