aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/group.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/vcomponent/group.scm')
-rw-r--r--module/vcomponent/group.scm14
1 files changed, 11 insertions, 3 deletions
diff --git a/module/vcomponent/group.scm b/module/vcomponent/group.scm
index c5b6948e..46160a3a 100644
--- a/module/vcomponent/group.scm
+++ b/module/vcomponent/group.scm
@@ -5,8 +5,9 @@
#:use-module (srfi srfi-19 util)
#:use-module (srfi srfi-41)
#:use-module (srfi srfi-41 util)
- #:export (group-stream))
+ #:export (group-stream get-groups-between))
+;; TODO templetize this
(define-stream (group-stream in-stream)
(define (ein? day) (lambda (e) (event-contains? e (date->time-utc day))))
@@ -15,19 +16,26 @@
(if (stream-null? stream)
stream-null
(let* ((day (stream-car days))
- (tomorow (add-day (date->time-utc (drop-time day)))))
+ (tomorow (date->time-utc (stream-car (stream-cdr days)))))
+
(let ((head (stream-take-while (ein? day) stream))
(tail
+ ;; This is a filter, instead of a stream-span together with head,
+ ;; since events can span multiple days.
+ ;; This starts with taking everything which end after the beginning
+ ;; of tommorow, and finishes with the rest when it finds the first
+ ;; object which begins tomorow (after midnight, exclusize).
(filter-sorted-stream*
(lambda (e) (time<? tomorow (attr e 'DTEND)))
(lambda (e) (time<=? tomorow (attr e 'DTSTART)))
stream)))
+
(stream-cons (cons day head)
(loop (stream-cdr days)
tail)))))))
-(define-public (get-groups-between groups start-date end-date)
+(define (get-groups-between groups start-date end-date)
(filter-sorted-stream
;; TODO in-date-range? drops the first date
(compose (in-date-range? start-date end-date)