chore(launcher): Electron-only distro, CI sync with Windows pack

This commit is contained in:
Docker Build
2026-05-10 10:30:56 -05:00
parent a251e56c59
commit 377927b878
20 changed files with 6757 additions and 0 deletions
@@ -0,0 +1,130 @@
'use strict';
const logEl = document.getElementById('log');
const gameDirEl = document.getElementById('gameDir');
const btnBrowse = document.getElementById('btnBrowse');
const btnSave = document.getElementById('btnSaveFolder');
const btnSync = document.getElementById('btnSync');
const btnPlay = document.getElementById('btnPlay');
const btnCheckLauncher = document.getElementById('btnCheckLauncher');
const authCard = document.getElementById('authCard');
const btnAuth = document.getElementById('btnAuth');
const wowExeName = document.getElementById('wowExeName');
function log(msg) {
logEl.textContent += (logEl.textContent ? '\n' : '') + msg;
logEl.scrollTop = logEl.scrollHeight;
}
function setError(e) {
const m = e && (e.message || String(e));
log('Error: ' + m);
}
let authEnabled = false;
let signedIn = false;
async function refresh() {
try {
const s = await window.launcher.load();
authEnabled = s.authEnabled;
signedIn = !s.authEnabled;
wowExeName.textContent = s.wowExe || 'Wow.exe';
gameDirEl.value = s.gameDir || '';
authCard.classList.toggle('hidden', !authEnabled);
btnSync.disabled = !s.wowOk || (authEnabled && !signedIn);
btnPlay.classList.add('hidden');
btnPlay.disabled = true;
logEl.textContent = '';
if (!s.gameDir) log('Choose your WoW installation folder.');
else if (!s.wowOk) log('Folder does not look valid yet — pick the directory that contains ' + (s.wowExe || 'Wow.exe') + ', then Save folder.');
else if (authEnabled && !signedIn) log('Sign in, then download updates.');
else log('Ready — tap Download updates to sync from GitHub.');
} catch (e) {
setError(e);
}
}
window.launcher.onProgress((msg) => log(msg));
btnBrowse.addEventListener('click', async () => {
try {
const start = gameDirEl.value.trim();
const r = await window.launcher.pickFolder(start);
if (!r.canceled && r.path) {
gameDirEl.value = r.path;
log('Selected: ' + r.path);
}
} catch (e) {
setError(e);
}
});
btnSave.addEventListener('click', async () => {
try {
const dir = gameDirEl.value.trim();
if (!dir) {
log('Pick a folder with Browse… first.');
return;
}
const r = await window.launcher.saveGameDir(dir);
gameDirEl.value = r.gameDir;
btnSync.disabled = !r.wowOk || (authEnabled && !signedIn);
log('Saved installation folder.');
} catch (e) {
setError(e);
}
});
btnAuth.addEventListener('click', async () => {
try {
const u = document.getElementById('username').value;
const p = document.getElementById('password').value;
await window.launcher.auth(u, p);
signedIn = true;
log('Signed in.');
btnSync.disabled = !gameDirEl.value.trim() || (authEnabled && !signedIn);
const s = await window.launcher.load();
btnSync.disabled = !s.wowOk;
} catch (e) {
setError(e);
}
});
btnSync.addEventListener('click', async () => {
btnSync.disabled = true;
log('—');
try {
await window.launcher.sync();
btnPlay.classList.remove('hidden');
btnPlay.disabled = false;
log('Done. You can launch the game.');
} catch (e) {
setError(e);
} finally {
const s = await window.launcher.load().catch(() => null);
btnSync.disabled = !s || !s.wowOk || (authEnabled && !signedIn);
}
});
btnPlay.addEventListener('click', async () => {
try {
await window.launcher.play();
window.close();
} catch (e) {
setError(e);
}
});
btnCheckLauncher.addEventListener('click', async () => {
try {
log('Checking for launcher updates…');
const r = await window.launcher.checkUpdates();
if (r && r.skipped) log('Launcher auto-update: ' + (r.reason || 'skipped (use a packaged build).'));
else if (r && r.ok === false && r.error) setError(new Error(r.error));
} catch (e) {
setError(e);
}
});
refresh();