New subcommand 'recent'. Tidy last.ml

This commit is contained in:
orbifx 2022-10-21 20:53:46 +01:00
parent e471b6c9c2
commit 93be78f7c9
4 changed files with 41 additions and 17 deletions

View File

@ -1,5 +1,5 @@
(executable
(name txt)
(public_name txt)
(modules txt authors convert conversion file index last listing new topics html atom gemini publish pull read)
(modules txt authors convert conversion file index last listing new topics html atom gemini publish pull read recent)
(libraries text_parse.converter text_parse.parsers logarion msgpck curl str cmdliner))

View File

@ -1,24 +1,28 @@
open Logarion
let last a ((t,_) as pair) = match a with
| None -> Some pair
| Some (t', _) as pair' ->
if Text.newest t t' > 0 then Some pair else pair'
let last_mine a ((t, _) as pair) =
let name = Person.Set.of_string (Sys.getenv "USER") in
let open Text in
match a with
| None -> if Person.Set.subset name t.authors then Some pair else None
| Some (t', _) as pair' ->
if Text.newest t t' > 0 && Person.Set.subset name t'.authors
then Some pair else pair'
let last search_mine =
let last a ((t,_) as pair) = match a with None -> Some pair
| Some (t', _) as pair' -> if Text.newest t t' > 0
then Some pair else pair' in
let last_mine a ((t,_) as pair) =
let name = Person.Set.of_string (Sys.getenv "USER") in
let open Text in
match a with
| None -> if Person.Set.subset name t.authors then Some pair else None
| Some (t', _) as pair' ->
if Text.newest t t' > 0 && Person.Set.subset name t'.authors
then Some pair else pair'
in
match File_store.fold (if search_mine then last_mine else last) None with
| Some (_,f) -> List.iter print_endline f | None -> ()
let filter = if search_mine then last_mine else last in
match File_store.fold filter None with
| None -> ()
| Some (_, f) -> List.iter print_endline f
open Cmdliner
let term =
let mine = Arg.(value & flag & info ["mine"]
~doc:"last text authored by me") in
let mine = Arg.(value & flag & info ["mine"] ~doc:"last text authored by me") in
Term.(const last $ mine),
Term.info "last" ~doc:"most recent text"
~man:[ `S "DESCRIPTION"; `P "Print the filename of most recent text" ]

19
cli/recent.ml Normal file
View File

@ -0,0 +1,19 @@
open Logarion
module FS = File_store
module A = Archive
open Cmdliner
let term =
let recurse = Arg.(value & flag & info ["R"] ~doc:"recurse, include subdirs") in
let reverse = Arg.(value & flag & info ["r"] ~doc:"reverse order") in
let paths = Arg.(value & flag & info ["p"] ~doc:"show file paths") in
let number = Arg.(value & opt (some int) (Some 10) & info ["n"]
~docv:"number" ~doc:"number of entries to list") in
let authed = Arg.(value & opt (some string) None & info ["authored"]
~docv:"comma-separated names" ~doc:"texts by authors") in
let topics = Arg.(value & opt (some string) None & info ["topics"]
~docv:"comma-separated topics" ~doc:"texts with topics") in
Term.(const Listing.listing $ recurse $ (const true) $ reverse $ number $ paths $ authed $ topics),
Term.info "recent" ~doc:"list recent texts" ~man:[ `S "DESCRIPTION";
`P "List header information of most recent texts. If -R is used, list header
information for texts found in subdirectories too, along with their filepaths" ]

View File

@ -17,5 +17,6 @@ let () = match Term.eval_choice default_cmd [
Publish.term;
Pull.term;
Read.term;
Recent.term;
Topics.term;
] with `Error _ -> exit 1 | _ -> exit 0