diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/course.ml | 52 | ||||
-rw-r--r-- | src/ics.ml | 8 | ||||
-rw-r--r-- | src/ics.mli | 4 |
3 files changed, 39 insertions, 25 deletions
diff --git a/src/course.ml b/src/course.ml index 52aa062..4b9c914 100644 --- a/src/course.ml +++ b/src/course.ml @@ -1,5 +1,5 @@ (* - * Copyright (C) 2020 Alban Gruin + * Copyright (C) 2020, 2021 Alban Gruin * * ucs is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published @@ -48,18 +48,31 @@ let replace_entities str = type loc_and_sum = | Nothing - | Groups - | Location of string - | Summary of string * string - -let loc_and_sum_to_str category = function - | Nothing | Groups -> "", category - | Location location -> location, category - | Summary (location, summary) -> - let summary = match Astring.String.cut ~sep:" - " summary with - | None -> summary - | Some (_, str) -> str in - location, summary ^ " (" ^ category ^ ")" + | Groups of string list + | Location of string list * string + | Summary of string list * string * string + +let loc_and_sum_to_groups = function + | Nothing -> [] + | Groups groups | Location (groups, _) | Summary (groups, _, _) -> groups + +let loc_and_sum_to_location = function + | Nothing | Groups _ -> "" + | Location (_, location) | Summary (_, location, _) -> location + +let loc_and_sum_to_summary category = function + | Nothing | Groups _ | Location _ -> category + | Summary (_, _, summary) -> + let summary = match Astring.String.cut ~sep:" - " summary with + | None -> summary + | Some (_, str) -> str in + summary ^ " (" ^ category ^ ")" + +let loc_and_sum_to_event start stop category loc_and_sum = + let groups = loc_and_sum_to_groups loc_and_sum and + location = loc_and_sum_to_location loc_and_sum and + summary = loc_and_sum_to_summary category loc_and_sum in + Some (Ics.Event.make start stop summary location groups) let check_groups str = let group_affixes = ["L1 "; "L2 "; "L3 "; "L3P "; "M1 "; "M2 "; "DEUST "; @@ -68,20 +81,19 @@ let check_groups str = if List.fold_left (fun res affix -> res || Astring.String.is_prefix ~affix str) false group_affixes then - Groups + Groups (Astring.String.cuts ~empty:false ~sep:"<br />" @@ replace_entities str) else Nothing -let location_and_summary str category = +let location_and_summary str = let sep = "\r\n\r\n<br />\r\n\r\n" in let parts = Astring.String.cuts ~empty:false ~sep str in List.fold_right (fun str -> function | Nothing -> check_groups str - | Groups -> Location (replace_entities str) - | Location summary -> Summary (replace_entities str, summary) + | Groups groups -> Location (groups, replace_entities str) + | Location (groups, summary) -> Summary (groups, replace_entities str, summary) | Summary _ as res -> res) parts Nothing - |> loc_and_sum_to_str category let date = let date_format = "%FT%T" in @@ -92,10 +104,10 @@ let encoding = J.(conv (fun _ -> (None, None, "", ""), ()) (fun ((start, stop, description, category), ()) -> - let location, summary = location_and_summary description category in match start, stop with | Some start, Some stop -> - Some (Ics.Event.make start stop summary location) + let loc_and_sum = location_and_summary description in + loc_and_sum_to_event start stop category loc_and_sum | _, _ -> None) (merge_objs (obj4 @@ -1,5 +1,5 @@ (* - * Copyright (C) 2020 Alban Gruin + * Copyright (C) 2020, 2021 Alban Gruin * * ucs is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published @@ -39,10 +39,11 @@ module Event = struct stop: Calendar.t; summary: string; location: string; + groups: string list; } - let make start stop summary location = - {start; stop; summary; location} + let make start stop summary location groups = + {start; stop; summary; location; groups} let to_string date event id = ["BEGIN:VEVENT"; @@ -51,6 +52,7 @@ module Event = struct "DTEND:" ^ to_date event.stop; "DTSTAMP:" ^ date; "SUMMARY:" ^ event.summary; + "COMMENT:" ^ String.concat ", " event.groups; "LOCATION:" ^ event.location; "END:VEVENT\n"] |> List.map ics_split_line diff --git a/src/ics.mli b/src/ics.mli index a4cbbd6..ca09406 100644 --- a/src/ics.mli +++ b/src/ics.mli @@ -1,5 +1,5 @@ (* - * Copyright (C) 2020 Alban Gruin + * Copyright (C) 2020, 2021 Alban Gruin * * ucs is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published @@ -19,7 +19,7 @@ module Event : sig type t val make : CalendarLib.Calendar.t -> CalendarLib.Calendar.t -> - string -> string -> t + string -> string -> string list -> t val to_string : string -> t -> int -> string end |