diff options
Diffstat (limited to 'ui/src')
| -rw-r--r-- | ui/src/components/BottomBar.svelte | 7 | ||||
| -rw-r--r-- | ui/src/stores/game.svelte.ts | 32 |
2 files changed, 33 insertions, 6 deletions
diff --git a/ui/src/components/BottomBar.svelte b/ui/src/components/BottomBar.svelte index dcad9e8..a96b086 100644 --- a/ui/src/components/BottomBar.svelte +++ b/ui/src/components/BottomBar.svelte @@ -65,10 +65,13 @@ > {#if gameState.versions.length === 0} <option>Loading...</option> + {:else if gameState.installedVersionIds.length === 0} + <option disabled>No installed versions</option> {:else} {#each gameState.versions as version} - <option value={version.id}>{version.id} ({version.type})</option - > + {#if gameState.installedVersionIds.includes(version.id)} + <option value={version.id}>{version.id} ({version.type})</option> + {/if} {/each} {/if} </select> 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); |