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