blob: 290a8d3e8e0f2758988faf1b6d817dedd9d7c597 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
(define-module (vcomponent parse)
:use-module (util)
:use-module (vcomponent base)
:use-module ((vcomponent vdir parse) :select (parse-vdir))
:use-module ((util time) :select (report-time!))
:use-module (vcomponent ical parse)
:re-export (parse-calendar)
)
;; Parse a vdir or ics file at the given path.
(define-public (parse-cal-path path)
;; TODO check (access? path R_OK) ?
(define st (stat path))
(define cal
(case (stat:type st)
[(regular)
(let ((comp (call-with-input-file path parse-calendar)))
(set! (prop comp '-X-HNH-SOURCETYPE) 'file)
comp) ]
[(directory)
(report-time! "Parsing ~a" path)
(let ((comp (parse-vdir path)))
(set! (prop comp '-X-HNH-SOURCETYPE) 'vdir
(prop comp '-X-HNH-DIRECTORY) path)
comp)]
[(block-special char-special fifo socket unknown symlink)
=> (lambda (t) (error "Can't parse file of type " t))]))
(unless (prop cal "NAME")
(set! (prop cal "NAME")
(or (prop cal "X-WR-CALNAME")
(string-append "[" (basename path) "]"))))
cal)
|