hiss/src/queue.js
2024-11-29 13:09:49 -07:00

76 lines
1.5 KiB
JavaScript

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
}
}