import { settingsApi, auth, system as systemApi, services as servicesApi } from '../api.js'; import { icons } from '../icons.js'; export function renderSettings(container) { let queueStatus = null; let version = null; let interval; container.innerHTML = `

${icons.gitBranch(16)} Connessione Gitea

Testa la connessione al server Gitea configurato

${icons.bell(16)} Notifiche Telegram

Invia un messaggio di test al bot Telegram configurato

${icons.database(16)} Build Queue

Caricamento...

${icons.key(16)} Cambia Password

Minimo 12 caratteri

${icons.refreshCw(16)} Self-Update

Aggiorna AutoDeployer all'ultima versione. Il servizio si riavvierà automaticamente.

${icons.trash2(16)} Pulizia Container Orfani

Rimuovi container temporanei rimasti da deploy falliti.

${icons.hardDrive(16)} Pulizia Immagini Vecchie

Rimuovi immagini Docker obsolete, mantenendo le 2 più recenti per servizio.

`; // Gitea test document.getElementById('test-gitea').onclick = async () => { const btn = document.getElementById('test-gitea'); btn.textContent = '⏳ Testing...'; btn.disabled = true; const res = document.getElementById('gitea-result'); try { const r = await settingsApi.testGitea(); res.innerHTML = r.ok ? `${icons.checkCircle(16)} Connesso come ${r.user}` : `${icons.xCircle(16)} ${r.error}`; } catch (err) { res.innerHTML = `${icons.xCircle(16)} ${err.message}`; } res.classList.remove('hidden'); btn.textContent = 'Test Connessione'; btn.disabled = false; }; // Telegram test document.getElementById('test-telegram').onclick = async () => { const btn = document.getElementById('test-telegram'); btn.textContent = '⏳ Testing...'; btn.disabled = true; const res = document.getElementById('telegram-result'); try { const r = await settingsApi.testTelegram(); res.innerHTML = r.ok ? `${icons.checkCircle(16)} Messaggio inviato` : `${icons.xCircle(16)} ${r.error}`; } catch (err) { res.innerHTML = `${icons.xCircle(16)} ${err.message}`; } res.classList.remove('hidden'); btn.textContent = 'Test Telegram'; btn.disabled = false; }; // Queue status async function loadQueue() { try { queueStatus = await settingsApi.queueStatus(); document.getElementById('queue-content').innerHTML = `
In Attesa
${queueStatus.waiting}
Attive
${queueStatus.active}
Completate
${queueStatus.completed}
Fallite
${queueStatus.failed}
`; } catch {} } // Version async function loadVersion() { try { version = await systemApi.version(); document.getElementById('version-info').innerHTML = `Versione: ${version.commit} (${version.branch})
${version.date}`; } catch {} } // Password document.getElementById('pw-form').onsubmit = async (e) => { e.preventDefault(); const msg = document.getElementById('pw-msg'); msg.classList.add('hidden'); const newPw = document.getElementById('pw-new').value; const confirm = document.getElementById('pw-confirm').value; if (newPw !== confirm) { msg.textContent = 'Le password non coincidono'; msg.classList.remove('hidden'); return; } try { await auth.changePassword(document.getElementById('pw-current').value, newPw); msg.textContent = '✅ Password aggiornata'; msg.classList.remove('hidden'); document.getElementById('pw-form').reset(); } catch (err) { msg.textContent = '❌ ' + err.message; msg.classList.remove('hidden'); } }; // Self-update document.getElementById('self-update').onclick = async () => { const btn = document.getElementById('self-update'); btn.textContent = 'Aggiornamento...'; btn.disabled = true; const res = document.getElementById('update-result'); try { await systemApi.selfUpdate(); res.innerHTML = `${icons.checkCircle(14)} Update avviato. AutoDeployer si riavvierà a breve.`; } catch (err) { res.innerHTML = `${icons.xCircle(14)} ${err.message}`; } res.classList.remove('hidden'); btn.textContent = 'Aggiorna AutoDeployer'; btn.disabled = false; }; // Cleanup document.getElementById('cleanup-btn').onclick = async () => { const btn = document.getElementById('cleanup-btn'); btn.textContent = 'Scansione...'; btn.disabled = true; const res = document.getElementById('cleanup-result'); try { const r = await servicesApi.cleanup(); res.textContent = `${r.orphans_found} orfani trovati, ${r.results?.filter(x => x.status === 'removed').length || 0} rimossi`; } catch (err) { res.innerHTML = `${err.message}`; } res.classList.remove('hidden'); btn.textContent = 'Scansiona e Pulisci'; btn.disabled = false; }; // Prune document.getElementById('prune-btn').onclick = async () => { const btn = document.getElementById('prune-btn'); btn.textContent = 'Pulizia...'; btn.disabled = true; const res = document.getElementById('prune-result'); try { const r = await servicesApi.pruneImages(); res.textContent = `${r.results?.filter(x => x.status === 'removed').length || 0} immagini rimosse`; } catch (err) { res.innerHTML = `${err.message}`; } res.classList.remove('hidden'); btn.textContent = 'Pulisci Immagini'; btn.disabled = false; }; loadQueue(); loadVersion(); interval = setInterval(loadQueue, 10000); return () => clearInterval(interval); }