]> granicus.if.org Git - mutt/commitdiff
Set internaldate of messages appended to IMAP mailboxes
authorBrendan Cully <brendan@kublai.com>
Sat, 27 Jun 2009 04:47:34 +0000 (21:47 -0700)
committerBrendan Cully <brendan@kublai.com>
Sat, 27 Jun 2009 04:47:34 +0000 (21:47 -0700)
ChangeLog
imap/imap_private.h
imap/message.c
imap/util.c

index 60bdf1386d1a1606f3966550ea4c57166f9e53e7..81f874117d21b0c4f01e927b83de72a1bcc24357 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,29 +1,28 @@
-2009-06-25 21:46 +0200  Rocco Rutte  <pdmef@gmx.net>  (c5d0252e8f72)
+2009-06-26 20:27 +0200  Rocco Rutte  <pdmef@gmx.net>  (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  <pdmef@gmx.net>  (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  <pdmef@gmx.net>  (c5d0252e8f72)
 
-2009-06-25 14:36 +0200  Rocco Rutte  <pdmef@gmx.net>  (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  <pdmef@gmx.net>  (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  <pdmef@gmx.net>  (bd0828adede8)
-
        * compose.c: Treat messages written with <write-fcc> as fcc, not
        postponed.
 
 2009-06-23 10:13 -0700  Vincent Lefevre  <vincent@vinc17.org>  (bc2463863c15)
 
-       * ChangeLog, po/fr.po: Updated French translation.
+       * po/fr.po: Updated French translation.
 
 2009-06-23 16:56 +0200  Rocco Rutte  <pdmef@gmx.net>  (d152033cf967)
 
index 618d8c5316cf35489c7ac228b5c5866de5874ee5..9e61494634429270354dc6438fa2a254e3a59a91 100644 (file)
@@ -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);
index b091152938dc3b00457d82b45581185a1cac8580..91847913f263e1ca2a568e0a352bbd8cbad04bce 100644 (file)
@@ -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);
index 5fa71b9097175edf0098d0399084600eac4210a6..2e1dfc3282da9a555302ab5dd4a93d2977f9c41f 100644 (file)
@@ -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 (&timestamp);
+  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)