#include "browser.h"
#include "message.h"
#include "imap_private.h"
-#ifdef USE_SSL
+#if defined(USE_SSL) || defined(USE_GNUTLS)
# include "mutt_ssl.h"
#endif
/* TODO: Parse new tagged CAPABILITY data (* OK [CAPABILITY...]) */
if (imap_check_capabilities (idata))
goto bail;
-#if defined(USE_SSL) && !defined(USE_NSS)
+#if defined(USE_SSL) || defined(USE_GNUTLS)
/* Attempt STARTTLS if available and desired. */
if (mutt_bit_isset (idata->capabilities, STARTTLS) && !idata->conn->ssf)
{
goto bail;
if (rc != -2)
{
+#ifdef USE_SSL
if (mutt_ssl_starttls (idata->conn))
+#elif USE_GNUTLS
+ if (mutt_gnutls_starttls (idata->conn))
+#endif
{
mutt_error (_("Could not negotiate TLS connection"));
mutt_sleep (1);
if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL)
goto fail;
}
+#ifdef USE_HCACHE
+ /* save UIDVALIDITY for the header cache */
+ else if (ascii_strncasecmp("OK [UIDVALIDITY", pc, 14) == 0)
+ {
+ dprint(2, (debugfile, "Getting mailbox UIDVALIDITY\n"));
+ pc += 3;
+ pc = imap_next_word(pc);
+
+ sscanf(pc, "%u", &(idata->uid_validity));
+ }
+#endif
else
{
pc = imap_next_word (pc);
mutt_buffer_addstr (&cmd, "UID STORE ");
mutt_buffer_addstr (&cmd, uid);
- /* if attachments have been deleted we delete the message and reupload
- * it. This works better if we're expunging, of course. */
- if (ctx->hdrs[n]->attach_del)
+ /* if the message has been rethreaded or attachments have been deleted
+ * we delete the message and reupload it.
+ * This works better if we're expunging, of course. */
+ if (ctx->hdrs[n]->refs_changed || ctx->hdrs[n]->irt_changed ||
+ ctx->hdrs[n]->attach_del)
{
dprint (3, (debugfile, "imap_sync_mailbox: Attachments to be deleted, falling back to _mutt_save_message\n"));
if (!appendctx)
FREE (&mx.mbox);
return -1;
}
+
+/* reconnect and verify indexes if connection was lost */
+int imap_reconnect(CONTEXT* ctx) {
+ IMAP_DATA* imap_data = (IMAP_DATA *)ctx->data;
+
+ if (imap_data->status == IMAP_CONNECTED)
+ return -1;
+ if (imap_data->status == IMAP_BYE)
+ return 0;
+
+ mutt_socket_close(imap_data->conn);
+
+ if (query_quadoption(OPT_IMAPRECONNECT,_("Connection lost. Reconnect to IMAP server?")) != M_YES)
+ return -1;
+
+ return imap_open_mailbox(ctx);
+}
+