75 lines
1.5 KiB
JavaScript
75 lines
1.5 KiB
JavaScript
import List from "./List.js"
|
|
import * as mode from "./panels.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
|
|
}
|
|
|
|
} |