implement archive command
This commit is contained in:
parent
1365d6d466
commit
6d15e54d3f
|
@ -5,15 +5,15 @@ use clap::ArgMatches;
|
|||
use chrono::{DateTime, Utc};
|
||||
use regex::Regex;
|
||||
|
||||
use crate::database::{Database, DBVersion};
|
||||
use crate::database::Database;
|
||||
use crate::error::{Error, Result};
|
||||
use crate::commands::Command;
|
||||
use crate::config::Config;
|
||||
use crate::timeparse::parse_time;
|
||||
use crate::old::{entries_or_warning, time_or_warning, warn_if_needed};
|
||||
use crate::old::{entries_or_warning, time_or_warning};
|
||||
use crate::formatters::text;
|
||||
use crate::editor;
|
||||
use crate::regex::parse_regex;
|
||||
use crate::interactive::ask;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Args {
|
||||
|
@ -43,12 +43,44 @@ pub struct ArchiveCommand {}
|
|||
impl<'a> Command<'a> for ArchiveCommand {
|
||||
type Args = Args;
|
||||
|
||||
fn handle<D, O, E>(args: Args, db: &mut D, out: &mut O, err: &mut E, config: &Config, now: DateTime<Utc>) -> Result<()>
|
||||
fn handle<D, O, E>(args: Args, db: &mut D, out: &mut O, _err: &mut E, _config: &Config, now: DateTime<Utc>) -> Result<()>
|
||||
where
|
||||
D: Database,
|
||||
O: Write,
|
||||
E: Write,
|
||||
{
|
||||
unimplemented!()
|
||||
let mut entries = {
|
||||
let start = args.start.map(|s| time_or_warning(s, db)).transpose()?.map(|s| s.0);
|
||||
let end = args.end.map(|e| time_or_warning(e, db)).transpose()?.map(|e| e.0);
|
||||
let current_sheet = db.current_sheet()?.unwrap_or_else(|| "default".into());
|
||||
let sheet = args.sheet.unwrap_or(current_sheet);
|
||||
|
||||
db.entries_by_sheet(&sheet, start, end)?
|
||||
};
|
||||
|
||||
if let Some(re) = args.grep {
|
||||
entries.retain(|e| re.is_match(&e.note.clone().unwrap_or_else(String::new)));
|
||||
}
|
||||
|
||||
if args.fake {
|
||||
let (entries, _) = entries_or_warning(entries, db)?;
|
||||
|
||||
text::print_formatted(
|
||||
entries,
|
||||
out,
|
||||
now,
|
||||
true,
|
||||
)?;
|
||||
} else {
|
||||
if ask(out, &format!("Archive {} entries?", entries.len()))? {
|
||||
for entry in entries {
|
||||
db.entry_update(entry.id, entry.start, entry.end, entry.note, &format!("_{}", entry.sheet))?;
|
||||
}
|
||||
} else {
|
||||
writeln!(out, "Ok, they're still there")?;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -118,6 +118,7 @@ fn main() {
|
|||
.arg(start_arg.clone())
|
||||
.arg(end_arg.clone())
|
||||
.arg(grep_arg.clone())
|
||||
.arg(sheet_arg.clone().help("Archive entries from this sheet instead of the current one"))
|
||||
.arg(Arg::with_name("fake")
|
||||
.short("f").long("fake")
|
||||
.help("Don't actually archive the entries, just display them")
|
||||
|
|
Loading…
Reference in New Issue