/* global api */ const loadingEl = document.getElementById('loadingState'); const listEl = document.getElementById('vmList'); const emptyEl = document.getElementById('emptyState'); const errorEl = document.getElementById('error'); const noticeEl = document.getElementById('notice'); const refreshBtn = document.getElementById('refreshBtn'); const settingsBtn = document.getElementById('settingsBtn'); const settingsOverlay = document.getElementById('settingsOverlay'); const viewerPathDisplay = document.getElementById('viewerPathDisplay'); document.getElementById('logoutBtn').addEventListener('click', async () => { await api.proxmox.logout(); }); refreshBtn.addEventListener('click', () => loadVMs()); // ── Settings (Windows only — VirtViewer's install folder name carries the // version number, so auto-detection can miss non-standard installs) ── initSettings(); async function initSettings() { const platform = await api.settings.platform(); if (platform !== 'win32') return; settingsBtn.classList.remove('hidden'); settingsBtn.addEventListener('click', openSettings); document.getElementById('closeSettingsBtn').addEventListener('click', closeSettings); document.getElementById('browseViewerBtn').addEventListener('click', async () => { const chosen = await api.settings.browseViewerPath(); if (chosen) await refreshViewerPathDisplay(); }); document.getElementById('resetViewerBtn').addEventListener('click', async () => { await api.settings.clearViewerPath(); await refreshViewerPathDisplay(); }); } async function openSettings() { await refreshViewerPathDisplay(); settingsOverlay.classList.remove('hidden'); } function closeSettings() { settingsOverlay.classList.add('hidden'); } async function refreshViewerPathDisplay() { const viewerPath = await api.settings.getViewerPath(); viewerPathDisplay.textContent = viewerPath || 'automatisch erkannt'; } // ── Load on mount ───────────────────────────────────────── async function loadVMs() { clearMessages(); listEl.classList.add('hidden'); emptyEl.classList.add('hidden'); loadingEl.classList.remove('hidden'); const result = await api.proxmox.getVMs(); loadingEl.classList.add('hidden'); if (!result.success) { showError(result.error || 'Fehler beim Laden der VMs.'); return; } const vms = result.vms; if (vms.length === 0) { emptyEl.classList.remove('hidden'); return; } // Auto-connect when there is exactly one SPICE VM if (vms.length === 1) { showNotice(`Nur eine VM verfügbar — verbinde mit „${vms[0].name}" …`); await connectVM(vms[0]); return; } renderList(vms); } loadVMs(); // ── Render ──────────────────────────────────────────────── function renderList(vms) { // Only show the host when there's more than one — single-host setups don't need the noise. const multiHost = new Set(vms.map((vm) => vm.host)).size > 1; listEl.innerHTML = vms .map( (vm) => `