···
{ collection; file; event; calendar }
let events_of_icalendar collection ~file calendar =
123
-
| `Event event -> Some { collection; file; event; calendar } | _ -> None)
121
+
let remove_dup_ids lst =
122
+
let rec aux acc = function
125
+
if List.exists (fun r -> r.uid = x.uid) acc then aux acc xs
126
+
else aux (x :: acc) xs
132
+
(function `Event event -> Some event | _ -> None)
135
+
let events = remove_dup_ids events in
136
+
List.map (function event -> { collection; file; event; calendar }) events
let to_ical_event t = t.event
let to_ical_calendar t = t.calendar
···
let get_recurrence t = Option.map (fun r -> snd r) t.event.rrule
let get_collection t = t.collection
204
-
let get_recurrence_ids t =
205
-
let _, recurrence_ids =
207
-
List.partition (function `Event _ -> true | _ -> false) (snd t.calendar)
209
-
| `Event hd :: tl, _ ->
210
-
(hd, List.map (function `Event e -> e | _ -> assert false) tl)
211
-
| _ -> assert false
type comparator = t -> t -> int
···
let ical_event = to_ical_event event in
630
-
let recurrence_ids = get_recurrence_ids event in
631
-
Fmt.pr "Event:\n%s\n" (format_event ~format:`Entries (clone_with_event event ical_event));
632
-
List.iter (fun e ->
633
-
Fmt.pr "Recurrent ID event:\n%s\n" (format_event ~format:`Entries (clone_with_event event e))) recurrence_ids;
634
-
recur_events ~recurrence_ids ical_event
631
+
(* The first event is the non recurrence-id one *)
632
+
let _, other_events =
635
+
(function `Event _ -> true | _ -> false)
636
+
(snd event.calendar)
638
+
| `Event hd :: tl, _ ->
639
+
(hd, List.map (function `Event e -> e | _ -> assert false) tl)
640
+
| _ -> assert false
642
+
Fmt.pr "Event:\n%s\n"
643
+
(format_event ~format:`Entries (clone_with_event event ical_event));
646
+
Fmt.pr "Recurrent ID event:\n%s\n"
647
+
(format_event ~format:`Entries (clone_with_event event e)))
649
+
(* Icalendar filters for equal uids *)
650
+
recur_events ~recurrence_ids:other_events ical_event