feat: add some funcs

This commit is contained in:
lucasdpt
2026-06-14 14:23:37 +02:00
parent 48fa508540
commit 4756420f8d
11 changed files with 240 additions and 44 deletions
+50 -9
View File
@@ -4,9 +4,15 @@ import type {
ProgressEvent,
GameLogLine,
DeviceCodeInfo,
UpdateStatus
UpdateStatus,
PackMeta
} from '../../shared/ipc'
/** Découpe une chaîne d'args JVM en tableau (espaces, vides ignorés). */
function parseArgs(s: string): string[] {
return s.split(/\s+/).filter(Boolean)
}
type Status = 'loading' | 'logged-out' | 'logged-in' | 'working' | 'running'
export default function App(): JSX.Element {
@@ -17,8 +23,10 @@ export default function App(): JSX.Element {
const [error, setError] = useState<string | null>(null)
const [authCode, setAuthCode] = useState<DeviceCodeInfo | null>(null)
const [maxMemoryMb, setMaxMemoryMb] = useState(8192)
const [jvmArgs, setJvmArgs] = useState('')
const [appVersion, setAppVersion] = useState('')
const [update, setUpdate] = useState<UpdateStatus | null>(null)
const [pack, setPack] = useState<PackMeta | null>(null)
const consoleRef = useRef<HTMLDivElement>(null)
// Restaure la session + réglages au démarrage.
@@ -30,10 +38,13 @@ export default function App(): JSX.Element {
window.api.getAppVersion()
])
setMaxMemoryMb(s.maxMemoryMb)
setJvmArgs(s.extraJvmArgs.join(' '))
setAppVersion(v)
setProfile(p)
setStatus(p ? 'logged-in' : 'logged-out')
})()
// Récupère le nom/version réels du pack (tolérant au offline).
void window.api.getPackMeta().then((m) => m && setPack(m))
}, [])
// Abonnements aux événements main -> renderer.
@@ -97,13 +108,21 @@ export default function App(): JSX.Element {
void window.api.openInstanceDir()
}
async function handlePlay(): Promise<void> {
function handleOpenLogs(): void {
void window.api.openLogsDir()
}
function handleStop(): void {
void window.api.stopGame()
}
async function handlePlay(opts?: { repair?: boolean }): Promise<void> {
setError(null)
setLogs([])
setStatus('working')
await window.api.setSettings({ maxMemoryMb, extraJvmArgs: [] })
await window.api.setSettings({ maxMemoryMb, extraJvmArgs: parseArgs(jvmArgs) })
try {
await window.api.play()
await window.api.play(opts)
} catch (e) {
setError(`Échec du lancement : ${(e as Error).message}`)
setStatus('logged-in')
@@ -178,7 +197,9 @@ export default function App(): JSX.Element {
<div className="topbar">
<div className="brand">
OFLauncher
<span className="pack">All The Mods 10 · 1.21.1</span>
<span className="pack">
{pack ? `${pack.name} · MC ${pack.minecraft}` : 'All The Mods 10 · 1.21.1'}
</span>
</div>
<div className="profile">
<img src={`https://mc-heads.net/avatar/${profile?.uuid}`} alt="" />
@@ -220,14 +241,34 @@ export default function App(): JSX.Element {
onChange={(e) => setMaxMemoryMb(Number(e.target.value))}
/>
Mo
<input
className="jvm"
type="text"
placeholder="Args JVM (avancé)"
value={jvmArgs}
disabled={busy}
onChange={(e) => setJvmArgs(e.target.value)}
/>
<button className="linkbtn" onClick={() => void handlePlay({ repair: true })} disabled={busy}>
Vérifier les fichiers
</button>
<button className="linkbtn" onClick={handleOpenInstance}>
Ouvrir le dossier de l'instance
Ouvrir l'instance
</button>
<button className="linkbtn" onClick={handleOpenLogs}>
Ouvrir les logs
</button>
</div>
<button className="play" onClick={handlePlay} disabled={busy}>
{status === 'running' ? 'En jeu' : busy ? 'Patiente' : 'Jouer'}
</button>
{status === 'running' ? (
<button className="play stop" onClick={handleStop}>
Arrêter le jeu
</button>
) : (
<button className="play" onClick={() => void handlePlay()} disabled={busy}>
{busy ? 'Patiente' : 'Jouer'}
</button>
)}
</div>
{error && <div className="error">{error}</div>}
</div>
+28
View File
@@ -123,6 +123,20 @@ body {
.progress {
flex: 1;
min-width: 0;
}
/* Fenêtre réduite : la barre de progression passe sur sa propre ligne
(sinon les réglages la compriment jusqu'à la rendre invisible). */
@media (max-width: 1200px) {
.footer {
flex-wrap: wrap;
}
.progress {
order: -1;
flex-basis: 100%;
}
}
.progress .label {
@@ -180,6 +194,15 @@ button.play:disabled {
cursor: not-allowed;
}
button.play.stop {
background: var(--danger);
color: #2a0606;
}
button.play.stop:hover:not(:disabled) {
background: #ff6258;
}
.center {
flex: 1;
display: flex;
@@ -214,6 +237,7 @@ button.play:disabled {
.settings {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
font-size: 13px;
color: var(--text-dim);
@@ -228,6 +252,10 @@ button.play:disabled {
padding: 4px 6px;
}
.settings input.jvm {
width: 200px;
}
.error {
color: var(--danger);
font-size: 13px;