use tauri::{WebviewUrl, WebviewWindowBuilder}; #[cfg(windows)] mod installer; /// L'application tourne-t-elle depuis son dossier d'installation ? /// (Sur les autres plateformes il n'y a pas d'installeur intégré.) fn running_installed() -> bool { #[cfg(windows)] { installer::is_running_installed() } #[cfg(not(windows))] { true } } #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { let mut builder = tauri::Builder::default(); // Mises à jour automatiques : l'application va chercher elle-même la // dernière version publiée. Plus besoin de renvoyer un .exe à l'équipe. #[cfg(desktop)] { builder = builder .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_process::init()); } // Installeur intégré : le front affiche l'écran d'installation ou // l'application selon `installer_status()`. #[cfg(windows)] { builder = builder.invoke_handler(tauri::generate_handler![ installer::installer_status, installer::installer_install, installer::installer_launch ]); } builder .setup(|app| { if cfg!(debug_assertions) { app.handle().plugin( tauri_plugin_log::Builder::default() .level(log::LevelFilter::Info) .build(), )?; } // La fenêtre est créée ICI, directement à sa forme définitive. // // Elle n'est volontairement PAS déclarée dans tauri.conf.json : la // déclarer là-bas imposait de la corriger ensuite — la masquer, la // redimensionner, la maximiser, puis l'afficher. Chacune de ces // étapes était visible, d'où l'impression que « plusieurs petites // fenêtres » s'ouvraient avant l'application. // // Créée d'un coup aux bonnes dimensions, il n'y a plus rien à // rattraper après coup : une seule apparition, la bonne. let window = WebviewWindowBuilder::new(app, "main", WebviewUrl::default()) // Le glisser-déposer doit rester géré par le webview (Kanban, // dépôt de pièces jointes) et non capté par Tauri. .disable_drag_drop_handler(); if running_installed() { window .title("GameDev Tracker") .inner_size(1360.0, 860.0) .min_inner_size(900.0, 620.0) .resizable(true) .maximized(true) .build()?; } else { // Écran d'installation : petite fenêtre sans bordure, centrée. window .title("Installation de GameDev Tracker") .inner_size(520.0, 560.0) .resizable(false) .maximizable(false) .decorations(false) .center() .build()?; } Ok(()) }) .run(tauri::generate_context!()) .expect("error while running tauri application"); }