aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-01-13 02:55:38 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-01-13 02:55:38 +0000
commitfb375b0408b0b62b79ea6ebf659661253e54d8fd (patch)
tree0d32f4dee0fbd0dcf1a1a62493dd9578d78fea9f
parentb6db14ad049af26afd2f39c09a1d05bdbffc51cd (diff)
imap.c: added date-time info on APPEND using Date: header (for Gmail to display received date).
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2421 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r--ChangeLog7
-rw-r--r--libsylph/imap.c35
2 files changed, 39 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 7068d46f..41a196c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,12 @@
-2010-01-12
+2010-01-13
* version 3.0.0beta5
+2010-01-13
+
+ * libsylph/imap.c: imap_cmd_append(): added date-time info on APPEND
+ using Date: header (for Gmail to display received date).
+
2010-01-12
* configure.in: added workaround for crash by enchant with zemberek.
diff --git a/libsylph/imap.c b/libsylph/imap.c
index 201a59e0..83fcfaf9 100644
--- a/libsylph/imap.c
+++ b/libsylph/imap.c
@@ -4069,11 +4069,31 @@ static gint imap_cmd_fetch(IMAPSession *session, guint32 uid,
return ok;
}
+static void imap_get_date_time(gchar *buf, size_t len, time_t timer)
+{
+ static gchar monthstr[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
+ struct tm *lt;
+ gchar date_time[64];
+ gchar tz[6];
+
+ lt = localtime(&timer);
+ if (lt && lt->tm_mon >= 0 && lt->tm_mon < 12) {
+ strftime(date_time, sizeof(date_time), "%d-___-%Y %H:%M:%S",
+ lt);
+ tzoffset_buf(tz, &timer);
+ memcpy(date_time + 3, monthstr + lt->tm_mon * 3, 3);
+ g_snprintf(buf, len, "%s %s", date_time, tz);
+ }
+}
+
static gint imap_cmd_append(IMAPSession *session, const gchar *destfolder,
const gchar *file, IMAPFlags flags,
guint32 *new_uid)
{
gint ok;
+ MsgInfo *msginfo;
+ MsgFlags flags_ = {0, 0};
+ gchar date_time[64] = "";
gint size;
gchar *destfolder_;
gchar *flag_str;
@@ -4092,6 +4112,13 @@ static gint imap_cmd_append(IMAPSession *session, const gchar *destfolder,
FILE_OP_ERROR(file, "fopen");
return -1;
}
+
+ /* use Date: header as received date */
+ msginfo = procheader_parse_stream(fp, flags_, FALSE);
+ imap_get_date_time(date_time, sizeof(date_time), msginfo->date_t);
+ procmsg_msginfo_free(msginfo);
+
+ rewind(fp);
tmp = canonicalize_file_stream(fp, &size);
fclose(fp);
if (!tmp)
@@ -4099,8 +4126,12 @@ static gint imap_cmd_append(IMAPSession *session, const gchar *destfolder,
QUOTE_IF_REQUIRED(destfolder_, destfolder);
flag_str = imap_get_flag_str(flags);
- ok = imap_cmd_gen_send(session, "APPEND %s (%s) {%d}",
- destfolder_, flag_str, size);
+ if (date_time[0])
+ ok = imap_cmd_gen_send(session, "APPEND %s (%s) \"%s\" {%d}",
+ destfolder_, flag_str, date_time, size);
+ else
+ ok = imap_cmd_gen_send(session, "APPEND %s (%s) {%d}",
+ destfolder_, flag_str, size);
g_free(flag_str);
if (ok != IMAP_SUCCESS) {
log_warning(_("can't append %s to %s\n"), file, destfolder_);