···
(Fmt.str "Failed to list calendar directory %s: %a" calendar_dir.path
45
-
let load_events calendar_name calendar_name_path file_name =
46
-
let file = Eio.Path.(calendar_name_path / file_name) in
47
-
let _, file_path = file in
48
-
match Filename.check_suffix file_name ".ics" with
52
-
let content = Eio.Path.load file in
53
-
match parse content with
54
-
| Ok calendar -> Event.events_of_icalendar ~file calendar_name calendar
56
-
Printf.eprintf "Failed to parse %s: %s\n%!" file_path err;
58
-
with Eio.Exn.Io _ as exn ->
59
-
Fmt.epr "Failed to read file %s: %a\n%!" file_path Eio.Exn.pp exn;
45
+
let rec load_events_recursive calendar_name dir_path =
47
+
Eio.Path.read_dir dir_path
50
+
let path = Eio.Path.(dir_path / name) in
51
+
if Eio.Path.is_directory path then
52
+
acc @ load_events_recursive calendar_name path
53
+
else if Filename.check_suffix name ".ics" then
55
+
let content = Eio.Path.load path in
56
+
match parse content with
57
+
| Ok calendar -> acc @ Event.events_of_icalendar ~file:path calendar_name calendar
59
+
Printf.eprintf "Failed to parse %s: %s\n%!" (snd path) err;
61
+
with Eio.Exn.Io _ as exn ->
62
+
Fmt.epr "Failed to read file %s: %a\n%!" (snd path) Eio.Exn.pp exn;
66
+
with Eio.Exn.Io _ as exn ->
67
+
Fmt.epr "Failed to read directory %s: %a\n%!" (snd dir_path) Eio.Exn.pp exn;
let get_calendar_events ~fs calendar_dir calendar_name =
match CalendarMap.find_opt calendar_name calendar_dir.calendar_names with
···
if not (Eio.Path.is_directory calendar_name_path) then Error `Not_found
72
-
let files = Eio.Path.read_dir calendar_name_path in
75
-
@@ List.map (load_events calendar_name calendar_name_path) files
80
+
let events = load_events_recursive calendar_name calendar_name_path in
calendar_dir.calendar_names <-
CalendarMap.add calendar_name events calendar_dir.calendar_names;