diff options
Diffstat (limited to 'src/ics.ml')
-rw-r--r-- | src/ics.ml | 49 |
1 files changed, 42 insertions, 7 deletions
@@ -17,10 +17,45 @@ open CalendarLib -type event = { - start: Calendar.t; - stop: Calendar.t; - summary: string; - category: string; - location: string - } +let to_date = Printer.Calendar.sprint "%Y%m%dT%H%M%SZ" +let current_date () = to_date @@ Calendar.now () + +module Event = struct + type t = { + start: Calendar.t; + stop: Calendar.t; + summary: string; + location: string; + } + + let make start stop summary location = + {start; stop; summary; location} + + let to_string date event id = + Printf.sprintf "BEGIN:VEVENT\n\ + UID:%s.%d@ucs.pa1ch.fr\n\ + DTSTART:%s\n\ + DTEND:%s\n\ + DTSTAMP:%s\n\ + SUMMARY:%s\n\ + LOCATION:%s\n\ + END:VEVENT\n" + date id (to_date event.start) (to_date event.stop) + date event.summary event.location +end + +type t = Event.t list + +let make (events: t) = events + +let to_string events = + let date = current_date () in + let rec gen_events id str = function + | [] -> str + | event :: l -> + gen_events (id + 1) (str ^ Event.to_string date event id) l in + "BEGIN:VCALENDAR\n\ + VERSION:2.0\n\ + PRODID:-//ucs//\n" + ^ gen_events 0 "" events + ^ "END:VCALENDAR\n" |