Maybe workable now

This commit is contained in:
Neale Pickett 2023-03-12 10:15:14 -07:00
parent 8a5083cc94
commit 1e6d95c609
4 changed files with 41 additions and 12 deletions

12
cmd/playlist/main.go Normal file
View File

@ -0,0 +1,12 @@
package main
import (
"log"
"net/http"
)
func main() {
listen := ":8080"
log.Println("Listening on", listen)
log.Fatal(http.ListenAndServe(listen, http.FileServer(http.Dir("."))))
}

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module woozle.org/neale/playlist
go 1.18

View File

@ -59,4 +59,8 @@ audio {
}
.fin {
animation: pulse 1s infinite;
}
}
.loading {
color: #555;
}

View File

@ -39,8 +39,7 @@ class Playlist {
this.base = base
this.list = {}
this.current = null
this.startedAt = 0
this.pausedAt = 0
this.Stop()
}
/**
@ -78,7 +77,7 @@ class Playlist {
if (!duration) {
return 0
}
if (this.startedAt) {
if (this.Playing()) {
pos = ctx.currentTime - this.startedAt
pos = Math.min(pos, duration)
}
@ -96,7 +95,6 @@ class Playlist {
this.source.connect(ctx.destination)
this.source.start(0, offset)
this.startedAt = ctx.currentTime - offset
this.pausedAt = 0
}
Pause() {
@ -111,11 +109,19 @@ class Playlist {
this.source.stop()
}
this.pausedAt = 0
this.startedAt = 0
this.startedAt = -1
}
Playing() {
if (this.startedAt > -1) {
let pos = ctx.currentTime - this.startedAt
return pos < this.Duration()
}
return false
}
PlayPause() {
if (this.startedAt) {
if (this.Playing()) {
this.Pause()
} else {
this.Play()
@ -123,16 +129,16 @@ class Playlist {
}
Seek(pos) {
if (this.startedAt) {
this.play(pos)
if (this.Playing()) {
this.Play(pos)
} else {
this.pausedAt = this.Duration() * pos
}
}
CurrentTime() {
if (this.startedAt) {
return ctx.currentTime - this.startedAt
if (this.Playing()) {
return Math.min(ctx.currentTime - this.startedAt, this.Duration())
}
if (this.pausedAt) {
return this.pausedAt
@ -319,8 +325,12 @@ function run() {
audio.addEventListener("ended", ended)
audio.addEventListener("volumechange", volumechange)
for (let li of document.querySelectorAll("#playlist li")) {
playlist.Add(li.textContent)
li.classList.add("loading")
li.addEventListener("click", loadTrack)
playlist.Add(li.textContent)
.then(() => {
li.classList.remove("loading")
})
}
setInterval(() => timeupdate(), 250 * Millisecond)