aboutsummaryrefslogtreecommitdiff
path: root/vcalendar
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2019-03-05 21:26:51 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2019-03-05 21:26:51 +0100
commit0a2d461cc49a918bc3d8e8013e78d6d894d780ab (patch)
treee908b5eafc059c15591f7b2a35fe3b49d114df1c /vcalendar
parentAdd date-add to srfi srfi-19 util. (diff)
downloadcalp-0a2d461cc49a918bc3d8e8013e78d6d894d780ab.tar.gz
calp-0a2d461cc49a918bc3d8e8013e78d6d894d780ab.tar.xz
Work on recuring event stream.
Diffstat (limited to 'vcalendar')
-rw-r--r--vcalendar/recur.scm32
1 files changed, 32 insertions, 0 deletions
diff --git a/vcalendar/recur.scm b/vcalendar/recur.scm
index 169a2883..d4d88593 100644
--- a/vcalendar/recur.scm
+++ b/vcalendar/recur.scm
@@ -1,7 +1,9 @@
(define-module (vcalendar recur)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9 gnu)
+ #:use-module (srfi srfi-19 util)
#:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-41)
#:use-module (vcalendar datetime)
#:use-module (util)
#:export (<recur-rule> build-recur-rules))
@@ -89,6 +91,7 @@
#,@(cc #'((key val proc) ...))
(else (call/cc (lambda (cont) (throw 'unknown-key cont obj var-key)))))))))))
+
(define (%build-recur-rules str)
(fold-lists
(lambda ((key val) obj)
@@ -112,3 +115,32 @@
((record-constructor <recur-rule> '(interval wkst)) 1 'MO)
(map (cut string-split <> #\=)
(string-split str #\;))))
+
+
+(define (generate-next event rule)
+ (match rule
+ (($ <recur-rule> freq until count interval bysecond byminute byhour wkst)
+ (case freq
+ ((WEEKLY)
+ ;; TODO implement copy-event
+ (let ((new-event (copy-event event)))
+ (transform-attr! (date new-event)
+ (cut date-add <> 1 weeks)))))
+
+ ))
+
+ )
+
+(define-stream (recur-event-stream event rule-obj)
+ (stream-cons event
+ (receive (next-event next-obj) (generate-next event rule-obj)
+ (recur-event-stream next-event next-rule))))
+
+(define (recur-event event)
+ (recur-event-stream event (build-recur-rules (get-attr event "RRULE"))))
+
+
+
+(define tzero (make-time time-utc 0 0))
+(define dzero (time-utc->date tzero))
+