diff --git a/src-tauri/src/commands/platform.rs b/src-tauri/src/commands/platform.rs
index 4856833..890a48b 100644
--- a/src-tauri/src/commands/platform.rs
+++ b/src-tauri/src/commands/platform.rs
@@ -7,24 +7,26 @@ pub struct PlatformInfo {
pub is_mac: bool,
pub is_windows: bool,
pub is_android: bool,
+ pub arch: String,
}
#[tauri::command]
pub fn get_platform() -> PlatformInfo {
+ let arch = std::env::consts::ARCH.to_string();
#[cfg(target_os = "linux")]
{
- PlatformInfo { is_linux: true, is_mac: false, is_windows: false, is_android: false }
+ PlatformInfo { is_linux: true, is_mac: false, is_windows: false, is_android: false, arch }
}
#[cfg(target_os = "macos")]
{
- PlatformInfo { is_linux: false, is_mac: true, is_windows: false, is_android: false }
+ PlatformInfo { is_linux: false, is_mac: true, is_windows: false, is_android: false, arch }
}
#[cfg(target_os = "windows")]
{
- PlatformInfo { is_linux: false, is_mac: false, is_windows: true, is_android: false }
+ PlatformInfo { is_linux: false, is_mac: false, is_windows: true, is_android: false, arch }
}
#[cfg(target_os = "android")]
{
- PlatformInfo { is_linux: false, is_mac: false, is_windows: false, is_android: true }
+ PlatformInfo { is_linux: false, is_mac: false, is_windows: false, is_android: true, arch }
}
}
diff --git a/src/components/layout/DownloadOverlay.tsx b/src/components/layout/DownloadOverlay.tsx
index 4a451e7..0e08d46 100644
--- a/src/components/layout/DownloadOverlay.tsx
+++ b/src/components/layout/DownloadOverlay.tsx
@@ -32,7 +32,11 @@ export const DownloadOverlay = memo(function DownloadOverlay({ downloadProgress,
{downloadingIds.map((id) => {
const pct = downloadProgress[id] ?? 0;
const edition = editions.find((e) => e.instanceId === id || e.id === id);
- const name = edition?.name || t("download.gameFiles");
+ const name =
+ edition?.name ||
+ (id.startsWith("runner_")
+ ? id.replace(/^runner_/, "")
+ : t("download.gameFiles"));
return (
{edition?.logo ? (
diff --git a/src/components/views/SettingsView.tsx b/src/components/views/SettingsView.tsx
index bc79dfb..3b997db 100644
--- a/src/components/views/SettingsView.tsx
+++ b/src/components/views/SettingsView.tsx
@@ -61,7 +61,7 @@ const SettingsView = memo(function SettingsView() {
runnerDownloadProgress,
downloadRunner,
} = useGame();
- const { isLinux, isMac, isAndroid } = usePlatform();
+ const { isLinux, isMac, isAndroid, arch } = usePlatform();
const [focusIndex, setFocusIndex] = useState(null);
const [currentSubMenu, setCurrentSubMenu] = useState<
| "main"
@@ -535,15 +535,15 @@ const SettingsView = memo(function SettingsView() {
})
: t("settings.downloadRunner"),
type: "button",
+ textured: true,
onClick: () => {
if (!isRunnerDownloading) {
downloadRunner(
- "GE-Proton9-25",
- "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton9-25/GE-Proton9-25.tar.gz",
+ `GE-Proton11-6-${arch}`,
+ `https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton11-6/GE-Proton11-6-${arch}.tar.gz`,
);
}
},
- small: true,
});
}
diff --git a/src/hooks/useDiscordRPC.ts b/src/hooks/useDiscordRPC.ts
index 4414311..7a71ee5 100644
--- a/src/hooks/useDiscordRPC.ts
+++ b/src/hooks/useDiscordRPC.ts
@@ -51,7 +51,10 @@ export function useDiscordRPC({
const firstId = downloadingIds[0];
const pct = downloadProgress[firstId];
const downloadingName =
- editions.find((e) => e.id === firstId)?.name || "Game Files";
+ editions.find((e) => e.id === firstId)?.name ||
+ (firstId.startsWith("runner_")
+ ? firstId.replace(/^runner_/, "")
+ : "Game Files");
const extra =
downloadingIds.length > 1
? ` +${downloadingIds.length - 1} more`
diff --git a/src/hooks/useGameManager.ts b/src/hooks/useGameManager.ts
index 89a0f1b..e6d1135 100644
--- a/src/hooks/useGameManager.ts
+++ b/src/hooks/useGameManager.ts
@@ -464,12 +464,14 @@ export function useGameManager({
const downloadRunner = useCallback(
async (name: string, url: string) => {
if (isRunnerDownloading) return;
+ const runnerKey = `runner_${name}`;
setIsRunnerDownloading(true);
setRunnerDownloadProgress(0);
+ setDownloadingIds((prev) => [...prev, runnerKey]);
+ setDownloadProgress((prev) => ({ ...prev, [runnerKey]: 0 }));
setError(null);
try {
await TauriService.downloadRunner(name, url);
- setRunnerDownloadProgress(null);
} catch (e: unknown) {
console.error(e);
setError(
@@ -480,12 +482,29 @@ export function useGameManager({
: "Failed to download runner",
);
} finally {
+ setRunnerDownloadProgress(null);
+ setDownloadingIds((prev) => prev.filter((id) => id !== runnerKey));
+ setDownloadProgress((prev) => {
+ const next = { ...prev };
+ delete next[runnerKey];
+ return next;
+ });
setIsRunnerDownloading(false);
}
},
[isRunnerDownloading],
);
+ useEffect(() => {
+ if (!isRunnerDownloading) return;
+ const runnerKey = Object.keys(downloadProgress).find((key) =>
+ key.startsWith("runner_"),
+ );
+ if (runnerKey && downloadProgress[runnerKey] !== undefined) {
+ setRunnerDownloadProgress(downloadProgress[runnerKey]);
+ }
+ }, [downloadProgress, isRunnerDownloading]);
+
const toggleInstall = useCallback(
async (id: string) => {
if (downloadingIds.includes(id)) return;
diff --git a/src/hooks/usePlatform.ts b/src/hooks/usePlatform.ts
index 2a699c8..a958504 100644
--- a/src/hooks/usePlatform.ts
+++ b/src/hooks/usePlatform.ts
@@ -6,6 +6,7 @@ const DEFAULT = {
isMac: false,
isWindows: false,
isAndroid: false,
+ arch: "x86_64",
};
export function usePlatform() {
const [platform, setPlatform] = useState(DEFAULT);
@@ -15,6 +16,7 @@ export function usePlatform() {
isMac: boolean;
isWindows: boolean;
isAndroid: boolean;
+ arch: string;
}>("get_platform")
.then(setPlatform)
.catch(() => setPlatform(DEFAULT));