onehis 0.3.0

All your history in one file
use anyhow::{Context, Result};
use log::{debug, info};
use std::{fs::OpenOptions, io::BufWriter};

use crate::{
    database::Database,
    util::{full_timerange, unixepoch_as_ymdhms},
};

pub fn export_csv(csv_file: String, db_file: String) -> Result<()> {
    let (start, end) = full_timerange();
    debug!("start:{}, end:{}", start, end);

    let db = Database::open(db_file).context("open 1History DB")?;
    let f = OpenOptions::new()
        .create(true)
        .write(true)
        .truncate(true)
        .open(&csv_file)
        .context(csv_file.clone())?;
    let mut csv_writer = csv::Writer::from_writer(BufWriter::new(f));

    csv_writer.write_record(["time", "title", "url", "visit_type"])?;
    let visits = db.select_visits(start, end, None)?;
    let len = visits.len();
    for visit in visits {
        csv_writer.write_record(vec![
            unixepoch_as_ymdhms(visit.visit_time),
            visit.title,
            visit.url,
            visit.visit_type.to_string(),
        ])?;
    }
    info!("Export {len} histories in {csv_file}.");

    Ok(())
}