]> granicus.if.org Git - mutt/commitdiff
Fix -z and -Z options to work with IMAP.
authorKevin McCarthy <kevin@8t8.us>
Sat, 28 Jul 2018 22:26:34 +0000 (15:26 -0700)
committerKevin McCarthy <kevin@8t8.us>
Sat, 28 Jul 2018 22:26:34 +0000 (15:26 -0700)
-Z did not work if $imap_passive was set (the default).  I think using
the option implies the desire to open a new connection and check
buffy at startup, so temporarily turn it off during the buffy.

-z was not hooked up for IMAP.  Change it to call imap_status().  This
also requires $imap_passive be unset, so temporarily turn the option
off too.

imap/imap.c
imap/imap.h
main.c
mx.c

index f4ed7f2ff7d978d5e5ecc0d994104c6ce6d06618..be766e04a13eee6ec9c1aab172cbcc196f62ec75 100644 (file)
@@ -1654,7 +1654,7 @@ int imap_buffy_check (int force, int check_stats)
 /* imap_status: returns count of messages in mailbox, or -1 on error.
  * if queue != 0, queue the command and expect it to have been run
  * on the next call (for pipelining the postponed count) */
-int imap_status (char* path, int queue)
+int imap_status (const char* path, int queue)
 {
   static int queued = 0;
 
index b89a622207aa6fce66ca86996ed41ce9e7db89d2..c5eb2aec3d6bdb5b38828c9894efe26aca1e6737 100644 (file)
@@ -38,7 +38,7 @@ int imap_delete_mailbox (CONTEXT* idata, IMAP_MBOX mx);
 int imap_sync_mailbox (CONTEXT *ctx, int expunge, int *index_hint);
 int imap_close_mailbox (CONTEXT *ctx);
 int imap_buffy_check (int force, int check_stats);
-int imap_status (char *path, int queue);
+int imap_status (const char *path, int queue);
 int imap_search (CONTEXT* ctx, const pattern_t* pat);
 int imap_subscribe (char *path, int subscribe);
 int imap_complete (char* dest, size_t dlen, char* path);
diff --git a/main.c b/main.c
index 9b798f96ac03be8c6ea97dd8eb833109fe6494b2..44f561ba8ff918d69b85d1970bb2415da3afbf50 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1231,6 +1231,11 @@ int main (int argc, char **argv, char **environ)
   {
     if (flags & MUTT_BUFFY)
     {
+#ifdef USE_IMAP
+      int passive = option (OPTIMAPPASSIVE);
+      if (passive)
+        unset_option (OPTIMAPPASSIVE);
+#endif
       if (!mutt_buffy_check (0))
       {
        mutt_endwin _("No mailbox with new mail.");
@@ -1238,6 +1243,10 @@ int main (int argc, char **argv, char **environ)
       }
       folder[0] = 0;
       mutt_buffy (folder, sizeof (folder));
+#ifdef USE_IMAP
+      if (passive)
+        set_option (OPTIMAPPASSIVE);
+#endif
     }
     else if (flags & MUTT_SELECT)
     {
diff --git a/mx.c b/mx.c
index 0dfd1970a066331145ae354a8f6936735ccc421f..404daef9f47e12fa38bba0de325d5e1c66ad3c4c 100644 (file)
--- a/mx.c
+++ b/mx.c
@@ -1498,6 +1498,20 @@ int mx_check_empty (const char *path)
       return mh_check_empty (path);
     case MUTT_MAILDIR:
       return maildir_check_empty (path);
+#ifdef USE_IMAP
+    case MUTT_IMAP:
+    {
+      int passive, rv;
+
+      passive = option (OPTIMAPPASSIVE);
+      if (passive)
+        unset_option (OPTIMAPPASSIVE);
+      rv = imap_status (path, 0);
+      if (passive)
+        set_option (OPTIMAPPASSIVE);
+      return (rv <= 0);
+    }
+#endif
     default:
       errno = EINVAL;
       return -1;