Command-line and Emacs Calendar Client

better timezone validation

Ryan Gibb 3f02a7a7 de59b45c

Changed files
+33 -2
bin
lib
+1 -1
bin/add_cmd.ml
···
Term.(
const run $ required_summary_arg $ start_date_arg $ start_time_arg
$ end_date_arg $ end_time_arg $ location_arg $ description_arg $ recur_arg
-
$ calendar_name_arg $ timezone_arg $ end_time_arg)
+
$ calendar_name_arg $ timezone_arg $ end_timezone_arg)
in
let doc = "Add a new calendar event" in
let man =
+27
bin/event_args.ml
···
let parse_start ~start_date ~start_time ~timezone =
let ( let* ) = Result.bind in
+
let* _ =
+
match timezone with
+
| None -> Ok ()
+
| Some tzid -> (
+
match Timedesc.Time_zone.make tzid with
+
| Some _ -> Ok ()
+
| None ->
+
Error (`Msg (Printf.sprintf "Warning: Unknown timezone %s" tzid)))
+
in
match start_date with
| None ->
let* _ =
···
let parse_end ~end_date ~end_time ~timezone ~end_timezone =
let ( let* ) = Result.bind in
+
let* _ =
+
match timezone with
+
| None -> Ok ()
+
| Some tzid -> (
+
match Timedesc.Time_zone.make tzid with
+
| Some _ -> Ok ()
+
| None ->
+
Error (`Msg (Printf.sprintf "Warning: Unknown timezone %s" tzid)))
+
in
+
let* _ =
+
match end_timezone with
+
| None -> Ok ()
+
| Some tzid -> (
+
match Timedesc.Time_zone.make tzid with
+
| Some _ -> Ok ()
+
| None ->
+
Error (`Msg (Printf.sprintf "Warning: Unknown timezone %s" tzid)))
+
in
match end_date with
| None ->
let* _ =
+5 -1
lib/date.ml
···
let dt = Timedesc.of_date_and_time_exn ~tz date time in
timedesc_to_ptime dt
| `Datetime (`With_tzid (t, (_, tzid))) ->
-
let tz = Timedesc.Time_zone.make_exn tzid in
+
let tz =
+
match Timedesc.Time_zone.make tzid with
+
| Some tz -> tz
+
| None -> failwith (Printf.sprintf "Warning: Unknown timezone %s" tzid)
+
in
(* Icalendar gives us the Ptime in UTC, which we parse to a Timedesc *)
let ts = Timedesc.Utils.timestamp_of_ptime t in
let dt =