Files
OFLauncher/src/shared/ipc.ts
T
2026-06-17 20:43:27 +02:00

133 lines
3.3 KiB
TypeScript

/**
* Contrats partagés entre le process main et le renderer.
* Tout passe par le bridge `window.api` exposé dans le preload.
*/
/** Profil du joueur après login Microsoft. */
export interface PlayerProfile {
uuid: string
name: string
/** URL du skin/tête si disponible. */
skinUrl?: string
}
/** Phase courante de la séquence "Jouer". */
export type LaunchPhase =
| 'idle'
| 'auth'
| 'pack-meta'
| 'java'
| 'minecraft'
| 'neoforge'
| 'modpack'
| 'launching'
| 'running'
| 'done'
| 'error'
/** Événement de progression envoyé main -> renderer pendant "Jouer". */
export interface ProgressEvent {
phase: LaunchPhase
/** Libellé lisible à afficher. */
message: string
/** 0..1 si déterminable, sinon undefined (barre indéterminée). */
progress?: number
}
/** Ligne de log du jeu (stdout/stderr) streamée vers la console du renderer. */
export interface GameLogLine {
stream: 'stdout' | 'stderr'
line: string
}
/** Infos du flow "device code" Microsoft à présenter à l'utilisateur. */
export interface DeviceCodeInfo {
userCode: string
verificationUri: string
message: string
}
/** État de la mise à jour automatique du launcher (electron-updater). */
export type UpdateState =
| 'checking'
| 'available'
| 'downloading'
| 'downloaded'
| 'none'
| 'error'
/** Statut d'update envoyé main -> renderer pour piloter le bandeau de maj. */
export interface UpdateStatus {
state: UpdateState
/** Version distante (ex. "0.2.0") quand connue. */
version?: string
/** 0..1 pendant le téléchargement. */
progress?: number
/** Message d'erreur éventuel (state === 'error'). */
message?: string
}
/** Métadonnées du modpack lues depuis le pack.toml packwiz distant. */
export interface PackMeta {
name: string
version: string
minecraft: string
neoforge: string
}
/** Options de la séquence "Jouer". */
export interface PlayOptions {
/** Force la revérification/redownload des fichiers (réparation). */
repair?: boolean
}
/** Réglages utilisateur persistés localement. */
export interface UserSettings {
/** RAM max allouée à la JVM, en Mo. */
maxMemoryMb: number
/** Args JVM additionnels (avancé). */
extraJvmArgs: string[]
}
export const DEFAULT_SETTINGS: UserSettings = {
maxMemoryMb: 8192,
extraJvmArgs: []
}
/** Informations sur le dossier de données actuel. */
export interface DataDirInfo {
/** Chemin actuellement utilisé. */
current: string
/** Suggestion par défaut (~Games/OFLauncher). */
defaultSuggestion: string
}
/** Noms de canaux IPC (invoke renderer -> main). */
export const IPC = {
authLogin: 'auth:login',
authLogout: 'auth:logout',
authGetProfile: 'auth:getProfile',
play: 'play:start',
settingsGet: 'settings:get',
settingsSet: 'settings:set',
appVersion: 'app:version',
openInstanceDir: 'instance:open',
openLogsDir: 'logs:open',
playStop: 'play:stop',
packGet: 'pack:get',
updateInstall: 'update:install',
isFirstLaunch: 'app:isFirstLaunch',
dataDirGet: 'dataDir:get',
dataDirBrowse: 'dataDir:browse',
dataDirSet: 'dataDir:set'
} as const
/** Noms d'événements (send main -> renderer). */
export const IPC_EVENT = {
progress: 'evt:progress',
gameLog: 'evt:gameLog',
gameClosed: 'evt:gameClosed',
authCode: 'evt:authCode',
updateStatus: 'evt:updateStatus'
} as const