import List from "./list.js" import * as mode from "./mode.js" import * as player from "./player.js" const app = window.app ??= {} const view = window.view ??= {} export let list = new List(view.queue = { element: document.getElementById('queue'), }) export const Init = async () => { app.queue = [] } export const View = async () => { Render() } export const Render = async () => { list.Render(app.queue) } export const Move = (offset, eTrack = Focused()) => { let i = view.queue.cursor + offset if(i == app.queue.length || i < 0) { return } let n = app.queue[i] app.queue[view.queue.cursor] = n app.queue[i] = eTrack list.Render(app.queue, i) } export const Open = () => { Render() mode.Display('queue') } export const Focused = () => { return app.queue[view.queue.cursor] } export const Add = (eTrack) => { // TODO: solid way to determine if something is playable if(eTrack.entries) { return false } app.queue.push(eTrack) if(app.queue.length == 1 && player.State() === player.states.EMPTY) { player.Next() } return true } export const Remove = () => { app.queue.splice(view.queue.cursor, 1) Render() } export const RemoveAllBelow = () => { app.queue = app.queue.slice(0, view.queue.cursor) Render() } export const Shift = () => { let e if(app.queue.length > 0) { e = app.queue.shift() Render() return e } }