// Prevent console window in addition to Slint window in Windows release builds when, e.g., starting the app via file manager. Ignored on other platforms. #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use ziya::config::load_config; use ziya::error::Result; use ziya::slint_ui::*; use ziya::tracing::setup_tracing; use ziya::ZiyaApp; #[tokio::main] async fn main() -> Result<()> { // ✅ Create and show UI on main thread using Slint's built-in pattern let ui = MainWindow::new() .map_err(|e| ziya::error::app::AppError::Slint(format!("failed_to_create_ui: {}", e)))?; // ✅ Set up async tasks using spawn_local with async-compat for Tokio futures let ui_weak = ui.as_weak(); // Load configuration let config = load_config("Config.toml").await.unwrap(); // Initialize tracing with config setup_tracing(config.clone(), "ziya-slint").await.unwrap(); // Create and run the app let app = ZiyaApp::new(&config, ui_weak).await.unwrap(); slint::spawn_local(async_compat::Compat::new(async { app.run().await.unwrap(); })) .unwrap(); ui.run().map_err(|e| { ziya::error::app::AppError::Slint(format!("failed_to_run_event_loop: {}", e)) })?; Ok(()) }