Gnus development mailing list
 help / color / mirror / Atom feed
* PATCH: fix timezone handling in gnus-icalendar export to org
@ 2013-11-12 21:13 Jan Tatarik
  2013-11-12 21:48 ` Adam Sjøgren
  0 siblings, 1 reply; 2+ messages in thread
From: Jan Tatarik @ 2013-11-12 21:13 UTC (permalink / raw)
  To: ding

[-- Attachment #1: Type: text/plain, Size: 412 bytes --]

Hi,

the enclosed patch fixes an issue with ical appointment start/end dates
during export to org.

The time zone information was not used when generating org-mode
timestamps for appointment start/end dates, causing the appointment
dates to shift by one or more hours, depending on users' timezone
distance from GMT.

The patch fixes the issue for me and Adam Sjøgren, who first reported
the bug.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: tz_handling.patch --]
[-- Type: text/x-diff, Size: 4510 bytes --]

diff --git a/lisp/gnus-icalendar.el b/lisp/gnus-icalendar.el
index 969c868b5647158922f9873a49425678c45fd42f..f3b62381b47e79b7f260d5ad8c46ad498096c7d9 100644
--- a/lisp/gnus-icalendar.el
+++ b/lisp/gnus-icalendar.el
@@ -69,14 +69,14 @@
              :accessor gnus-icalendar-event:location
              :initform ""
              :type (or null string))
-   (start :initarg :start
-          :accessor gnus-icalendar-event:start
+   (start-time :initarg :start-time
+          :accessor gnus-icalendar-event:start-time
           :initform ""
-          :type (or null string))
-   (end :initarg :end
-        :accessor gnus-icalendar-event:end
+          :type (or null t))
+   (end-time :initarg :end-time
+        :accessor gnus-icalendar-event:end-time
         :initform ""
-        :type (or null string))
+        :type (or null t))
    (recur :initarg :recur
           :accessor gnus-icalendar-event:recur
           :initform ""
@@ -125,27 +125,15 @@
     (or (match-string 1 rrule)
         default-interval)))
 
-(defmethod gnus-icalendar-event:start-time ((event gnus-icalendar-event))
-  "Return time value of the EVENT start date."
-  (date-to-time (gnus-icalendar-event:start event)))
-
-(defmethod gnus-icalendar-event:end-time ((event gnus-icalendar-event))
-  "Return time value of the EVENT end date."
-  (date-to-time (gnus-icalendar-event:end event)))
-
+(defmethod gnus-icalendar-event:start ((event gnus-icalendar-event))
+  (format-time-string "%Y-%m-%d %H:%M" (gnus-icalendar-event:start-time event)))
 
-(defun gnus-icalendar-event--decode-datefield (ical field zone-map &optional date-style)
-  (let* ((calendar-date-style (or date-style 'european))
-         (date (icalendar--get-event-property ical field))
-         (date-zone (icalendar--find-time-zone
-                     (icalendar--get-event-property-attributes
-                      ical field)
-                     zone-map))
-         (date-decoded (icalendar--decode-isodatetime date nil date-zone)))
+(defun gnus-icalendar-event--decode-datefield (ical field)
+  (let* ((date (icalendar--get-event-property ical field))
+         (date-props (icalendar--get-event-property-attributes ical field))
+         (tz (plist-get date-props 'TZID)))
 
-    (concat (icalendar--datetime-to-iso-date date-decoded "-")
-            " "
-            (icalendar--datetime-to-colontime date-decoded))))
+    (date-to-time (timezone-make-date-arpa-standard date nil tz))))
 
 (defun gnus-icalendar-event--find-attendee (ical name-or-email)
   (let* ((event (car (icalendar--all-events ical)))
@@ -166,7 +154,6 @@
 
 (defun gnus-icalendar-event-from-ical (ical &optional attendee-name-or-email)
   (let* ((event (car (icalendar--all-events ical)))
-         (zone-map (icalendar--convert-all-timezones ical))
          (organizer (replace-regexp-in-string
                      "^.*MAILTO:" ""
                      (or (icalendar--get-event-property event 'ORGANIZER) "")))
@@ -180,8 +167,8 @@
                      (gnus-icalendar-event--find-attendee ical attendee-name-or-email)))
          (args (list :method method
                      :organizer organizer
-                     :start (gnus-icalendar-event--decode-datefield event 'DTSTART zone-map)
-                     :end (gnus-icalendar-event--decode-datefield event 'DTEND zone-map)
+                     :start-time (gnus-icalendar-event--decode-datefield event 'DTSTART)
+                     :end-time (gnus-icalendar-event--decode-datefield event 'DTEND)
                      :rsvp (string= (plist-get (cadr attendee) 'RSVP)
                                     "TRUE")))
          (event-class (cond
@@ -363,10 +350,10 @@ Return nil for non-recurring EVENT."
   "Build `org-mode' timestamp from EVENT start/end dates and recurrence info."
   (let* ((start (gnus-icalendar-event:start-time event))
          (end (gnus-icalendar-event:end-time event))
-         (start-date (format-time-string "%Y-%m-%d %a" start t))
-         (start-time (format-time-string "%H:%M" start t))
-         (end-date (format-time-string "%Y-%m-%d %a" end t))
-         (end-time (format-time-string "%H:%M" end t))
+         (start-date (format-time-string "%Y-%m-%d %a" start))
+         (start-time (format-time-string "%H:%M" start))
+         (end-date (format-time-string "%Y-%m-%d %a" end))
+         (end-time (format-time-string "%H:%M" end))
          (org-repeat (gnus-icalendar-event:org-repeat event))
          (repeat (if org-repeat (concat " " org-repeat) "")))
 

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: PATCH: fix timezone handling in gnus-icalendar export to org
  2013-11-12 21:13 PATCH: fix timezone handling in gnus-icalendar export to org Jan Tatarik
@ 2013-11-12 21:48 ` Adam Sjøgren
  0 siblings, 0 replies; 2+ messages in thread
From: Adam Sjøgren @ 2013-11-12 21:48 UTC (permalink / raw)
  To: ding

Jan Tatarik <jan.tatarik@gmail.com> writes:

> the enclosed patch fixes an issue with ical appointment start/end dates
> during export to org.

Thanks; applied:

 * http://git.gnus.org/cgit/gnus.git/commit/?id=9d32270f9a6036a0a694150e8c00201dc20b3519


  Best regards,

    Adam

-- 
 "I hope you're not going to ask me                           Adam Sjøgren
  to explain a title."                                   asjo@koldfront.dk




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2013-11-12 21:48 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-12 21:13 PATCH: fix timezone handling in gnus-icalendar export to org Jan Tatarik
2013-11-12 21:48 ` Adam Sjøgren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).