This commit is contained in:
2026-08-10 22:06:49 +02:00
parent 2a5d9bb0fd
commit 8bff7982ff
83 changed files with 17975 additions and 4824 deletions
+88
View File
@@ -0,0 +1,88 @@
// =====================================================================
// Installeur intégré — côté front.
//
// Le .exe distribué EST l'application. Lancé depuis ailleurs que son
// dossier d'installation, il affiche son propre écran d'installation
// (src/pages/Installer.tsx) au lieu de démarrer l'app.
//
// Voir src-tauri/src/installer.rs pour la partie système.
// =====================================================================
import { isDesktop } from './updater'
export interface InstallerStatus {
running_installed: boolean
already_installed: boolean
install_dir: string
version: string
product_name: string
}
export type StartupMode = 'installer' | 'app'
async function invoke<T>(cmd: string, args?: Record<string, unknown>): Promise<T> {
const { invoke } = await import('@tauri-apps/api/core')
return invoke<T>(cmd, args)
}
/**
* Décide, au démarrage, entre l'écran d'installation et l'application.
*
* En cas de doute on démarre l'APPLICATION : mieux vaut lancer l'app depuis
* un dossier temporaire que bloquer quelqu'un sur un installeur inutile.
*/
export async function resolveStartupMode(): Promise<{
mode: StartupMode
status: InstallerStatus | null
}> {
if (!isDesktop()) return { mode: 'app', status: null }
try {
const status = await invoke<InstallerStatus>('installer_status')
return { mode: status.running_installed ? 'app' : 'installer', status }
} catch (e) {
console.warn('Statut dinstallation indisponible :', e)
return { mode: 'app', status: null }
}
}
/** Copie l'application, crée les raccourcis, l'enregistre auprès de Windows. */
export function install(desktopShortcut: boolean): Promise<string> {
return invoke<string>('installer_install', { desktopShortcut })
}
/** Démarre la version installée et ferme le processus courant. */
export function launchInstalled(): Promise<void> {
return invoke<void>('installer_launch')
}
// ---------------------------------------------------------------------
// Fenêtre
//
// Rien ici ne redimensionne ni n'affiche la fenêtre : elle est créée
// directement à la bonne forme côté Rust (src-tauri/src/lib.rs). Ne
// restent que les commandes de la barre de titre maison de l'installeur,
// puisque la fenêtre y est sans décoration Windows.
// ---------------------------------------------------------------------
export async function closeWindow(): Promise<void> {
if (!isDesktop()) return
const { getCurrentWindow } = await import('@tauri-apps/api/window')
await getCurrentWindow().close()
}
export async function minimizeWindow(): Promise<void> {
if (!isDesktop()) return
const { getCurrentWindow } = await import('@tauri-apps/api/window')
await getCurrentWindow().minimize()
}
/** Permet de déplacer la fenêtre sans barre de titre, en tirant sur l'en-tête. */
export async function startDragging(): Promise<void> {
if (!isDesktop()) return
try {
const { getCurrentWindow } = await import('@tauri-apps/api/window')
await getCurrentWindow().startDragging()
} catch {
/* sans conséquence */
}
}