boot.js 1.7 KB

123456789101112131415161718192021222324252627
  1. function display(state) {
  2. document.getElementById('status').textContent = state.message
  3. document.getElementById('actions').hidden = !['error','stopped','disconnected'].includes(state.phase)
  4. document.getElementById('retry').textContent = state.phase === 'disconnected' ? '重新连接' : state.phase === 'stopped' ? '启动后台服务' : '重试'
  5. document.getElementById('status').setAttribute('role', state.phase === 'error' ? 'alert' : 'status')
  6. document.getElementById('force-sync').hidden = state.phase !== 'error' || state.canForceSync !== true
  7. document.querySelector('main').setAttribute('aria-busy', String(['starting','restarting','stopping'].includes(state.phase)))
  8. }
  9. document.getElementById('force-sync').onclick = async () => {
  10. const controls = [...document.querySelectorAll('#actions button')]
  11. for (const button of controls) button.disabled = true
  12. try { await window.yaoyaoDesktop.forceSync(); await render() }
  13. catch { display({ phase: 'error', message: '覆盖未完成,请重试或查看服务日志。' }) }
  14. finally { for (const button of controls) button.disabled = false }
  15. }
  16. async function render() {
  17. try { display(await window.yaoyaoDesktop.status()) }
  18. catch { display({ phase: 'error', message: '无法读取启动状态,请重试或查看服务日志。' }) }
  19. }
  20. document.getElementById('retry').onclick = async () => {
  21. document.getElementById('retry').disabled = true
  22. try { await window.yaoyaoDesktop.retry(); await render() }
  23. catch { display({ phase: 'error', message: '启动未完成,请重试或查看服务日志。' }) }
  24. finally { document.getElementById('retry').disabled = false }
  25. }
  26. document.getElementById('logs').onclick = () => window.yaoyaoDesktop.logs()
  27. void render();setInterval(() => { void render() }, 500)