Add recur spec with kairos support
This commit is contained in:
parent
42cabffa64
commit
a6a36455f5
3 changed files with 29 additions and 10 deletions
|
@ -20,6 +20,7 @@ toml = "0.4"
|
||||||
toml-query = "0.4.0"
|
toml-query = "0.4.0"
|
||||||
error-chain = "0.11"
|
error-chain = "0.11"
|
||||||
is-match = "0.1"
|
is-match = "0.1"
|
||||||
|
kairos = { git = 'https://github.com/matthiasbeyer/kairos', branch = "master" }
|
||||||
|
|
||||||
libimagstore = { version = "0.5.0", path = "../../../lib/core/libimagstore" }
|
libimagstore = { version = "0.5.0", path = "../../../lib/core/libimagstore" }
|
||||||
libimagerror = { version = "0.5.0", path = "../../../lib/core/libimagerror" }
|
libimagerror = { version = "0.5.0", path = "../../../lib/core/libimagerror" }
|
||||||
|
|
|
@ -54,7 +54,8 @@ pub trait HabitTemplate : Sized {
|
||||||
fn is_habit_template(&self) -> Result<bool>;
|
fn is_habit_template(&self) -> Result<bool>;
|
||||||
|
|
||||||
fn habit_name(&self) -> Result<String>;
|
fn habit_name(&self) -> Result<String>;
|
||||||
fn habit_date(&self) -> Result<String>;
|
fn habit_basedate(&self) -> Result<String>;
|
||||||
|
fn habit_recur_spec(&self) -> Result<String>;
|
||||||
fn habit_comment(&self) -> Result<String>;
|
fn habit_comment(&self) -> Result<String>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -87,7 +88,7 @@ impl HabitTemplate for Entry {
|
||||||
fn is_habit_template(&self) -> Result<bool> {
|
fn is_habit_template(&self) -> Result<bool> {
|
||||||
[
|
[
|
||||||
"habit.template.name",
|
"habit.template.name",
|
||||||
"habit.template.date",
|
"habit.template.basedate",
|
||||||
"habit.template.comment",
|
"habit.template.comment",
|
||||||
].iter().fold(Ok(true), |acc, path| acc.and_then(|b| {
|
].iter().fold(Ok(true), |acc, path| acc.and_then(|b| {
|
||||||
self.get_header()
|
self.get_header()
|
||||||
|
@ -101,8 +102,12 @@ impl HabitTemplate for Entry {
|
||||||
get_string_header_from_habit(self, "habit.template.name")
|
get_string_header_from_habit(self, "habit.template.name")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn habit_date(&self) -> Result<String> {
|
fn habit_basedate(&self) -> Result<String> {
|
||||||
get_string_header_from_habit(self, "habit.template.date")
|
get_string_header_from_habit(self, "habit.template.basedate")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn habit_recur_spec(&self) -> Result<String> {
|
||||||
|
get_string_header_from_habit(self, "habit.template.recurspec")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn habit_comment(&self) -> Result<String> {
|
fn habit_comment(&self) -> Result<String> {
|
||||||
|
@ -139,7 +144,8 @@ pub mod builder {
|
||||||
pub struct HabitBuilder {
|
pub struct HabitBuilder {
|
||||||
name: Option<String>,
|
name: Option<String>,
|
||||||
comment: Option<String>,
|
comment: Option<String>,
|
||||||
date: Option<NaiveDate>,
|
basedate: Option<NaiveDate>,
|
||||||
|
recurspec: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HabitBuilder {
|
impl HabitBuilder {
|
||||||
|
@ -154,8 +160,13 @@ pub mod builder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_date(&mut self, date: NaiveDate) -> &mut Self {
|
pub fn with_basedate(&mut self, date: NaiveDate) -> &mut Self {
|
||||||
self.date = Some(date);
|
self.basedate = Some(date);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_recurspec(&mut self, spec: String) -> &mut Self {
|
||||||
|
self.recurspec = Some(spec);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,14 +177,19 @@ pub mod builder {
|
||||||
}
|
}
|
||||||
|
|
||||||
let name = try!(self.name.ok_or_else(|| mkerr("name")));
|
let name = try!(self.name.ok_or_else(|| mkerr("name")));
|
||||||
let dateobj = try!(self.date.ok_or_else(|| mkerr("date")));
|
let dateobj = try!(self.basedate.ok_or_else(|| mkerr("date")));
|
||||||
|
let recur = try!(self.recurspec.ok_or_else(|| mkerr("recurspec")));
|
||||||
|
if let Err(e) = ::kairos::parser::parse(&recur) {
|
||||||
|
return Err(e).map_err(From::from);
|
||||||
|
}
|
||||||
let date = date_to_string(&dateobj);
|
let date = date_to_string(&dateobj);
|
||||||
let comment = self.comment.unwrap_or_else(|| String::new());
|
let comment = self.comment.unwrap_or_else(|| String::new());
|
||||||
let sid = try!(build_habit_template_sid(&name));
|
let sid = try!(build_habit_template_sid(&name));
|
||||||
let mut entry = try!(store.create(sid));
|
let mut entry = try!(store.create(sid));
|
||||||
|
|
||||||
try!(entry.get_header_mut().insert("habit.template.name", Value::String(name)));
|
try!(entry.get_header_mut().insert("habit.template.name", Value::String(name)));
|
||||||
try!(entry.get_header_mut().insert("habit.template.date", Value::String(date)));
|
try!(entry.get_header_mut().insert("habit.template.basedate", Value::String(date)));
|
||||||
|
try!(entry.get_header_mut().insert("habit.template.recurspec", Value::String(recur)));
|
||||||
try!(entry.get_header_mut().insert("habit.template.comment", Value::String(comment)));
|
try!(entry.get_header_mut().insert("habit.template.comment", Value::String(comment)));
|
||||||
|
|
||||||
Ok(entry)
|
Ok(entry)
|
||||||
|
@ -186,7 +202,8 @@ pub mod builder {
|
||||||
HabitBuilder {
|
HabitBuilder {
|
||||||
name: None,
|
name: None,
|
||||||
comment: None,
|
comment: None,
|
||||||
date: None,
|
basedate: None,
|
||||||
|
recurspec: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
extern crate chrono;
|
extern crate chrono;
|
||||||
extern crate toml;
|
extern crate toml;
|
||||||
extern crate toml_query;
|
extern crate toml_query;
|
||||||
|
extern crate kairos;
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
#[macro_use] extern crate error_chain;
|
#[macro_use] extern crate error_chain;
|
||||||
#[macro_use] extern crate is_match;
|
#[macro_use] extern crate is_match;
|
||||||
|
|
Loading…
Reference in a new issue