110 lines
2.4 KiB
JavaScript
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()
|
|
} |