]> git.llucax.com Git - software/mutt-debian.git/blobdiff - mx.c
Update and enable NNTP patch
[software/mutt-debian.git] / mx.c
diff --git a/mx.c b/mx.c
index d4b7203f0f0c1c1deb68b793efef2d59390b0570..7e5271429a0f40f789c4ec2b02e18cecd4a6c704 100644 (file)
--- a/mx.c
+++ b/mx.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
 /*
  * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
- * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ * Copyright (C) 1999-2003 Thomas Roessler <roessler@does-not-exist.org>
  * 
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
  * 
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
@@ -251,7 +251,7 @@ int mx_lock_file (const char *path, int fd, int excl, int dot, int timeout)
 int mx_unlock_file (const char *path, int fd, int dot)
 {
 #ifdef USE_FCNTL
 int mx_unlock_file (const char *path, int fd, int dot)
 {
 #ifdef USE_FCNTL
-  struct flock unlockit = { F_UNLCK, 0, 0, 0 };
+  struct flock unlockit = { F_UNLCK, 0, 0, 0, 0 };
 
   memset (&unlockit, 0, sizeof (struct flock));
   unlockit.l_type = F_UNLCK;
 
   memset (&unlockit, 0, sizeof (struct flock));
   unlockit.l_type = F_UNLCK;
@@ -271,7 +271,7 @@ int mx_unlock_file (const char *path, int fd, int dot)
   return 0;
 }
 
   return 0;
 }
 
-void mx_unlink_empty (const char *path)
+static void mx_unlink_empty (const char *path)
 {
   int fd;
 #ifndef USE_DOTLOCK
 {
   int fd;
 #ifndef USE_DOTLOCK
@@ -370,42 +370,12 @@ int mx_get_magic (const char *path)
   if (S_ISDIR (st.st_mode))
   {
     /* check for maildir-style mailbox */
   if (S_ISDIR (st.st_mode))
   {
     /* check for maildir-style mailbox */
-
-    snprintf (tmp, sizeof (tmp), "%s/cur", path);
-    if (stat (tmp, &st) == 0 && S_ISDIR (st.st_mode))
-      return (M_MAILDIR);
+    if (mx_is_maildir (path))
+      return M_MAILDIR;
 
     /* check for mh-style mailbox */
 
     /* check for mh-style mailbox */
-
-    snprintf (tmp, sizeof (tmp), "%s/.mh_sequences", path);
-    if (access (tmp, F_OK) == 0)
-      return (M_MH);
-
-    snprintf (tmp, sizeof (tmp), "%s/.xmhcache", path);
-    if (access (tmp, F_OK) == 0)
-      return (M_MH);
-    
-    snprintf (tmp, sizeof (tmp), "%s/.mew_cache", path);
-    if (access (tmp, F_OK) == 0)
-      return (M_MH);
-
-    snprintf (tmp, sizeof (tmp), "%s/.mew-cache", path);
-    if (access (tmp, F_OK) == 0)
-      return (M_MH);
-    
-    snprintf (tmp, sizeof (tmp), "%s/.sylpheed_cache", path);
-    if (access (tmp, F_OK) == 0)
-      return (M_MH);
-
-    /* 
-     * ok, this isn't an mh folder, but mh mode can be used to read
-     * Usenet news from the spool. ;-) 
-     */
-
-    snprintf (tmp, sizeof (tmp), "%s/.overview", path);
-    if (access (tmp, F_OK) == 0)
-      return (M_MH);
-
+    if (mx_is_mh (path))
+      return M_MH;
   }
   else if (st.st_size == 0)
   {
   }
   else if (st.st_size == 0)
   {
@@ -441,7 +411,6 @@ int mx_get_magic (const char *path)
   {
     dprint (1, (debugfile, "mx_get_magic(): unable to open file %s for reading.\n",
                path));
   {
     dprint (1, (debugfile, "mx_get_magic(): unable to open file %s for reading.\n",
                path));
-    mutt_perror (path);
     return (-1);
   }
 
     return (-1);
   }
 
@@ -736,6 +705,10 @@ void mx_fastclose_mailbox (CONTEXT *ctx)
   if(!ctx) 
     return;
 
   if(!ctx) 
     return;
 
+  /* never announce that a mailbox we've just left has new mail. #3290
+   * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */
+  mutt_buffy_setnotified(ctx->path);
+
   if (ctx->mx_close)
     ctx->mx_close (ctx);
 
   if (ctx->mx_close)
     ctx->mx_close (ctx);
 
@@ -895,7 +868,8 @@ int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
 
   if (move_messages)
   {
 
   if (move_messages)
   {
-    mutt_message (_("Moving read messages to %s..."), mbox);
+    if (!ctx->quiet)
+      mutt_message (_("Moving read messages to %s..."), mbox);
 
 #ifdef USE_IMAP
     /* try to use server-side copy first */
 
 #ifdef USE_IMAP
     /* try to use server-side copy first */
@@ -954,7 +928,10 @@ int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
   }
   else if (!ctx->changed && ctx->deleted == 0)
   {
   }
   else if (!ctx->changed && ctx->deleted == 0)
   {
-    mutt_message _("Mailbox is unchanged.");
+    if (!ctx->quiet)
+      mutt_message _("Mailbox is unchanged.");
+    if (ctx->magic == M_MBOX || ctx->magic == M_MMDF)
+      mbox_reset_atime (ctx, NULL);
     mx_fastclose_mailbox (ctx);
     return 0;
   }
     mx_fastclose_mailbox (ctx);
     return 0;
   }
@@ -989,12 +966,15 @@ int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
     }
   }
 
     }
   }
 
