Support marking multiple tasks as done
Not yet exposed via the CLI though
This commit is contained in:
parent
c07d27aa13
commit
ab63261dfd
5 changed files with 32 additions and 25 deletions
|
|
@ -1,24 +1,36 @@
|
|||
use std::vec;
|
||||
|
||||
use chrono::NaiveDateTime;
|
||||
|
||||
use crate::eval::Entry;
|
||||
use crate::files::commands::Done;
|
||||
use crate::files::Files;
|
||||
|
||||
use super::error::Result;
|
||||
use super::error::{Error, Result};
|
||||
use super::layout::line::LineLayout;
|
||||
|
||||
pub fn mark_done(
|
||||
files: &mut Files,
|
||||
entries: &[Entry],
|
||||
layout: &LineLayout,
|
||||
number: usize,
|
||||
numbers: &[usize],
|
||||
now: NaiveDateTime,
|
||||
) -> Result<()> {
|
||||
let entry = &entries[layout.look_up_number(number)?];
|
||||
let done = Done {
|
||||
date: entry.dates.map(|dates| dates.into()),
|
||||
done_at: now.date(),
|
||||
};
|
||||
files.add_done(number, entry.source, done)?;
|
||||
Ok(())
|
||||
let mut not_tasks = vec![];
|
||||
for &number in numbers {
|
||||
let entry = &entries[layout.look_up_number(number)?];
|
||||
let done = Done {
|
||||
date: entry.dates.map(|dates| dates.into()),
|
||||
done_at: now.date(),
|
||||
};
|
||||
if !files.add_done(entry.source, done) {
|
||||
not_tasks.push(number);
|
||||
}
|
||||
}
|
||||
|
||||
if not_tasks.is_empty() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(Error::NotATask(not_tasks))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ pub enum Error {
|
|||
NoNumber,
|
||||
#[error("No entry with number {0}")]
|
||||
NoSuchEntry(usize),
|
||||
#[error("Not a task")]
|
||||
NotATask(Vec<usize>),
|
||||
}
|
||||
|
||||
pub type Result<T> = result::Result<T, Error>;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue