From 8a1dbbb0b3158cdd8870e8abbbf485b8bf84c505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Thu, 14 May 2020 17:44:39 +0200 Subject: Remove recurrence instances before our start date. --- module/vcomponent/recurrence/display/test.scm | 6 +++--- module/vcomponent/recurrence/generate-alt.scm | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/module/vcomponent/recurrence/display/test.scm b/module/vcomponent/recurrence/display/test.scm index 2e04adf7..bcfbaafe 100644 --- a/module/vcomponent/recurrence/display/test.scm +++ b/module/vcomponent/recurrence/display/test.scm @@ -20,7 +20,7 @@ (let ((count 0)) (lambda (comp) (mod! count = (+ 1)) - (format #t "~%~a > ~a~%" count (attr comp 'SUMMARY)) + (format #t "~%~a > \x1b[1m~a\x1b[m~%" count (attr comp 'SUMMARY)) (format #t "=> upprepas ~a.~%~{~a~^, ~}~%" (format-recurrence-rule (attr comp 'RRULE)) (map (lambda (d) (datetime->string d "~a ~1 ~3")) @@ -52,6 +52,8 @@ v) +;; TODO bysetpos + (map run-test (list (vevent @@ -304,8 +306,6 @@ Thursday, for the next 3 months" rrule: "FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO") ;; => "varannan tisdag & söndag, 4 gånger." - ;; TODO this starts one to early (and by consequence ends one to early) - ;; first instance should be the 5th. (vevent summary: "changing only WKST from MO to SU, yields different results..." dtstart: "19970805T090000" diff --git a/module/vcomponent/recurrence/generate-alt.scm b/module/vcomponent/recurrence/generate-alt.scm index a98d10db..77304b55 100644 --- a/module/vcomponent/recurrence/generate-alt.scm +++ b/module/vcomponent/recurrence/generate-alt.scm @@ -71,7 +71,6 @@ -;; TODO compliacted fields ;; rrule → (list extension-rule) (define (all-extenders rrule) (make-extenders @@ -345,7 +344,12 @@ (aif (attr* event 'EXDATE) (cut member <> (map value it)) (const #f)) - (generate-posibilities rrule (attr event 'DTSTART)) + ;; Some expanders can produce dates before our start time. + ;; For example FREQ=WEEKLY;BYDAY=MO where DTSTART is + ;; anything after monday. This filters these out. + (stream-drop-while + (lambda (d) (date/-time< d (attr event 'DTSTART))) + (generate-posibilities rrule (attr event 'DTSTART))) ;; TODO ideally I should merge the limited recurrence set ;; with the list of rdates here. However, I have never ;; sen an event with an RDATE attribute, so I wont worry -- cgit v1.2.3