From: Brendan Cully Date: Sat, 27 Jun 2009 04:47:34 +0000 (-0700) Subject: Set internaldate of messages appended to IMAP mailboxes X-Git-Tag: neomutt-20160307~515 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7a6cfa3a5e25fe657261039e67db6357a9a21162;p=neomutt Set internaldate of messages appended to IMAP mailboxes --- diff --git a/ChangeLog b/ChangeLog index 60bdf1386..81f874117 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,29 +1,28 @@ -2009-06-25 21:46 +0200 Rocco Rutte (c5d0252e8f72) +2009-06-26 20:27 +0200 Rocco Rutte (156e6d6e34fc) - * rfc3676.c: Fix f=f corner case with DelSp=yes abuse + * doc/manual.xml.head: Manual: try to explain that and why + copiousoutput should come last -2009-06-25 17:31 +0200 Rocco Rutte (5f590adfdf1a) + * po/de.po: Update German translation - * ChangeLog, sendlib.c: header folding: treat From_ specially, never - wrap on sending side +2009-06-25 21:46 +0200 Rocco Rutte (c5d0252e8f72) -2009-06-25 14:36 +0200 Rocco Rutte (e0ec1856e3f3) + * rfc3676.c: Fix f=f corner case with DelSp=yes abuse - * sendlib.c: Add Date: header to postponed messages + * sendlib.c: header folding: treat From_ specially, never wrap on + sending side -2009-06-25 14:29 +0200 Rocco Rutte (64402a72e968) + * sendlib.c: Add Date: header to postponed messages - * ChangeLog, sendlib.c: Only add Status: header (fcc/postpone) when + * sendlib.c: Only add Status: header (fcc/postpone) when saving to mbox/mmdf -2009-06-25 14:29 +0200 Rocco Rutte (bd0828adede8) - * compose.c: Treat messages written with as fcc, not postponed. 2009-06-23 10:13 -0700 Vincent Lefevre (bc2463863c15) - * ChangeLog, po/fr.po: Updated French translation. + * po/fr.po: Updated French translation. 2009-06-23 16:56 +0200 Rocco Rutte (d152033cf967) diff --git a/imap/imap_private.h b/imap/imap_private.h index 618d8c531..9e6149463 100644 --- a/imap/imap_private.h +++ b/imap/imap_private.h @@ -70,6 +70,9 @@ #define IMAP_CMD_PASS (1<<1) #define IMAP_CMD_QUEUE (1<<2) +/* length of "DD-MMM-YYYY HH:MM:SS +ZZzz" (null-terminated) */ +#define IMAP_DATELEN 27 + enum { IMAP_FATAL = 1, @@ -281,6 +284,7 @@ char* imap_get_qualifier (char* buf); int imap_mxcmp (const char* mx1, const char* mx2); char* imap_next_word (char* s); time_t imap_parse_date (char* s); +void imap_make_date (char* buf, time_t timestamp); void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path); void imap_quote_string (char* dest, size_t slen, const char* src); void imap_unquote_string (char* s); diff --git a/imap/message.c b/imap/message.c index b09115293..91847913f 100644 --- a/imap/message.c +++ b/imap/message.c @@ -594,6 +594,7 @@ int imap_append_message (CONTEXT *ctx, MESSAGE *msg) char buf[LONG_STRING]; char mbox[LONG_STRING]; char mailbox[LONG_STRING]; + char internaldate[IMAP_DATELEN]; size_t len; progress_t progressbar; size_t sent; @@ -635,12 +636,14 @@ int imap_append_message (CONTEXT *ctx, MESSAGE *msg) M_PROGRESS_SIZE, NetInc, len); imap_munge_mbox_name (mbox, sizeof (mbox), mailbox); - snprintf (buf, sizeof (buf), "APPEND %s (%s%s%s%s%s) {%lu}", mbox, + imap_make_date (internaldate, msg->received); + snprintf (buf, sizeof (buf), "APPEND %s (%s%s%s%s%s) \"%s\" {%lu}", mbox, msg->flags.read ? "\\Seen" : "", msg->flags.read && (msg->flags.replied || msg->flags.flagged) ? " " : "", msg->flags.replied ? "\\Answered" : "", msg->flags.replied && msg->flags.flagged ? " " : "", msg->flags.flagged ? "\\Flagged" : "", + internaldate, (unsigned long) len); imap_cmd_start (idata, buf); diff --git a/imap/util.c b/imap/util.c index 5fa71b909..2e1dfc328 100644 --- a/imap/util.c +++ b/imap/util.c @@ -577,6 +577,21 @@ time_t imap_parse_date (char *s) return (mutt_mktime (&t, 0) + tz); } +/* format date in IMAP style: DD-MMM-YYYY HH:MM:SS +ZZzz. + * Caller should provide a buffer of IMAP_DATELEN bytes */ +void imap_make_date (char *buf, time_t timestamp) +{ + struct tm* tm = localtime (×tamp); + time_t tz = mutt_local_tz (timestamp); + + tz /= 60; + + snprintf (buf, IMAP_DATELEN, "%02d-%s-%d %02d:%02d:%02d %+03d%02d", + tm->tm_mday, Months[tm->tm_mon], tm->tm_year + 1900, + tm->tm_hour, tm->tm_min, tm->tm_sec, + (int) tz / 60, (int) abs (tz) % 60); +} + /* imap_qualify_path: make an absolute IMAP folder target, given IMAP_MBOX * and relative path. */ void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path)