feat(launcher): Linux play wrapper, patch UX, Gitea sync cleanup

- Play on Linux: use launch.linux_wrapper (wine) or linux_steam_uri; chmod .exe after install
- Windows: retry EBUSY on MPQ replace; download to .new before rename
- After successful sync: remove .bak-* backups; realmlist only Data/enUS (ignore enGB)
- Gitea/distro merge: skip Fractured-Launcher* from GitHub assets (CI default-branch build wins)
- Omit blockmap and builder-debug from staged artifacts and Gitea uploads; upload script validates before clearing attachments
- README and launcher version 1.0.12

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Docker Build
2026-05-10 23:20:15 -05:00
parent 8ad6a2aca3
commit f88a303327
10 changed files with 250 additions and 43 deletions
+38 -3
View File
@@ -145,9 +145,44 @@ ipcMain.handle('launcher:checkUpdates', async () => {
ipcMain.handle('launcher:play', async () => {
const { config } = await readMergedConfig();
const exe = wowExePath(config);
const args = (config.launch && config.launch.args) || [];
const child = spawn(exe, args, {
cwd: config.game_dir,
const gameArgs = (config.launch && config.launch.args) || [];
const lc = config.launch || {};
const cwd = config.game_dir;
let cmd;
let spawnArgs;
if (process.platform === 'linux') {
const steamUri = String(lc.linux_steam_uri || '').trim();
const steamSpawn = Array.isArray(lc.linux_steam_spawn) ? lc.linux_steam_spawn.filter(Boolean) : [];
if (steamUri) {
if (steamSpawn.length) {
cmd = steamSpawn[0];
spawnArgs = [...steamSpawn.slice(1), steamUri];
} else {
const bin = String(lc.linux_steam_binary || 'steam').trim() || 'steam';
cmd = bin;
spawnArgs = [steamUri];
}
} else {
const wrap = Array.isArray(lc.linux_wrapper) ? lc.linux_wrapper.filter(Boolean) : [];
if (wrap.length) {
cmd = wrap[0];
spawnArgs = [...wrap.slice(1), exe, ...gameArgs];
} else {
throw new Error(
'On Linux, Wow.exe is a Windows program and cannot be run directly. ' +
'Set launch.linux_steam_uri (e.g. steam://rungameid/… for your Steam shortcut) ' +
'or launch.linux_wrapper (e.g. ["wine"]) in launcher.json.'
);
}
}
} else {
cmd = exe;
spawnArgs = gameArgs;
}
const child = spawn(cmd, spawnArgs, {
cwd,
detached: true,
stdio: 'ignore',
windowsHide: true,