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 = Query.with_id event_id in
7 let* results = Query.query_events ~fs calendar_dir ~filter () in
8 let* event =
9 match results with
10 | [ event ] -> Ok event
11 | [] -> Error (`Msg ("No events found found for id " ^ event_id))
12 | _ -> Error (`Msg ("More than one found for id " ^ event_id))
13 in
14 let result = Calendar_dir.delete_event ~fs calendar_dir event in
15 match result with
16 | Error (`Msg msg) -> Error (`Msg msg)
17 | Ok () ->
18 Printf.printf "Event %s successfully deleted.\n" event_id;
19 Ok ()
20
21let event_id_arg =
22 let doc = "ID of the event to delete" in
23 Arg.(required & pos 0 (some string) None & info [] ~docv:"EVENT_ID" ~doc)
24
25let cmd ~fs calendar_dir =
26 let run event_id =
27 match run ~event_id ~fs calendar_dir with
28 | Error (`Msg msg) ->
29 Printf.eprintf "Error: %s\n%!" msg;
30 1
31 | Ok () -> 0
32 in
33 let term = Term.(const run $ event_id_arg) in
34 let doc = "Delete a calendar event" in
35 let man =
36 [
37 `S Manpage.s_description;
38 `P "Delete an event from your calendar by its ID.";
39 `P "You can find event IDs by using the `list` or `search` commands.";
40 `S Manpage.s_examples;
41 `P "Delete an event:";
42 `P " caled delete 12345678-1234-5678-1234-567812345678";
43 ]
44 in
45 let info = Cmd.info "delete" ~doc ~man in
46 Cmd.v info term