blob: abe02a9fe18496b2b7f0914445f843fe2820adb9 (
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
36
37
38
39
|
;;; Commentary:
;;; Module for writing components to the vdir storage format.
;;; Currently also has some cases for "big" icalendar files,
;;; but those are currently unsupported.
;;; Code:
(define-module (output vdir)
:use-module (util)
:use-module (output ical)
:use-module (vcomponent)
)
(define / file-name-separator-string)
(define-public (save-event event)
(define calendar (parent event))
(case (prop calendar 'X-HNH-SOURCETYPE)
[(file)
(error "Importing into direct calendar files not supported")]
[(vdir)
(let* ((uid (or (prop event 'UID) (uuidgen)))
;; copy to enusre writable string
(tmpfile (string-copy (string-append (prop calendar 'X-HNH-DIRECTORY)
/ ".calp-" uid "XXXXXX")))
(port (mkstemp! tmpfile)))
(set! (prop event 'UID) uid)
(with-output-to-port port
(lambda () (print-components-with-fake-parent (list event))))
;; does close flush?
(force-output port)
(close-port port)
(rename-file tmpfile (string-append (prop calendar 'X-HNH-DIRECTORY)
/ uid ".ics"))
uid)]
[else
(error "Source of calendar unknown, aborting.")
]))
|