Ziya/src/main.rs
2025-07-08 14:57:51 +07:00

36 lines
1.2 KiB
Rust

// 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(())
}