aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2019-11-04 17:08:38 +0100
committerHugo Hörnquist <hugo@hornquist.se>2019-11-05 11:21:25 +0100
commit4080b0c7e97acb7357a7ab85589b324e382e0d47 (patch)
tree3ed5e38c94ee306311d497cda397cab38d173e73 /module/vcomponent.scm
parentFurther cleanup in (vcomponent). (diff)
downloadcalp-4080b0c7e97acb7357a7ab85589b324e382e0d47.tar.gz
calp-4080b0c7e97acb7357a7ab85589b324e382e0d47.tar.xz
Add let-env.
Diffstat (limited to 'module/vcomponent.scm')
-rw-r--r--module/vcomponent.scm58
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)