summaryrefslogtreecommitdiffstats
path: root/bin/domain/imag-todo/src/ui.rs
diff options
context:
space:
mode:
Diffstat (limited to 'bin/domain/imag-todo/src/ui.rs')
-rw-r--r--bin/domain/imag-todo/src/ui.rs183
1 files changed, 161 insertions, 22 deletions
diff --git a/bin/domain/imag-todo/src/ui.rs b/bin/domain/imag-todo/src/ui.rs
index 073508cf..3299b7de 100644
--- a/bin/domain/imag-todo/src/ui.rs
+++ b/bin/domain/imag-todo/src/ui.rs
@@ -17,45 +17,184 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
-use clap::{Arg, App, ArgGroup, SubCommand};
+use std::path::PathBuf;
+use clap::{Arg, ArgMatches, App, SubCommand};
+use failure::Fallible as Result;
+
+use libimagstore::storeid::StoreId;
+use libimagstore::storeid::IntoStoreId;
+use libimagrt::runtime::IdPathProvider;
+
pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> {
app
- .subcommand(SubCommand::with_name("tw-hook")
- .about("For use in a taskwarrior hook")
+ .subcommand(SubCommand::with_name("create")
+ .about("Create task")
.version("0.1")
- .arg(Arg::with_name("add")
- .long("add")
- .short("a")
- .takes_value(false)
+ .arg(Arg::with_name("create-scheduled")
+ .long("scheduled")
+ .short("s")
+ .takes_value(true)
.required(false)
- .help("For use in an on-add hook"))
+ .help("Set a 'scheduled' date/time")
+ )
+
+ .arg(Arg::with_name("create-hidden")
+ .long("hidden")
+ .short("h")
+ .takes_value(true)
+ .required(false)
+ .help("Set a 'hidden' date/time")
+ )
- .arg(Arg::with_name("delete")
- .long("delete")
+ .arg(Arg::with_name("create-due")
+ .long("due")
.short("d")
+ .takes_value(true)
+ .required(false)
+ .help("Set a 'due' date/time")
+ )
+
+ .arg(Arg::with_name("create-prio")
+ .long("prio")
+ .short("p")
+ .takes_value(true)
+ .required(false)
+ .help("Set a priority")
+ .possible_values(&["h", "m", "l"])
+ )
+
+ .arg(Arg::with_name("create-status")
+ .long("status")
+ .takes_value(true)
+ .required(false)
+ .help("Set a status, useful if the task is already done")
+ .default_value("pending")
+ .possible_values(&["pending", "done", "deleted"])
+ )
+
+ .arg(Arg::with_name("create-edit")
+ .long("edit")
+ .short("e")
.takes_value(false)
.required(false)
- .help("For use in an on-delete hook"))
+ .help("Create and then edit the entry")
+ )
+
+ .arg(Arg::with_name("text")
+ .index(1)
+ .multiple(true)
+ .required(true)
+ .help("Text for the todo")
+ )
+ )
- .group(ArgGroup::with_name("taskwarrior hooks")
- .args(&[ "add",
- "delete",
- ])
- .required(true))
+ .subcommand(SubCommand::with_name("pending")
+ .arg(Arg::with_name("todos")
+ .index(1)
+ .takes_value(true)
+ .required(false)
+ .help("List pending todos (same as 'list' command without arguments)")
+ )
)
.subcommand(SubCommand::with_name("list")
- .about("List all tasks")
+ .about("List tasks (default)")
.version("0.1")
- .arg(Arg::with_name("verbose")
- .long("verbose")
- .short("v")
+ .arg(Arg::with_name("list-table")
+ .long("table")
+ .short("T")
.takes_value(false)
.required(false)
- .help("Asks taskwarrior for all the details")
+ .help("Print a nice ascii-table")
)
- )
+
+ .arg(Arg::with_name("list-hidden")
+ .long("hidden")
+ .short("H")
+ .takes_value(false)
+ .required(false)
+ .help("Print also hidden todos")
+ )
+
+ .arg(Arg::with_name("list-done")
+ .long("done")
+ .short("D")
+ .takes_value(false)
+ .required(false)
+ .help("Print also done todos")
+ )
+
+ .arg(Arg::with_name("list-nopending")
+ .long("no-pending")
+ .short("P")
+ .takes_value(false)
+ .required(false)
+ .help("Do not print pending tasks")
+ )
+
+ )
+
+ .subcommand(SubCommand::with_name("show")
+ .arg(Arg::with_name("todos")
+ .index(1)
+ .takes_value(true)
+ .required(false)
+ .help("Show the passed todos")
+ )
+ )
+
+ .subcommand(SubCommand::with_name("mark")
+ .about("Mark tasks as pending, done or deleted")
+ .version("0.1")
+
+ .subcommand(SubCommand::with_name("pending")
+ .arg(Arg::with_name("todos")
+ .index(1)
+ .takes_value(true)
+ .required(false)
+ .help("List pending todos (same as 'list' command without arguments)")
+ )
+ )
+
+ .subcommand(SubCommand::with_name("done")
+ .arg(Arg::with_name("todos")
+ .index(1)
+ .takes_value(true)
+ .required(false)
+ .help("Mark the passed todos as done")
+ )
+ )
+
+ .subcommand(SubCommand::with_name("deleted")
+ .arg(Arg::with_name("todos")
+ .index(1)
+ .takes_value(true)
+ .required(false)
+ .help("Mark the passed todos as deleted")
+ )
+ )
+ )
+
}
+
+pub struct PathProvider;
+impl IdPathProvider for PathProvider {
+ fn get_ids(matches: &ArgMatches) -> Result<Option<Vec<StoreId>>> {
+ match matches.subcommand() {
+ ("show", Some(scmd)) => scmd.values_of("todos"),
+ ("show", None) => unimplemented!(),
+ _ => unimplemented!()
+ }
+ .map(|v| v
+ .into_iter()
+ .map(PathBuf::from)
+ .map(|pb| pb.into_storeid())
+ .collect::<Result<Vec<_>>>()
+ )
+ .transpose()
+ }
+}
+