Command-line and Emacs Calendar Client
1open Cmdliner
2open Caledonia_lib
3
4let run ~event_id ~fs calendar_dir =
5 let ( let* ) = Result.bind in
6 let filter = Event.with_id event_id in
7 let* events = Calendar_dir.get_events ~fs calendar_dir in
8 let events = Event.query_without_recurrence events ~filter () in
9 let* event =
10 match events with
11 | [ event ] -> Ok event
12 | [] -> Error (`Msg ("No events found found for id " ^ event_id))
13 | _ -> Error (`Msg ("More than one found for id " ^ event_id))
14 in
15 let result = Calendar_dir.delete_event ~fs calendar_dir events event in
16 match result with
17 | Error (`Msg msg) -> Error (`Msg msg)
18 | Ok _ ->
19 Printf.printf "Event %s successfully deleted.\n" event_id;
20 Ok ()
21
22let event_id_arg =
23 let doc = "ID of the event to delete" in
24 Arg.(required & pos 0 (some string) None & info [] ~docv:"EVENT_ID" ~doc)
25
26let cmd ~fs calendar_dir =
27 let run event_id () =
28 match run ~event_id ~fs calendar_dir with
29 | Error (`Msg msg) ->
30 Printf.eprintf "Error: %s\n%!" msg;
31 1
32 | Ok () -> 0
33 in
34 let term = Term.(const run $ event_id_arg) in
35 let doc = "Delete a calendar event" in
36 let man =
37 [
38 `S Manpage.s_description;
39 `P "Delete an event from your calendar by its ID.";
40 `P "You can find event IDs by using the `list` or `search` commands.";
41 `S Manpage.s_examples;
42 `P "Delete an event:";
43 `P " caled delete 12345678-1234-5678-1234-567812345678";
44 `S Manpage.s_options;
45 ]
46 @ [ `S Manpage.s_see_also ]
47 in
48 let exit_info =
49 [ Cmd.Exit.info ~doc:"on success." 0; Cmd.Exit.info ~doc:"on error." 1 ]
50 in
51 let info = Cmd.info "delete" ~doc ~man ~exits:exit_info in
52 Cmd.v info term