commit 7173d0719281cd10f80a10aa903b8134430f678e
parent b3672634e51b0ba1bc1c42c3bc4de36313ddc443
Author: Michael Elkins <me@mutt.org>
Date: Tue, 16 Jan 2001 19:45:08 +0000
added support for tilde (~) expansion in the `Mailbox' and `CertificateFile'
configuration directives
added `Maildir' configuration command to specify the default location of the
user's mailboxes. If a relative path is used in a `Mailbox' command, this
path is used as a prefix.
Diffstat:
6 files changed, 86 insertions(+), 18 deletions(-)
diff --git a/TODO b/TODO
@@ -1,3 +1,3 @@
-add upload support to mirror local msgs on the server
-
add support for syncing with other: and shared: via NAMESPACE
+
+finish implementing --quiet
diff --git a/config.c b/config.c
@@ -51,6 +51,43 @@ config_defaults (config_t * conf)
#endif
}
+/* `s' is destroyed by this call */
+static char *
+expand_strdup (char *s)
+{
+ char path[_POSIX_PATH_MAX];
+ struct passwd *pw;
+ char *p;
+
+ if (*s == '~')
+ {
+ s++;
+ if (*s == '/')
+ {
+ /* current user */
+ pw = getpwuid (getuid ());
+ p = s + 1;
+ }
+ else
+ {
+ p = strchr (s, '/');
+ if (p)
+ *p++ = 0;
+ pw = getpwnam (s);
+ }
+ if (!pw)
+ return 0;
+ snprintf (path, sizeof (path), "%s/%s", pw->pw_dir, p ? p : "");
+ s = path;
+ }
+ else if (*s != '/')
+ {
+ snprintf (path, sizeof (path), "%s/%s", global.maildir, s);
+ s = path;
+ }
+ return strdup (s);
+}
+
void
load_config (const char *where)
{
@@ -94,7 +131,13 @@ load_config (const char *where)
cur = &(*cur)->next;
*cur = calloc (1, sizeof (config_t));
config_defaults (*cur);
- (*cur)->path = strdup (val);
+ (*cur)->path = expand_strdup (val);
+ }
+ else if (!strncasecmp ("maildir", cmd, 7))
+ {
+ /* this only affects the global setting */
+ free (global.maildir);
+ global.maildir = expand_strdup (val);
}
else if (!strncasecmp ("host", cmd, 4))
{
@@ -184,9 +227,9 @@ load_config (const char *where)
else if (!strncasecmp ("CertificateFile", cmd, 15))
{
if (*cur)
- (*cur)->cert_file = strdup (val);
+ (*cur)->cert_file = expand_strdup (val);
else
- global.cert_file = strdup (val);
+ global.cert_file = expand_strdup (val);
}
else if (!strncasecmp ("RequireSSL", cmd, 10))
{
diff --git a/imap.c b/imap.c
@@ -727,7 +727,6 @@ imap_open (config_t * box, unsigned int minuid, imap_t * imap)
void
imap_close (imap_t * imap)
{
- puts ("Closing IMAP connection");
imap_exec (imap, "LOGOUT");
close (imap->sock->fd);
free (imap->sock);
diff --git a/isync.1 b/isync.1
@@ -16,7 +16,7 @@
\" along with this program; if not, write to the Free Software
\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
..
-.TH isync 1 "2000 Dec 27"
+.TH isync 1 "2001 Jan 16"
..
.SH NAME
isync - synchronize IMAP4 and maildir mailboxes
@@ -168,6 +168,16 @@ command line option overrides this setting when set to
\fIno\fR.
..
.TP
+\fBMailDir\fR \fIstring\fR
+Specifies the location for your mailboxes if a relative path is
+specified in a
+.I Mailbox
+command.
+(Default:
+.I ~
+)
+..
+.TP
\fBMaxSize\fR \fIbytes\fR
Sets a threshold for the maximum message size (in bytes) for which
.B isync
diff --git a/isync.h b/isync.h
@@ -47,7 +47,8 @@ typedef struct message message_t;
struct config
{
- char *path;
+ char *maildir;
+ char *path; /* path relative to .maildir, or absolute path */
char *host;
int port;
char *user;
diff --git a/main.c b/main.c
@@ -41,6 +41,7 @@ struct option Opts[] = {
{"remote", 1, NULL, 'r'},
{"host", 1, NULL, 's'},
{"port", 1, NULL, 'p'},
+ {"quiet", 0, NULL, 'q'},
{"user", 1, NULL, 'u'},
{"version", 0, NULL, 'v'},
{"verbose", 0, NULL, 'V'},
@@ -134,6 +135,7 @@ main (int argc, char **argv)
int delete = 0;
char *config = 0;
struct passwd *pw;
+ int quiet = 0;
pw = getpwuid (getuid ());
@@ -142,6 +144,7 @@ main (int argc, char **argv)
global.port = 143;
global.box = "INBOX";
global.user = strdup (pw->pw_name);
+ global.maildir = strdup (pw->pw_dir);
global.max_size = 0;
global.use_namespace = 1;
#if HAVE_LIBSSL
@@ -155,9 +158,9 @@ main (int argc, char **argv)
#endif
#if HAVE_GETOPT_LONG
- while ((i = getopt_long (argc, argv, "c:defhp:u:r:s:vV", Opts, NULL)) != -1)
+ while ((i = getopt_long (argc, argv, "c:defhp:qu:r:s:vV", Opts, NULL)) != -1)
#else
- while ((i = getopt (argc, argv, "c:defhp:u:r:s:vV")) != -1)
+ while ((i = getopt (argc, argv, "c:defhp:u:qr:s:vV")) != -1)
#endif
{
switch (i)
@@ -177,6 +180,10 @@ main (int argc, char **argv)
case 'p':
global.port = atoi (optarg);
break;
+ case 'q':
+ quiet = 1;
+ Verbose = 0;
+ break;
case 'r':
global.box = optarg;
break;
@@ -241,7 +248,8 @@ main (int argc, char **argv)
box->pass = strdup (global.pass);
}
- printf ("Reading %s\n", box->path);
+ if(!quiet)
+ printf ("Reading %s\n", box->path);
mail = maildir_open (box->path, fast);
if (!mail)
{
@@ -253,7 +261,8 @@ main (int argc, char **argv)
if (!imap)
exit (1);
- puts ("Synchronizing");
+ if (!quiet)
+ puts ("Synchronizing");
i = delete ? SYNC_DELETE : 0;
i |= (expunge || box->expunge) ? SYNC_EXPUNGE : 0;
if (sync_mailbox (mail, imap, i, box->max_size))
@@ -264,11 +273,13 @@ main (int argc, char **argv)
if (expunge && (imap->deleted || mail->deleted))
{
/* remove messages marked for deletion */
- printf ("Expunging %d messages from server\n", imap->deleted);
+ if (!quiet)
+ printf ("Expunging %d messages from server\n", imap->deleted);
if (imap_expunge (imap))
exit (1);
- printf ("Expunging %d messages from local mailbox\n",
- mail->deleted);
+ if (!quiet)
+ printf ("Expunging %d messages from local mailbox\n",
+ mail->deleted);
if (maildir_expunge (mail, 0))
exit (1);
}
@@ -280,9 +291,13 @@ main (int argc, char **argv)
maildir_expunge (mail, 1);
/* write changed flags back to the mailbox */
- printf ("Committing changes to %s\n", mail->path);
- if (maildir_sync (mail))
- exit (1);
+ if (mail->changed)
+ {
+ if (!quiet)
+ printf ("Committing changes to %s\n", mail->path);
+ if (maildir_sync (mail))
+ exit (1);
+ }
}
maildir_close (mail);