Files
gestion_projet/src/lib/installer.ts
T
2026-08-10 22:06:49 +02:00

89 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// =====================================================================
// 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 */
}
}