From d821c824de70b537d78bac4f9567b81673f53e0e Mon Sep 17 00:00:00 2001 From: HsiangNianian Date: Tue, 13 Jan 2026 18:05:06 +0800 Subject: feat: enhance DownloadMonitor with improved event handling and UI updates --- ui/src/App.svelte | 522 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 359 insertions(+), 163 deletions(-) (limited to 'ui/src/App.svelte') diff --git a/ui/src/App.svelte b/ui/src/App.svelte index 3776033..d9dd7d0 100644 --- a/ui/src/App.svelte +++ b/ui/src/App.svelte @@ -6,140 +6,202 @@ let status = "Ready"; let showConsole = false; - let currentView = 'home'; + let currentView = "home"; let statusTimeout: any; // Watch for status changes to auto-dismiss $: if (status !== "Ready") { if (statusTimeout) clearTimeout(statusTimeout); statusTimeout = setTimeout(() => { - status = "Ready"; + status = "Ready"; }, 5000); } interface Version { - id: string; - type: string; - url: string; - time: string; - releaseTime: string; + id: string; + type: string; + url: string; + time: string; + releaseTime: string; } interface OfflineAccount { - username: string; - uuid: string; + username: string; + uuid: string; + } + + interface LauncherConfig { + min_memory: number; + max_memory: number; + java_path: string; + width: number; + height: number; } let versions: Version[] = []; let selectedVersion = ""; let currentAccount: OfflineAccount | null = null; + let settings: LauncherConfig = { + min_memory: 1024, + max_memory: 2048, + java_path: "java", + width: 854, + height: 480, + }; onMount(async () => { - checkAccount(); - try { - versions = await invoke("get_versions"); - if (versions.length > 0) { - // Find latest release or default to first - const latest = versions.find(v => v.type === 'release'); - selectedVersion = latest ? latest.id : versions[0].id; - } - } catch (e) { - console.error("Failed to fetch versions:", e); - status = "Error fetching versions: " + e; + checkAccount(); + loadSettings(); + try { + versions = await invoke("get_versions"); + if (versions.length > 0) { + // Find latest release or default to first + const latest = versions.find((v) => v.type === "release"); + selectedVersion = latest ? latest.id : versions[0].id; } + } catch (e) { + console.error("Failed to fetch versions:", e); + status = "Error fetching versions: " + e; + } }); async function checkAccount() { - try { - const acc = await invoke("get_active_account"); - currentAccount = acc as OfflineAccount | null; - } catch (e) { - console.error("Failed to check account:", e); - } + try { + const acc = await invoke("get_active_account"); + currentAccount = acc as OfflineAccount | null; + } catch (e) { + console.error("Failed to check account:", e); + } + } + + async function loadSettings() { + try { + settings = await invoke("get_settings"); + } catch (e) { + console.error("Failed to load settings:", e); + } + } + + async function saveSettings() { + try { + await invoke("save_settings", { config: settings }); + status = "Settings saved!"; + } catch (e) { + console.error("Failed to save settings:", e); + status = "Error saving settings: " + e; + } } async function login() { - if (currentAccount) { - if (confirm("Logout " + currentAccount.username + "?")) { - try { - await invoke("logout"); - currentAccount = null; - } catch(e) { - console.error("Logout failed:", e); - } - } - return; + if (currentAccount) { + if (confirm("Logout " + currentAccount.username + "?")) { + try { + await invoke("logout"); + currentAccount = null; + } catch (e) { + console.error("Logout failed:", e); + } } - const username = prompt("Enter username for offline login:"); - if (username) { - try { - currentAccount = await invoke("login_offline", { username }); - } catch(e) { - alert("Login failed: " + e); - } + return; + } + const username = prompt("Enter username for offline login:"); + if (username) { + try { + currentAccount = await invoke("login_offline", { username }); + } catch (e) { + alert("Login failed: " + e); } + } } async function startGame() { if (!currentAccount) { - alert("Please login first!"); - login(); - return; + alert("Please login first!"); + login(); + return; } if (!selectedVersion) { - alert("Please select a version!"); - return; + alert("Please select a version!"); + return; } status = "Preparing to launch " + selectedVersion + "..."; console.log("Invoking start_game for version:", selectedVersion); try { - const msg = await invoke("start_game", { versionId: selectedVersion }); - console.log("Response:", msg); - status = msg as string; + const msg = await invoke("start_game", { versionId: selectedVersion }); + console.log("Response:", msg); + status = msg as string; } catch (e) { - console.error(e); - status = "Error: " + e; + console.error(e); + status = "Error: " + e; } } -
+
-