diff options
Diffstat (limited to 'module/vcomponent.scm')
-rw-r--r-- | module/vcomponent.scm | 58 |
1 files changed, 26 insertions, 32 deletions
diff --git a/module/vcomponent.scm b/module/vcomponent.scm index c1ee0e23..bda9d58c 100644 --- a/module/vcomponent.scm +++ b/module/vcomponent.scm @@ -23,42 +23,36 @@ "Parse all start times into scheme date objects." (for ev in (filter (lambda (o) (eq? 'VEVENT (type o))) (children cal)) - (let ((tz (getenv "TZ"))) - (aif (prop (attr* ev 'DTSTART) 'TZID) - (setenv "TZ" (car it)) - (unsetenv "TZ")) - (let* - ((dptr (attr* ev 'DTSTART)) - (eptr (attr* ev 'DTEND)) + (let-env ((TZ (and=> (prop (attr* ev 'DTSTART) 'TZID) car))) + (let* + ((dptr (attr* ev 'DTSTART)) + (eptr (attr* ev 'DTEND)) - (date (parse-datetime (value dptr))) - (end-date - (cond ;; [(attr ev 'DURATION) => (lambda (d) (add-duration ...))] - [(not eptr) - (let ((d (set (date-hour date) = (+ 1)))) - (set! (attr ev 'DTEND) d - eptr (attr* ev 'DTEND)) - d)] - [(value eptr) => parse-datetime] - [else - (set (date-hour date) = (+ 1))]))) + (date (parse-datetime (value dptr))) + (end-date + (cond ;; [(attr ev 'DURATION) => (lambda (d) (add-duration ...))] + [(not eptr) + (let ((d (set (date-hour date) = (+ 1)))) + (set! (attr ev 'DTEND) d + eptr (attr* ev 'DTEND)) + d)] + [(value eptr) => parse-datetime] + [else + (set (date-hour date) = (+ 1))]))) - (set! (value dptr) (date->time-utc date) - (value eptr) (date->time-utc end-date)) + (set! (value dptr) (date->time-utc date) + (value eptr) (date->time-utc end-date)) - (when (prop (attr* ev 'DTSTART) 'TZID) - ;; Re-align date to have correect timezone. This is since time->date gives - ;; correct, but the code above may (?) fail to update the timezone. - (set! (zone-offset date) (zone-offset (time-utc->date (value dptr))) - (value dptr) (date->time-utc date) + (when (prop (attr* ev 'DTSTART) 'TZID) + ;; Re-align date to have correect timezone. This is since time->date gives + ;; correct, but the code above may (?) fail to update the timezone. + (set! (zone-offset date) (zone-offset (time-utc->date (value dptr))) + (value dptr) (date->time-utc date) - ;; The standard says that DTEND must have the same - ;; timezone as DTSTART. Here we trust that blindly. - (zone-offset end-date) (zone-offset date) - (value eptr) (date->time-utc end-date)))) - - - (setenv "TZ" tz)))) + ;; The standard says that DTEND must have the same + ;; timezone as DTSTART. Here we trust that blindly. + (zone-offset end-date) (zone-offset date) + (value eptr) (date->time-utc end-date))))))) (define* (parse-calendar path) |