WIP: errorhandling in habitask
This commit is contained in:
parent
768c5bfabd
commit
29d81e40c3
|
@ -5,6 +5,7 @@ authors = ["Malte Brandy <malte.brandy@maralorn.de>"]
|
|||
|
||||
[dependencies]
|
||||
task-hookrs = { git = "https://git.darmstadt.ccc.de/maralorn/task-hookrs.git"}
|
||||
error-chain = "0.11.0"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
serde_json = "1.0"
|
||||
|
|
|
@ -6,7 +6,8 @@ extern crate serde_json;
|
|||
extern crate reqwest;
|
||||
#[macro_use]
|
||||
extern crate hyper;
|
||||
|
||||
#[macro_use]
|
||||
extern crate error_chain;
|
||||
extern crate config;
|
||||
|
||||
use reqwest::{IntoUrl, Client, RequestBuilder};
|
||||
|
@ -18,6 +19,12 @@ use std::thread::sleep;
|
|||
use std::time::Duration;
|
||||
use config::{Config, Environment};
|
||||
|
||||
error_chain! {
|
||||
foreign_links {
|
||||
Io(::std::io::Error);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Settings {
|
||||
user: String,
|
||||
|
@ -34,14 +41,13 @@ fn blink() {
|
|||
}
|
||||
|
||||
|
||||
fn query(filter: String) -> Vec<Task> {
|
||||
fn query(filter: String) -> Result<Vec<Task>> {
|
||||
let stdout = &Command::new("task")
|
||||
.arg("export")
|
||||
.arg(filter)
|
||||
.output()
|
||||
.unwrap()
|
||||
.output()?
|
||||
.stdout;
|
||||
from_str(from_utf8(stdout).unwrap()).unwrap()
|
||||
Ok(from_str(from_utf8(stdout)?)?)
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
|
@ -64,10 +70,10 @@ struct Response {
|
|||
|
||||
|
||||
impl Habitask {
|
||||
fn new() -> Habitask {
|
||||
fn new() -> Result<Habitask> {
|
||||
let mut s = Config::new();
|
||||
s.merge(Environment::with_prefix("habitask")).unwrap();
|
||||
let s = s.try_into().unwrap();
|
||||
s.merge(Environment::with_prefix("habitask"))?;
|
||||
let s = s.try_into()?;
|
||||
Habitask {
|
||||
client: Client::new(),
|
||||
settings: s,
|
||||
|
@ -87,46 +93,43 @@ impl Habitask {
|
|||
self.login(self.client.post(url))
|
||||
}
|
||||
|
||||
fn make_todo(&self, name: &str, prio: &str, tasks: Vec<Task>) {
|
||||
fn make_todo(&self, name: &str, prio: &str, tasks: Vec<Task>) -> Result<()> {
|
||||
if tasks.len() == 0 {
|
||||
return;
|
||||
}
|
||||
let Todo { id, .. } = self.create_todo(name, prio);
|
||||
let Todo { id, .. } = self.create_todo(name, prio)?;
|
||||
let mut checklist: Vec<Item> = Vec::new();
|
||||
for task in tasks {
|
||||
checklist = self.add_item(&id, &task.description()).checklist;
|
||||
checklist = self.add_item(&id, &task.description())?.checklist;
|
||||
blink();
|
||||
}
|
||||
for item in checklist {
|
||||
self.check_item(&id, &item.id);
|
||||
self.check_item(&id, &item.id)?;
|
||||
blink();
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn create_todo(&self, name: &str, prio: &str) -> Todo {
|
||||
fn create_todo(&self, name: &str, prio: &str) -> Result<Todo> {
|
||||
let map = vec![("text", name), ("type", "todo"), ("priority", prio)];
|
||||
self.post("https://habitica.com/api/v3/tasks/user")
|
||||
.json(&map)
|
||||
.send()
|
||||
.unwrap()
|
||||
.json::<Response>()
|
||||
.unwrap()
|
||||
.send()?
|
||||
.json::<Response>()?
|
||||
.data
|
||||
}
|
||||
|
||||
fn add_item(&self, id: &str, item: &str) -> Todo {
|
||||
fn add_item(&self, id: &str, item: &str) -> Result<Todo> {
|
||||
let map = vec![("text", item)];
|
||||
let url = format!("https://habitica.com/api/v3/tasks/{}/checklist", id);
|
||||
self.post(&url)
|
||||
Ok(self.post(&url)
|
||||
.json(&map)
|
||||
.send()
|
||||
.unwrap()
|
||||
.json::<Response>()
|
||||
.unwrap()
|
||||
.data
|
||||
.send()?
|
||||
.json::<Response>()?
|
||||
.data)
|
||||
}
|
||||
|
||||
fn check_item(&self, id: &str, item: &str) {
|
||||
fn check_item(&self, id: &str, item: &str) -> Result<()>{
|
||||
let url = format!(
|
||||
"https://habitica.com/api/v3/tasks/{}/checklist/{}/score",
|
||||
id,
|
||||
|
@ -134,56 +137,57 @@ impl Habitask {
|
|||
);
|
||||
self.post(&url)
|
||||
.json(&Vec::<(&str, &str)>::new())
|
||||
.send()
|
||||
.unwrap();
|
||||
.send()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn score_task(&self, id: &str) {
|
||||
fn score_task(&self, id: &str) -> Result<()>{
|
||||
let url = format!("https://habitica.com/api/v3/tasks/{}/score/up", id);
|
||||
self.post(&url)
|
||||
.json(&Vec::<(&str, &str)>::new())
|
||||
.send()
|
||||
.unwrap();
|
||||
.send();
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
fn main() -> Result<()> {
|
||||
let new = "-DELETED entry.after:now-24h";
|
||||
let done = "+COMPLETED end.after:now-24h";
|
||||
let after = "entry.after:now-";
|
||||
let before = "entry.before:now-";
|
||||
let mask = "-auto";
|
||||
let instant_done = query(format!("{} -TAGGED {}48h {}", done, after, mask));
|
||||
let created = query(format!("{} {}", new, mask));
|
||||
let routines = query(format!("{} +auto", done));
|
||||
let tasks = query(format!("{} {}1week {}", done, after, mask));
|
||||
let a_little_old = query(format!("{} {}1month {}1week {}", done, after, before, mask));
|
||||
let instant_done = query(format!("{} -TAGGED {}48h {}", done, after, mask))?;
|
||||
let created = query(format!("{} {}", new, mask))?;
|
||||
let routines = query(format!("{} +auto", done))?;
|
||||
let tasks = query(format!("{} {}1week {}", done, after, mask))?;
|
||||
let a_little_old = query(format!("{} {}1month {}1week {}", done, after, before, mask))?;
|
||||
let old = query(format!(
|
||||
"{} {}3month {}1month {}",
|
||||
done,
|
||||
after,
|
||||
before,
|
||||
mask
|
||||
));
|
||||
let very_old = query(format!("{} {}1year {}3month {}", done, after, before, mask));
|
||||
let crazy_old = query(format!("{} {}1year {}", done, before, mask));
|
||||
let habitask = Habitask::new();
|
||||
))?;
|
||||
let very_old = query(format!("{} {}1year {}3month {}", done, after, before, mask))?;
|
||||
let crazy_old = query(format!("{} {}1year {}", done, before, mask))?;
|
||||
let habitask = Habitask::new()?;
|
||||
for _ in created {
|
||||
habitask.score_task("note");
|
||||
habitask.score_task("note")?;
|
||||
blink();
|
||||
}
|
||||
for _ in instant_done {
|
||||
habitask.score_task("do-it");
|
||||
habitask.score_task("do-it")?;
|
||||
blink();
|
||||
}
|
||||
habitask.make_todo("Routinen erledigt!", "0.1", routines);
|
||||
habitask.make_todo("Herausforderungen bezwungen!", "1", tasks);
|
||||
habitask.make_todo("Routinen erledigt!", "0.1", routines)?;
|
||||
habitask.make_todo("Herausforderungen bezwungen!", "1", tasks)?;
|
||||
habitask.make_todo(
|
||||
"Ein paar Tage alte Herausforderungen bezwungen!",
|
||||
"1.5",
|
||||
a_little_old,
|
||||
);
|
||||
habitask.make_todo("Einige Wochen alte Herausforderungen bezwungen!", "2", old);
|
||||
habitask.make_todo("Monate alte Herausforderungen bezwungen!", "2", very_old);
|
||||
habitask.make_todo("Uralte Herausforderungen bezwungen!", "2", crazy_old);
|
||||
)?;
|
||||
habitask.make_todo("Einige Wochen alte Herausforderungen bezwungen!", "2", old)?;
|
||||
habitask.make_todo("Monate alte Herausforderungen bezwungen!", "2", very_old)?;
|
||||
habitask.make_todo("Uralte Herausforderungen bezwungen!", "2", crazy_old)?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ m-0 = {
|
|||
taskwarrior.enable = true;
|
||||
habitask.enable = true;
|
||||
bugwarrior.enable = true;
|
||||
rustdev.enable = true;
|
||||
weechat = {
|
||||
enable = true;
|
||||
user = config.m-0.private.hackint.user;
|
||||
|
|
Loading…
Reference in a new issue