From 0eb0a2d6e60a683521d577770a022caff354ac47 Mon Sep 17 00:00:00 2001 From: Jim Nelson Date: Mon, 12 May 2014 15:44:22 -0700 Subject: [PATCH] Some date-related fixes --- bindings/vapi/gmime-2.6.vapi | 2 +- bindings/vapi/gmime-2.6/gmime-2.6.metadata | 2 +- .../imap/message/imap-internal-date.vala | 4 +--- src/engine/rfc822/rfc822-message-data.vala | 19 ++++++++++++++----- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/bindings/vapi/gmime-2.6.vapi b/bindings/vapi/gmime-2.6.vapi index c7769fc1..8d8c1045 100644 --- a/bindings/vapi/gmime-2.6.vapi +++ b/bindings/vapi/gmime-2.6.vapi @@ -1352,7 +1352,7 @@ namespace GMime { [CCode (cheader_filename = "gmime/gmime.h", cname = "g_mime_utils_generate_message_id")] public static string utils_generate_message_id (string fqdn); [CCode (cheader_filename = "gmime/gmime.h", cname = "g_mime_utils_header_decode_date")] - public static time_t utils_header_decode_date (string str, out unowned int? tz_offset); + public static time_t utils_header_decode_date (string str, out int tz_offset); [CCode (cheader_filename = "gmime/gmime.h", cname = "g_mime_utils_header_decode_phrase")] public static string utils_header_decode_phrase (string phrase); [CCode (cheader_filename = "gmime/gmime.h", cname = "g_mime_utils_header_decode_text")] diff --git a/bindings/vapi/gmime-2.6/gmime-2.6.metadata b/bindings/vapi/gmime-2.6/gmime-2.6.metadata index 9ee27016..903a535c 100644 --- a/bindings/vapi/gmime-2.6/gmime-2.6.metadata +++ b/bindings/vapi/gmime-2.6/gmime-2.6.metadata @@ -29,7 +29,7 @@ g_mime_utils_decode_8bit transfer_ownership="1" g_mime_utils_decode_message_id transfer_ownership="1" g_mime_utils_generate_message_id transfer_ownership="1" g_mime_utils_header_decode_date type_name="time_t" -g_mime_utils_header_decode_date.tz_offset is_out="1" nullable="1" +g_mime_utils_header_decode_date.tz_offset is_out="1" g_mime_utils_header_decode_phrase transfer_ownership="1" g_mime_utils_header_decode_text transfer_ownership="1" g_mime_utils_header_encode_phrase transfer_ownership="1" diff --git a/src/engine/imap/message/imap-internal-date.vala b/src/engine/imap/message/imap-internal-date.vala index 157fb767..6fd9ff18 100644 --- a/src/engine/imap/message/imap-internal-date.vala +++ b/src/engine/imap/message/imap-internal-date.vala @@ -84,9 +84,7 @@ public class Geary.Imap.InternalDate : Geary.MessageData.AbstractMessageData, Ge // TODO: verify timezone - // if no timezone listed, ISO 8601 says to use local time, but that doesn't make sense with - // most IMAP servers which have no out-of-band mechanism to know the client's timezone, so - // assuming UTC + // if no timezone listed, ISO 8601 says to use local time TimeZone timezone = (tz[0] != '\0') ? new TimeZone((string) tz) : new TimeZone.local(); // assemble into DateTime, which validates the time as well (this is why we want to keep diff --git a/src/engine/rfc822/rfc822-message-data.vala b/src/engine/rfc822/rfc822-message-data.vala index 975fc7e1..84d75390 100644 --- a/src/engine/rfc822/rfc822-message-data.vala +++ b/src/engine/rfc822/rfc822-message-data.vala @@ -156,14 +156,10 @@ public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.MessageData.Abs as_time_t = Time.datetime_to_time_t(datetime); } - public virtual bool equal_to(Geary.RFC822.Date other) { - return (this != other) ? value.equal(other.value) : true; - } - /** * Returns the {@link Date} in ISO-8601 format. */ - public virtual string serialize() { + public string to_iso_8601() { // Although GMime documents its conversion methods as requiring the tz offset in hours, // it appears the number is handed directly to the string (i.e. an offset of -7 becomes // "-0007", whereas we want "-0700"). @@ -171,6 +167,19 @@ public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.MessageData.Abs (int) (value.get_utc_offset() / TimeSpan.HOUR) * 100); } + /** + * Returns {@link Date} for transmission. + * + * @see to_iso_8601 + */ + public virtual string serialize() { + return to_iso_8601(); + } + + public virtual bool equal_to(Geary.RFC822.Date other) { + return (this != other) ? value.equal(other.value) : true; + } + public virtual uint hash() { return value.hash(); }