#![windows_subsystem = "windows"]
use clap::Parser;
use iced::application;
use quincy::{QuincyError, Result};
use quincy_gui::gui::{QuincyGui, expand_path};
use std::path::PathBuf;
use tracing::info;
use tracing_subscriber::EnvFilter;
#[cfg(target_os = "windows")]
const DEFAULT_CONFIG_DIR: &str = "%AppData%/quincy";
#[cfg(unix)]
const DEFAULT_CONFIG_DIR: &str = "~/.config/quincy";
#[derive(Parser)]
#[command(name = "quincy")]
pub struct Args {
#[arg(long, default_value = DEFAULT_CONFIG_DIR)]
pub config_dir: PathBuf,
#[arg(long, default_value = "QUINCY_")]
pub env_prefix: String,
#[arg(long, default_value = "info")]
pub log_level: String,
}
fn main() -> Result<()> {
let args = Args::parse();
let filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(&args.log_level));
#[cfg(windows)]
let with_ansi = nu_ansi_term::enable_ansi_support().is_ok();
#[cfg(not(windows))]
let with_ansi = true;
tracing_subscriber::fmt()
.with_env_filter(filter)
.with_ansi(with_ansi)
.init();
info!("Starting Quincy GUI client");
let config_dir = expand_path(&args.config_dir);
application(
move || QuincyGui::new(config_dir.clone()),
QuincyGui::update,
QuincyGui::view,
)
.window(QuincyGui::window_settings())
.title(QuincyGui::title)
.theme(QuincyGui::theme)
.subscription(QuincyGui::subscription)
.run()
.map_err(|e| QuincyError::system(format!("GUI framework error: {e}")))?;
Ok(())
}