use gtk::prelude::*;
use gtk4 as gtk;
use libadwaita as adw;
use crate::ui::main_window::MainWindow;
const APP_ID: &str = "com.digitalgex.RustDiff";
pub fn run() -> gtk::glib::ExitCode {
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("warn")),
)
.init();
setup_locale();
let app = adw::Application::builder().application_id(APP_ID).build();
app.connect_activate(build_ui);
app.run()
}
fn setup_locale() {
use crate::settings::{SUPPORTED_LANGUAGES, Settings};
let settings = Settings::load();
let code = if SUPPORTED_LANGUAGES.contains(&settings.language.as_str()) {
settings.language.clone()
} else {
["LC_ALL", "LC_MESSAGES", "LANG"]
.iter()
.filter_map(|var| std::env::var(var).ok())
.find(|v| !v.is_empty())
.and_then(|raw| {
raw.split(['.', '@'])
.next()
.and_then(|s| s.split('_').next())
.map(|s| s.to_lowercase())
})
.filter(|code| SUPPORTED_LANGUAGES.contains(&code.as_str()))
.unwrap_or_else(|| "en".into())
};
tracing::info!("Idioma activo: {code} (pref={})", settings.language);
rust_i18n::set_locale(&code);
}
fn build_ui(app: &adw::Application) {
let window = MainWindow::new(app);
let args: Vec<String> = std::env::args().collect();
if args.len() >= 3 {
let left_path = &args[1];
let right_path = &args[2];
tracing::info!("Cargando archivos desde CLI: {left_path} y {right_path}");
window.load_files_from_paths(left_path, right_path);
}
window.present();
}