aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/load.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2019-12-24 01:06:43 +0100
committerHugo Hörnquist <hugo@hornquist.se>2019-12-24 01:06:43 +0100
commit54bc4d547361a065f283720e6c0aee5fcb9268a8 (patch)
tree2f0cd3b1814bc036301a63880d0740b447af4143 /module/vcomponent/load.scm
parentFix ical outuput for with recurrence-id:s. (diff)
downloadcalp-54bc4d547361a065f283720e6c0aee5fcb9268a8.tar.gz
calp-54bc4d547361a065f283720e6c0aee5fcb9268a8.tar.xz
ICAL handling of events different from display handling.
Previously repeating events where always instantiated to a stream of all events to come (possibly infinite), and then zipped with the list of regular events to create a stream of all events in the world. This commit allows access to the raw lists of parsed regular and repeating events before they are extrapolated and merged.
Diffstat (limited to 'module/vcomponent/load.scm')
-rw-r--r--module/vcomponent/load.scm38
1 files changed, 23 insertions, 15 deletions
diff --git a/module/vcomponent/load.scm b/module/vcomponent/load.scm
index fb25732d..2d339c64 100644
--- a/module/vcomponent/load.scm
+++ b/module/vcomponent/load.scm
@@ -1,5 +1,5 @@
(define-module (vcomponent load)
- :export (load-calendars)
+ :export (load-calendars load-calendars*)
:use-module (util)
:use-module (srfi srfi-1)
:use-module (srfi srfi-19)
@@ -13,12 +13,23 @@
:use-module ((vcomponent datetime) :select (ev-time<?)))
-;; Reads all calendar files from disk, and creates a list of "regular" events,
-;; and a stream of "repeating" events, which are passed in that order to the
-;; given procedure @var{proc}.
-;;
-;; Given as a sepparate function from main to ease debugging.
+;; Reads all calendar files from disk, generate recurence-sets for all repeating events,
+;; and returns a list of calendars, and a stream of all events "ready" for display.
(define* (load-calendars #:key (calendar-files (calendar-files)))
+ (let* ((calendars regular repeating (load-calendars* calendar-files: calendar-files)))
+ (values
+ calendars
+ (interleave-streams
+ ev-time<?
+ (cons (list->stream regular)
+ (map generate-recurrence-set repeating))))))
+
+;; Basic version, loads calendrs, sorts the events, and returns
+;; regular and repeating events separated from each other.
+;;
+;; (list string) → (list calendar), (list event), (list event)
+(define* (load-calendars* #:key (calendar-files (calendar-files)))
+
(define calendars (map parse-cal-path calendar-files))
(define events (concatenate
;; TODO does this drop events?
@@ -28,12 +39,9 @@
(let* ((repeating regular (partition repeating? events)))
- (set! repeating (sort*! repeating time<? (extract 'DTSTART))
- regular (sort*! regular time<? (extract 'DTSTART)))
-
- (values
- calendars
- (interleave-streams
- ev-time<?
- (cons (list->stream regular)
- (map generate-recurrence-set repeating))))))
+ ;; NOTE There might be instances where we don't care if the
+ ;; collection if sorted, but for the time beieng it's much
+ ;; easier to always sort it.
+ (values calendars
+ (sort*! regular time<? (extract 'DTSTART))
+ (sort*! repeating time<? (extract 'DTSTART)))))