fix(tasks): properly handle whitespace in task creation
This commit is contained in:
parent
1824de8d69
commit
8d2cf29b83
13
src/tasks.rs
13
src/tasks.rs
|
@ -194,7 +194,8 @@ impl Tasks {
|
||||||
"rpath" => join_tasks(
|
"rpath" => join_tasks(
|
||||||
self.traverse_up_from(Some(task.event.id))
|
self.traverse_up_from(Some(task.event.id))
|
||||||
.take_while(|t| Some(t.event.id) != self.position)
|
.take_while(|t| Some(t.event.id) != self.position)
|
||||||
).unwrap_or(task.event.id.to_string()),
|
)
|
||||||
|
.unwrap_or(task.event.id.to_string()),
|
||||||
"rtime" => {
|
"rtime" => {
|
||||||
let time = self.total_time_tracked(&task.event.id);
|
let time = self.total_time_tracked(&task.event.id);
|
||||||
format!("{:02}:{:02}", time / 3600, time / 60 % 60)
|
format!("{:02}:{:02}", time / 3600, time / 60 % 60)
|
||||||
|
@ -258,20 +259,22 @@ impl Tasks {
|
||||||
|
|
||||||
// Updates
|
// Updates
|
||||||
|
|
||||||
|
/// Expects sanitized input
|
||||||
pub(crate) fn build_task(&self, input: &str) -> EventBuilder {
|
pub(crate) fn build_task(&self, input: &str) -> EventBuilder {
|
||||||
let mut tags: Vec<Tag> = self.tags.iter().cloned().collect();
|
let mut tags: Vec<Tag> = self.tags.iter().cloned().collect();
|
||||||
self.position.inspect(|p| tags.push(Tag::event(*p)));
|
self.position.inspect(|p| tags.push(Tag::event(*p)));
|
||||||
return match input.split_once(": ") {
|
return match input.split_once(": ") {
|
||||||
None => EventBuilder::new(Kind::from(TASK_KIND), input, tags),
|
None => EventBuilder::new(Kind::from(TASK_KIND), input, tags),
|
||||||
Some(s) => {
|
Some(s) => {
|
||||||
tags.append(&mut s.1.split(" ").map(|t| Hashtag(t.to_string())).collect());
|
tags.append(&mut s.1.split_ascii_whitespace().map(|t| Hashtag(t.to_string())).collect());
|
||||||
EventBuilder::new(Kind::from(TASK_KIND), s.0, tags)
|
EventBuilder::new(Kind::from(TASK_KIND), s.0, tags)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sanitizes input
|
||||||
pub(crate) fn make_task(&mut self, input: &str) -> Option<EventId> {
|
pub(crate) fn make_task(&mut self, input: &str) -> Option<EventId> {
|
||||||
self.sender.submit(self.build_task(input)).map(|e| {
|
self.sender.submit(self.build_task(input.trim())).map(|e| {
|
||||||
let id = e.id;
|
let id = e.id;
|
||||||
self.add_task(e);
|
self.add_task(e);
|
||||||
let state = self.state.clone().unwrap_or("Open".to_string());
|
let state = self.state.clone().unwrap_or("Open".to_string());
|
||||||
|
@ -461,4 +464,8 @@ fn test_depth() {
|
||||||
|
|
||||||
let zero = EventId::all_zeros();
|
let zero = EventId::all_zeros();
|
||||||
assert_eq!(tasks.get_task_path(Some(zero)), zero.to_string());
|
assert_eq!(tasks.get_task_path(Some(zero)), zero.to_string());
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
|
assert_eq!("test toast".split(' ').collect_vec().len(), 3);
|
||||||
|
assert_eq!("test toast".split_ascii_whitespace().collect_vec().len(), 2);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue