More modular way to open messages.
[apps/madmutt.git] / imap / imap.c
index ac9363e..ea2eb80 100644 (file)
@@ -18,7 +18,6 @@
 #include "globals.h"
 #include "pattern.h"
 #include "sort.h"
-#include "browser.h"
 #include "message.h"
 #include "imap_private.h"
 #include "buffy.h"
@@ -299,7 +298,6 @@ IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags)
   CONNECTION *conn;
   IMAP_DATA *idata;
   ACCOUNT *creds;
-  int new = 0;
 
   if (!(conn = mutt_conn_find (NULL, account)))
     return NULL;
@@ -332,26 +330,28 @@ IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags)
     idata = imap_new_idata();
     conn->data  = idata;
     idata->conn = conn;
-    new = 1;
   }
 
   if (idata->state == IMAP_DISCONNECTED)
     imap_open_connection (idata);
   if (idata->state == IMAP_CONNECTED) {
-    if (!imap_authenticate (idata)) {
+    if (!imap_authenticate(idata)) {
       idata->state = IMAP_AUTHENTICATED;
     } else {
+      mutt_socket_close(idata->conn);
+      idata->state = IMAP_DISCONNECTED;
       idata->conn->account.has_pass = 0;
     }
 
     p_delete(&idata->capstr);
   }
-  if (new && idata->state == IMAP_AUTHENTICATED) {
+  if (idata->isnew && idata->state == IMAP_AUTHENTICATED) {
     imap_get_delim (idata);
     if (option (OPTIMAPCHECKSUBSCRIBED)) {
       mutt_message _("Checking mailbox subscriptions");
       imap_exec (idata, "LSUB \"\" \"*\"", 0);
     }
+    idata->isnew = 0;
   }
 
   return idata;
@@ -649,7 +649,7 @@ int imap_open_mailbox_append (CONTEXT * ctx)
 
   if (!(idata = imap_conn_find (&(mx.account), 0))) {
     p_delete(&mx.mbox);
-    return (-1);
+    return -1;
   }
   conn = idata->conn;
 
@@ -671,7 +671,7 @@ int imap_open_mailbox_append (CONTEXT * ctx)
   if (imap_create_mailbox (idata, mailbox) < 0)
     return -1;
 
-  return (0);
+  return 0;
 }
 
 /* imap_logout: Gracefully log out of server. */
@@ -1335,8 +1335,6 @@ int imap_subscribe (char *path, int subscribe)
   IMAP_DATA *idata;
   char buf[LONG_STRING];
   char mbox[LONG_STRING];
-  char errstr[STRING];
-  BUFFER err, token;
   IMAP_MBOX mx;
 
   if (mx_get_magic (path) != M_IMAP || imap_parse_path (path, &mx) < 0) {
@@ -1352,13 +1350,7 @@ int imap_subscribe (char *path, int subscribe)
   imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
 
   if (option (OPTIMAPCHECKSUBSCRIBED)) {
-    p_clear(&token, 1);
-    err.data = errstr;
-    err.dsize = sizeof (errstr);
-    snprintf (mbox, sizeof (mbox), "%smailboxes \"%s\"",
-              subscribe ? "" : "un", path);
-    mutt_parse_rc_line (mbox, &token, &err);
-    p_delete(&token.data);
+    buffy_do_mailboxes(path, subscribe);
   }
 
   if (subscribe)
@@ -1404,7 +1396,7 @@ static int imap_complete_hosts (char *dest, ssize_t len) {
 
   matchlen = m_strlen(dest);
   if (!Incoming.len)
-    return (-1);
+    return -1;
   for (i = 0; i < Incoming.len; i++) {
     mailbox = Incoming.arr[i];
     if (!m_strncmp(dest, mailbox->path, matchlen)) {
@@ -1532,7 +1524,7 @@ int imap_reconnect (CONTEXT * ctx)
   IMAP_DATA *imap_data;
 
   if (!ctx)
-    return (-1);
+    return -1;
 
   imap_data = (IMAP_DATA *) ctx->data;
 
@@ -1553,9 +1545,9 @@ int imap_reconnect (CONTEXT * ctx)
 int imap_is_magic (const char* path, struct stat* st __attribute__ ((unused))) {
   url_scheme_t s;
   if (!path || !*path)
-    return (-1);
+    return -1;
   s = url_check_scheme (NONULL (path));
-  return ((s == U_IMAP || s == U_IMAPS) ? M_IMAP : -1);
+  return (s == U_IMAP || s == U_IMAPS) ? M_IMAP : -1;
 }
 
 static int acl_check_imap (CONTEXT* ctx, int bit) {
@@ -1584,7 +1576,7 @@ static int imap_open_new_message (MESSAGE * msg,
 static int _imap_check_mailbox (CONTEXT* ctx,
                                 int* index_hint,
                                 int lock __attribute__ ((unused))) {
-  return (imap_check_mailbox (ctx, index_hint, 0));
+  return imap_check_mailbox (ctx, index_hint, 0);
 }
 
 static int imap_commit_message (MESSAGE* msg, CONTEXT* ctx) {
@@ -1592,7 +1584,7 @@ static int imap_commit_message (MESSAGE* msg, CONTEXT* ctx) {
 
   if ((r = m_fclose(&msg->fp)) == 0)
     r = imap_append_message (ctx, msg);
-  return (r);
+  return r;
 }
 
 mx_t const imap_mx = {
@@ -1603,6 +1595,7 @@ mx_t const imap_mx = {
     imap_access,
     imap_open_mailbox,
     imap_open_new_message,
+    imap_fetch_message,
     acl_check_imap,
     _imap_check_mailbox,
     imap_close_mailbox,