'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();