-  if (move_messages)
-     mutt_message (_("%d kept, %d moved, %d deleted."),
-       ctx->msgcount - ctx->deleted, read_msgs, ctx->deleted);
-  else
-    mutt_message (_("%d kept, %d deleted."),
-      ctx->msgcount - ctx->deleted, ctx->deleted);
+  if (!ctx->quiet)
+  {
+    if (move_messages)
+      mutt_message (_("%d kept, %d moved, %d deleted."),
+       ctx->msgcount - ctx->deleted, read_msgs, ctx->deleted);
+    else
+      mutt_message (_("%d kept, %d deleted."),
+       ctx->msgcount - ctx->deleted, ctx->deleted);
+  }
 
   if (ctx->msgcount == ctx->deleted &&
       (ctx->magic == M_MMDF || ctx->magic == M_MBOX) &&
 
   if (ctx->msgcount == ctx->deleted &&
       (ctx->magic == M_MMDF || ctx->magic == M_MBOX) &&
@@ -1118,7 +1098,8 @@ int mx_sync_mailbox (CONTEXT *ctx, int *index_hint)
 
   if (!ctx->changed && !ctx->deleted)
   {
 
   if (!ctx->changed && !ctx->deleted)
   {
-    mutt_message _("Mailbox is unchanged.");
+    if (!ctx->quiet)
+      mutt_message _("Mailbox is unchanged.");
     return (0);
   }
 
     return (0);
   }
 
@@ -1135,10 +1116,8 @@ int mx_sync_mailbox (CONTEXT *ctx, int *index_hint)
     {
       if (!ctx->changed)
        return 0; /* nothing to do! */
     {
       if (!ctx->changed)
        return 0; /* nothing to do! */
-#ifdef USE_IMAP
       /* let IMAP servers hold on to D flags */
       if (ctx->magic != M_IMAP)
       /* let IMAP servers hold on to D flags */
       if (ctx->magic != M_IMAP)
-#endif
       {
         for (i = 0 ; i < ctx->msgcount ; i++)
           ctx->hdrs[i]->deleted = 0;
       {
         for (i = 0 ; i < ctx->msgcount ; i++)
           ctx->hdrs[i]->deleted = 0;
@@ -1164,11 +1143,17 @@ int mx_sync_mailbox (CONTEXT *ctx, int *index_hint)
   {
 #ifdef USE_IMAP
     if (ctx->magic == M_IMAP && !purge)
   {
 #ifdef USE_IMAP
     if (ctx->magic == M_IMAP && !purge)
-      mutt_message _("Mailbox checkpointed.");
+    {
+      if (!ctx->quiet)
+        mutt_message _("Mailbox checkpointed.");
+    }
     else
 #endif
     else
 #endif
-    mutt_message (_("%d kept, %d deleted."), msgcount - deleted,
-      deleted);
+    {
+      if (!ctx->quiet)
+       mutt_message (_("%d kept, %d deleted."), msgcount - deleted,
+                     deleted);
+    }
 
     mutt_sleep (0);
     
 
     mutt_sleep (0);
     
@@ -1190,10 +1175,8 @@ int mx_sync_mailbox (CONTEXT *ctx, int *index_hint)
      */
     if (purge || (ctx->magic != M_MAILDIR && ctx->magic != M_MH))
     {
      */
     if (purge || (ctx->magic != M_MAILDIR && ctx->magic != M_MH))
     {
-#ifdef USE_IMAP
       /* IMAP does this automatically after handling EXPUNGE */
       if (ctx->magic != M_IMAP)
       /* IMAP does this automatically after handling EXPUNGE */
       if (ctx->magic != M_IMAP)
-#endif
       {
        mx_update_tables (ctx, 1);
        mutt_sort_headers (ctx, 1); /* rethread from scratch */
       {
        mx_update_tables (ctx, 1);
        mutt_sort_headers (ctx, 1); /* rethread from scratch */
@@ -1207,18 +1190,18 @@ int mx_sync_mailbox (CONTEXT *ctx, int *index_hint)
 
 /* {maildir,mh}_open_new_message are in mh.c. */
 
 
 /* {maildir,mh}_open_new_message are in mh.c. */
 
-int mbox_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr)
+static int mbox_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr)
 {
   msg->fp = dest->fp;
   return 0;
 }
 
 #ifdef USE_IMAP
 {
   msg->fp = dest->fp;
   return 0;
 }
 
 #ifdef USE_IMAP
-int imap_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr)
+static int imap_open_new_message (MESSAGE *msg, CONTEXT *dest, HEADER *hdr)
 {
   char tmp[_POSIX_PATH_MAX];
 
 {
   char tmp[_POSIX_PATH_MAX];
 
-  mutt_mktemp(tmp);
+  mutt_mktemp (tmp, sizeof (tmp));
   if ((msg->fp = safe_fopen (tmp, "w")) == NULL)
   {
     mutt_perror (tmp);
   if ((msg->fp = safe_fopen (tmp, "w")) == NULL)
   {
     mutt_perror (tmp);
@@ -1347,7 +1330,11 @@ int mx_check_mailbox (CONTEXT *ctx, int *index_hint, int lock)
 
 #ifdef USE_IMAP
       case M_IMAP:
 
 #ifdef USE_IMAP
       case M_IMAP:
-       return (imap_check_mailbox (ctx, index_hint, 0));
+       /* caller expects that mailbox may change */
+        imap_allow_reopen (ctx);
+       rc = imap_check_mailbox (ctx, index_hint, 0);
+        imap_disallow_reopen (ctx);
+       return rc;
 #endif /* USE_IMAP */
 
 #ifdef USE_POP
 #endif /* USE_IMAP */
 
 #ifdef USE_POP
@@ -1489,13 +1476,7 @@ int mx_close_message (MESSAGE **msg)
   int r = 0;
 
   if ((*msg)->magic == M_MH || (*msg)->magic == M_MAILDIR
   int r = 0;
 
   if ((*msg)->magic == M_MH || (*msg)->magic == M_MAILDIR
-#ifdef USE_IMAP
-      || (*msg)->magic == M_IMAP
-#endif
-#ifdef USE_POP
-      || (*msg)->magic == M_POP
-#endif
-      )
+      || (*msg)->magic == M_IMAP || (*msg)->magic == M_POP)
   {
     r = safe_fclose (&(*msg)->fp);
   }
   {
     r = safe_fclose (&(*msg)->fp);
   }