diff options
| author | Jan Tatarik | 2013-11-12 22:16:09 +0000 |
|---|---|---|
| committer | Katsumi Yamaoka | 2013-11-12 22:16:09 +0000 |
| commit | 62dfefa0cd18ff4a6005820995ae93ce0db057f7 (patch) | |
| tree | 0b94deb95978f540e7285a83723ed636a3fc6ee1 | |
| parent | c71bf8614000b219eab32a200a7267d7520a9cfe (diff) | |
| download | emacs-62dfefa0cd18ff4a6005820995ae93ce0db057f7.tar.gz emacs-62dfefa0cd18ff4a6005820995ae93ce0db057f7.zip | |
lisp/gnus/gnus-icalendar.el (gnus-icalendar-event-from-ical): Fix timezone handling in gnus-icalendar export to org
| -rw-r--r-- | lisp/gnus/ChangeLog | 5 | ||||
| -rw-r--r-- | lisp/gnus/gnus-icalendar.el | 51 |
2 files changed, 24 insertions, 32 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index d2563c821d6..cfdf6c9063e 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2013-11-12 Jan Tatarik <jan.tatarik@gmail.com> | ||
| 2 | |||
| 3 | * gnus-icalendar.el (gnus-icalendar-event-from-ical): | ||
| 4 | Fix timezone handling in gnus-icalendar export to org. | ||
| 5 | |||
| 1 | 2013-11-05 Katsumi Yamaoka <yamaoka@jpl.org> | 6 | 2013-11-05 Katsumi Yamaoka <yamaoka@jpl.org> |
| 2 | 7 | ||
| 3 | * gnus-cite.el (gnus-cite-add-face): Make non-sticky overlays. | 8 | * gnus-cite.el (gnus-cite-add-face): Make non-sticky overlays. |
diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el index 969c868b564..f3b62381b47 100644 --- a/lisp/gnus/gnus-icalendar.el +++ b/lisp/gnus/gnus-icalendar.el | |||
| @@ -69,14 +69,14 @@ | |||
| 69 | :accessor gnus-icalendar-event:location | 69 | :accessor gnus-icalendar-event:location |
| 70 | :initform "" | 70 | :initform "" |
| 71 | :type (or null string)) | 71 | :type (or null string)) |
| 72 | (start :initarg :start | 72 | (start-time :initarg :start-time |
| 73 | :accessor gnus-icalendar-event:start | 73 | :accessor gnus-icalendar-event:start-time |
| 74 | :initform "" | 74 | :initform "" |
| 75 | :type (or null string)) | 75 | :type (or null t)) |
| 76 | (end :initarg :end | 76 | (end-time :initarg :end-time |
| 77 | :accessor gnus-icalendar-event:end | 77 | :accessor gnus-icalendar-event:end-time |
| 78 | :initform "" | 78 | :initform "" |
| 79 | :type (or null string)) | 79 | :type (or null t)) |
| 80 | (recur :initarg :recur | 80 | (recur :initarg :recur |
| 81 | :accessor gnus-icalendar-event:recur | 81 | :accessor gnus-icalendar-event:recur |
| 82 | :initform "" | 82 | :initform "" |
| @@ -125,27 +125,15 @@ | |||
| 125 | (or (match-string 1 rrule) | 125 | (or (match-string 1 rrule) |
| 126 | default-interval))) | 126 | default-interval))) |
| 127 | 127 | ||
| 128 | (defmethod gnus-icalendar-event:start-time ((event gnus-icalendar-event)) | 128 | (defmethod gnus-icalendar-event:start ((event gnus-icalendar-event)) |
| 129 | "Return time value of the EVENT start date." | 129 | (format-time-string "%Y-%m-%d %H:%M" (gnus-icalendar-event:start-time event))) |
| 130 | (date-to-time (gnus-icalendar-event:start event))) | ||
| 131 | |||
| 132 | (defmethod gnus-icalendar-event:end-time ((event gnus-icalendar-event)) | ||
| 133 | "Return time value of the EVENT end date." | ||
| 134 | (date-to-time (gnus-icalendar-event:end event))) | ||
| 135 | |||
| 136 | 130 | ||
| 137 | (defun gnus-icalendar-event--decode-datefield (ical field zone-map &optional date-style) | 131 | (defun gnus-icalendar-event--decode-datefield (ical field) |
| 138 | (let* ((calendar-date-style (or date-style 'european)) | 132 | (let* ((date (icalendar--get-event-property ical field)) |
| 139 | (date (icalendar--get-event-property ical field)) | 133 | (date-props (icalendar--get-event-property-attributes ical field)) |
| 140 | (date-zone (icalendar--find-time-zone | 134 | (tz (plist-get date-props 'TZID))) |
| 141 | (icalendar--get-event-property-attributes | ||
| 142 | ical field) | ||
| 143 | zone-map)) | ||
| 144 | (date-decoded (icalendar--decode-isodatetime date nil date-zone))) | ||
| 145 | 135 | ||
| 146 | (concat (icalendar--datetime-to-iso-date date-decoded "-") | 136 | (date-to-time (timezone-make-date-arpa-standard date nil tz)))) |
| 147 | " " | ||
| 148 | (icalendar--datetime-to-colontime date-decoded)))) | ||
| 149 | 137 | ||
| 150 | (defun gnus-icalendar-event--find-attendee (ical name-or-email) | 138 | (defun gnus-icalendar-event--find-attendee (ical name-or-email) |
| 151 | (let* ((event (car (icalendar--all-events ical))) | 139 | (let* ((event (car (icalendar--all-events ical))) |
| @@ -166,7 +154,6 @@ | |||
| 166 | 154 | ||
| 167 | (defun gnus-icalendar-event-from-ical (ical &optional attendee-name-or-email) | 155 | (defun gnus-icalendar-event-from-ical (ical &optional attendee-name-or-email) |
| 168 | (let* ((event (car (icalendar--all-events ical))) | 156 | (let* ((event (car (icalendar--all-events ical))) |
| 169 | (zone-map (icalendar--convert-all-timezones ical)) | ||
| 170 | (organizer (replace-regexp-in-string | 157 | (organizer (replace-regexp-in-string |
| 171 | "^.*MAILTO:" "" | 158 | "^.*MAILTO:" "" |
| 172 | (or (icalendar--get-event-property event 'ORGANIZER) ""))) | 159 | (or (icalendar--get-event-property event 'ORGANIZER) ""))) |
| @@ -180,8 +167,8 @@ | |||
| 180 | (gnus-icalendar-event--find-attendee ical attendee-name-or-email))) | 167 | (gnus-icalendar-event--find-attendee ical attendee-name-or-email))) |
| 181 | (args (list :method method | 168 | (args (list :method method |
| 182 | :organizer organizer | 169 | :organizer organizer |
| 183 | :start (gnus-icalendar-event--decode-datefield event 'DTSTART zone-map) | 170 | :start-time (gnus-icalendar-event--decode-datefield event 'DTSTART) |
| 184 | :end (gnus-icalendar-event--decode-datefield event 'DTEND zone-map) | 171 | :end-time (gnus-icalendar-event--decode-datefield event 'DTEND) |
| 185 | :rsvp (string= (plist-get (cadr attendee) 'RSVP) | 172 | :rsvp (string= (plist-get (cadr attendee) 'RSVP) |
| 186 | "TRUE"))) | 173 | "TRUE"))) |
| 187 | (event-class (cond | 174 | (event-class (cond |
| @@ -363,10 +350,10 @@ Return nil for non-recurring EVENT." | |||
| 363 | "Build `org-mode' timestamp from EVENT start/end dates and recurrence info." | 350 | "Build `org-mode' timestamp from EVENT start/end dates and recurrence info." |
| 364 | (let* ((start (gnus-icalendar-event:start-time event)) | 351 | (let* ((start (gnus-icalendar-event:start-time event)) |
| 365 | (end (gnus-icalendar-event:end-time event)) | 352 | (end (gnus-icalendar-event:end-time event)) |
| 366 | (start-date (format-time-string "%Y-%m-%d %a" start t)) | 353 | (start-date (format-time-string "%Y-%m-%d %a" start)) |
| 367 | (start-time (format-time-string "%H:%M" start t)) | 354 | (start-time (format-time-string "%H:%M" start)) |
| 368 | (end-date (format-time-string "%Y-%m-%d %a" end t)) | 355 | (end-date (format-time-string "%Y-%m-%d %a" end)) |
| 369 | (end-time (format-time-string "%H:%M" end t)) | 356 | (end-time (format-time-string "%H:%M" end)) |
| 370 | (org-repeat (gnus-icalendar-event:org-repeat event)) | 357 | (org-repeat (gnus-icalendar-event:org-repeat event)) |
| 371 | (repeat (if org-repeat (concat " " org-repeat) ""))) | 358 | (repeat (if org-repeat (concat " " org-repeat) ""))) |
| 372 | 359 | ||