hiss/old.src/main.js
2025-02-04 14:21:03 -07:00

110 lines
2.4 KiB
JavaScript

const app = window.app ??= {}
const view = window.view ??= {}
import Store from 'store'
import * as device from 'device'
import * as view from './view/index.js'
import * as entry from './entry.js'
export let store
export let saveTimeout
export const Start = async () => {
store = await Store.Open('app', 'data')
await device.Start()
await entry.Start()
await Init()
view.loading.remove()
}
export const Init = async () => {
let success = await loadState()
if(!success) {
await view.Init()
}
window.addEventListener('visibilitychange', async event => {
if(document.visibilityState !== 'visible') {
await saveState()
}
})
}
export const View = async () => {
view.main = document.getElementById('main')
view.loading = document.getElementById('loading')
view.loadingStatus = document.getElementById('loading-status')
await browser.View()
await queue.View()
await player.View()
mode.View()
input.View()
// player.Render({ name: 'Timeland, Smoke & Mirrors, The Land Before Timeland, & Hypertension', artist: 'King Gizzard & The Lizard Wizard' })
}
export const loadState = async () => {
let state = await store.Get('state')
Object.assign(app, state)
return state != undefined
}
export const saveState = () => {
app.lastSaved = Date.now()
console.log('saving')
return store.Set('state', app)
}
export const resetSaveTimer = () => {
if(saveTimeout)
clearTimeout(saveTimeout)
saveTimeout = setTimeout(() => saveState(), 10 * 1000)
}
export const Reload = async () => {
await store.Set('state', null)
window.location.reload()
}
export const OnKeydown = (event) => {
switch(event.key) {
case 'EndCall':
saveState().then(() => window.close())
break
case '1':
mode.Set(mode.states.PLAYER)
break
case '2':
mode.Set(mode.states.BROWSER)
break
case '3':
mode.Set(mode.states.QUEUE)
break
case '0':
main.Reload()
break
case 'ArrowLeft':
mode.Scroll(-1)
break
case 'ArrowRight':
mode.Scroll(1)
break
default:
if(mode.OnKeydown(event))
return
}
event.preventDefault()
resetSaveTimer()
}