131 lines
3.8 KiB
JavaScript
131 lines
3.8 KiB
JavaScript
'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();
|