You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
postsack/src/bin/cli.rs

65 lines
1.6 KiB
Rust

3 years ago
use eyre::Result;
use std::{
io::{stdout, Write},
thread::sleep,
time::Duration,
};
use gmaildb::*;
fn main() -> Result<()> {
setup_tracing();
let config = make_config();
3 years ago
println!("Collecting Mails...");
let emails = importer::filesystem::read_emails(&config)?;
3 years ago
println!("Begin Parsing Mails...");
let (receiver, handle) = crate::importer::parse::emails::parse_emails(&config, emails)?;
3 years ago
let mut stdout = stdout();
let mut total: Option<usize> = None;
let mut counter = 0;
let mut done = false;
3 years ago
'outer: while done == false {
for entry in receiver.try_iter() {
let message = match entry {
Ok(n) => n,
Err(e) => {
3 years ago
println!("Processing Error: {:?}", &e);
break 'outer;
}
};
use importer::parse::emails::ParseMessage;
3 years ago
match message {
ParseMessage::Done => done = true,
ParseMessage::Total(n) => total = Some(n),
ParseMessage::ParsedOne => counter += 1,
};
}
if let Some(total) = total {
print!("\rProcessing {}/{}...", counter, total);
}
3 years ago
stdout.flush().unwrap();
sleep(Duration::from_millis(20));
}
let result = handle.join().map_err(|op| eyre::eyre!("{:?}", &op))??;
println!(
"Read: {}, Processed: {}, Inserted: {}",
total.unwrap_or_default(),
counter,
result
);
println!();
tracing::trace!("Exit Program");
Ok(())
}