Merge branch 'imag-todo/ids-from-stdin' into master

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
Matthias Beyer 2019-12-01 14:09:43 +01:00
commit 49eb0c13e9

View file

@ -253,15 +253,6 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul
use filters::failable::filter::FailableFilter; use filters::failable::filter::FailableFilter;
debug!("Listing todos with status filter {:?}", matcher); debug!("Listing todos with status filter {:?}", matcher);
let now = {
let now = chrono::offset::Local::now();
NaiveDateTime::new(now.date().naive_local(), now.time())
};
let filter_hidden = |todo: &FileLockEntry<'_>| -> Result<bool> {
Ok(todo.get_hidden()?.map(|hid| hid > now).unwrap_or(true))
};
struct TodoViewer { struct TodoViewer {
details: bool, details: bool,
} }
@ -308,12 +299,21 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul
} }
} }
fn process<'a, I>(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool, iter: I) -> Result<()>
where I: Iterator<Item = Result<FileLockEntry<'a>>> + Sized
{
let viewer = TodoViewer { details: false }; let viewer = TodoViewer { details: false };
rt.store() let now = {
.get_todos()? let now = chrono::offset::Local::now();
.into_get_iter() NaiveDateTime::new(now.date().naive_local(), now.time())
.map_inner_ok_or_else(|| err_msg("Did not find one entry")) };
let filter_hidden = |todo: &FileLockEntry<'_>| -> Result<bool> {
Ok(todo.get_hidden()?.map(|hid| hid > now).unwrap_or(true))
};
iter
.filter_map(|r| { .filter_map(|r| {
match r.and_then(|e| e.get_status().map(|s| (s, e))) { match r.and_then(|e| e.get_status().map(|s| (s, e))) {
Err(e) => Some(Err(e)), Err(e) => Some(Err(e)),
@ -332,6 +332,24 @@ fn list_todos(rt: &Runtime, matcher: &StatusMatcher, show_hidden: bool) -> Resul
rt.report_touched(entry.get_location()).map_err(Error::from) rt.report_touched(entry.get_location()).map_err(Error::from)
}) })
.collect() .collect()
};
if rt.ids_from_stdin() {
let iter = rt.ids::<crate::ui::PathProvider>()?
.ok_or_else(|| err_msg("No ids supplied"))?
.into_iter()
.map(Ok)
.into_get_iter(rt.store())
.map_inner_ok_or_else(|| err_msg("Did not find one entry"));
process(&rt, matcher, show_hidden, iter)
} else {
let iter = rt.store().get_todos()?
.into_get_iter()
.map_inner_ok_or_else(|| err_msg("Did not find one entry"));
process(&rt, matcher, show_hidden, iter)
}
} }
/// Generic todo items list function /// Generic todo items list function