diff options
Diffstat (limited to 'ui/src/stores')
| -rw-r--r-- | ui/src/stores/game.svelte.ts | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/ui/src/stores/game.svelte.ts b/ui/src/stores/game.svelte.ts index 0af3daf..f66cc71 100644 --- a/ui/src/stores/game.svelte.ts +++ b/ui/src/stores/game.svelte.ts @@ -5,14 +5,38 @@ import { authState } from "./auth.svelte"; export class GameState { versions = $state<Version[]>([]); + installedVersionIds = $state<string[]>([]); selectedVersion = $state(""); async loadVersions() { try { - this.versions = await invoke<Version[]>("get_versions"); - if (this.versions.length > 0) { - const latest = this.versions.find((v) => v.type === "release"); - this.selectedVersion = latest ? latest.id : this.versions[0].id; + // Fetch both full version list and installed versions + const [allVersions, installedIds] = await Promise.all([ + invoke<Version[]>("get_versions"), + invoke<string[]>("get_installed_versions") + ]); + + this.versions = allVersions; + this.installedVersionIds = installedIds; + + if (this.installedVersionIds.length > 0) { + // Find the first installed version that appears in our manifest (preserving order) + // Usually we want the latest release that is installed + const installedVersions = this.versions.filter(v => this.installedVersionIds.includes(v.id)); + + // Try to find latest release among installed + const latestInstalledRelease = installedVersions.find(v => v.type === "release"); + + if (latestInstalledRelease) { + this.selectedVersion = latestInstalledRelease.id; + } else if (installedVersions.length > 0) { + this.selectedVersion = installedVersions[0].id; + } else { + // Fallback to just the first ID if not in manifest + this.selectedVersion = this.installedVersionIds[0]; + } + } else { + this.selectedVersion = ""; } } catch (e) { console.error("Failed to fetch versions:", e); |