Command-line and Emacs Calendar Client
at main 1.7 kB view raw
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