mod app;
mod config;
mod index;
mod ui;
mod utils;
use std::time::Duration;
use anyhow::Result;
use camino::Utf8PathBuf;
use clap::Parser;
use crate::{app::App, config::Config};
#[derive(Parser)]
#[command(version, about)]
struct Cli {
#[arg(long)]
print: bool,
#[arg(long)]
reindex: bool,
#[arg(long)]
verify: bool,
#[arg(long)]
open_config: bool,
}
fn main() -> Result<()> {
let cli = Cli::parse();
if cli.verify {
return utils::verify_index();
}
Config::ensure_exists()?;
if cli.open_config {
edit::edit_file(Config::path()?)?;
return Ok(());
}
let config = Config::load()?;
let indexer = index::Indexer::start(cli.reindex, Duration::from_secs(config.rescan_interval));
let sessions = if cli.reindex { vec![] } else { index::cached_sessions()? };
let cwd = Utf8PathBuf::try_from(std::env::current_dir()?)?;
let mut app = App::new(sessions, indexer, cwd);
if config.cwd_only {
app.toggle_cwd_only();
}
match ui::run(&mut app, config)? {
Some(session) if cli.print => println!("{}", session.id),
Some(session) => utils::resume(&session)?,
None => {}
}
return Ok(());
}