From 1e6d95c609817d1d9b8096d0bad3054ddc200e6f Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Sun, 12 Mar 2023 10:15:14 -0700 Subject: [PATCH] Maybe workable now --- cmd/playlist/main.go | 12 ++++++++++++ go.mod | 3 +++ playlist.css | 6 +++++- playlist.mjs | 32 +++++++++++++++++++++----------- 4 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 cmd/playlist/main.go create mode 100644 go.mod diff --git a/cmd/playlist/main.go b/cmd/playlist/main.go new file mode 100644 index 0000000..565f238 --- /dev/null +++ b/cmd/playlist/main.go @@ -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(".")))) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..761b389 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module woozle.org/neale/playlist + +go 1.18 diff --git a/playlist.css b/playlist.css index 57b397e..9b42b5f 100644 --- a/playlist.css +++ b/playlist.css @@ -59,4 +59,8 @@ audio { } .fin { animation: pulse 1s infinite; -} \ No newline at end of file +} + +.loading { + color: #555; +} diff --git a/playlist.mjs b/playlist.mjs index e44be0f..dc64bd7 100644 --- a/playlist.mjs +++ b/playlist.mjs @@ -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)