/*
* 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
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;
return 0;
}
-void mx_unlink_empty (const char *path)
+static void mx_unlink_empty (const char *path)
{
int fd;
#ifndef USE_DOTLOCK
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 */
-
- 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)
{
{
dprint (1, (debugfile, "mx_get_magic(): unable to open file %s for reading.\n",
path));
- mutt_perror (path);
return (-1);
}
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 (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 */
}
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;
}
}
}
- 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->changed && !ctx->deleted)
{
- mutt_message _("Mailbox is unchanged.");
+ if (!ctx->quiet)
+ mutt_message _("Mailbox is unchanged.");
return (0);
}
{
if (!ctx->changed)
return 0; /* nothing to do! */
-#ifdef USE_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;
{
#ifdef USE_IMAP
if (ctx->magic == M_IMAP && !purge)
- mutt_message _("Mailbox checkpointed.");
+ {
+ if (!ctx->quiet)
+ mutt_message _("Mailbox checkpointed.");
+ }
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);
*/
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)
-#endif
{
mx_update_tables (ctx, 1);
mutt_sort_headers (ctx, 1); /* rethread from scratch */
/* {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
-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];
- mutt_mktemp(tmp);
+ mutt_mktemp (tmp, sizeof (tmp));
if ((msg->fp = safe_fopen (tmp, "w")) == NULL)
{
mutt_perror (tmp);
#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
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);
}