V0.3
This commit is contained in:
@@ -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 d’installation 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 */
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user