aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2022-07-27 20:15:50 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2022-07-27 20:15:50 +0200
commitbb17b54478273116e1f48ff53476efb9f01cde7e (patch)
tree17050bfb547a575d4e0c0ad5a5baf96089859800
parent2fd1af916a333ca2ecaaa01bae2e43b922a4ca2e (diff)
downloadWRMS-bb17b54478273116e1f48ff53476efb9f01cde7e.tar.gz
WRMS-bb17b54478273116e1f48ff53476efb9f01cde7e.zip
intermediate commit
* use more llog * inform clients about their votes when initiating the connection * show song weights
-rw-r--r--main.go50
-rw-r--r--player.go1
-rw-r--r--web/client.html18
-rw-r--r--wrms.go33
4 files changed, 79 insertions, 23 deletions
diff --git a/main.go b/main.go
index 545c3b2..4067f63 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,8 @@ import (
"log"
"net/http"
+ "muhq.space/wrms/llog"
+
"github.com/google/uuid"
"nhooyr.io/websocket"
@@ -98,7 +100,7 @@ func playPauseHandler(w http.ResponseWriter, r *http.Request) {
func wsEndpoint(w http.ResponseWriter, r *http.Request) {
c, err := websocket.Accept(w, r, nil)
if err != nil {
- log.Println("%v", err)
+ log.Println(err)
return
}
@@ -136,12 +138,42 @@ func wsEndpoint(w http.ResponseWriter, r *http.Request) {
initialCmds = append(initialCmds, data)
}
- data, err := json.Marshal(Event{"add", wrms.Songs})
- if err != nil {
- log.Fatal(err)
- return
+ upvoted := []Song{}
+ downvoted := []Song{}
+ if len(wrms.Songs) > 0 {
+ data, err := json.Marshal(Event{"add", wrms.Songs})
+ if err != nil {
+ log.Fatal(err)
+ return
+ }
+ initialCmds = append(initialCmds, data)
+
+ for _, song := range wrms.Songs {
+ if _, ok := song.Upvotes[id.String()]; ok {
+ upvoted = append(upvoted, song)
+ } else if _, ok := song.Downvotes[id.String()]; ok {
+ downvoted = append(downvoted, song)
+ }
+ }
+ }
+
+ if len(upvoted) > 0 {
+ data, err := json.Marshal(Event{"upvoted", upvoted})
+ if err != nil {
+ log.Fatal(err)
+ return
+ }
+ initialCmds = append(initialCmds, data)
+ }
+
+ if len(downvoted) > 0 {
+ data, err := json.Marshal(Event{"downvoted", downvoted})
+ if err != nil {
+ log.Fatal(err)
+ return
+ }
+ initialCmds = append(initialCmds, data)
}
- initialCmds = append(initialCmds, data)
for _, data := range initialCmds {
log.Println("Sending initial cmd", string(data))
@@ -159,7 +191,7 @@ func wsEndpoint(w http.ResponseWriter, r *http.Request) {
return
}
- log.Println(fmt.Sprintf("Sending ev %s to %s", string(data), id))
+ llog.Debug(fmt.Sprintf("Sending ev %s to %s", string(data), id))
err = c.Write(ctx, websocket.MessageText, data)
if err != nil {
log.Println(err)
@@ -182,8 +214,8 @@ func setupRoutes() {
func main() {
setupRoutes()
- wrms.AddSong(NewDummySong("Lala", "SNFMT"))
- wrms.AddSong(NewDummySong("Hobelbank", "MC Wankwichtel"))
+ // wrms.AddSong(NewDummySong("Lala", "SNFMT"))
+ // wrms.AddSong(NewDummySong("Hobelbank", "MC Wankwichtel"))
log.Println(wrms)
defer wrms.Close()
diff --git a/player.go b/player.go
index 49b6d11..91e3468 100644
--- a/player.go
+++ b/player.go
@@ -42,6 +42,7 @@ func (player *Player) Play(song *Song) {
return
}
+ log.Println("Start playing", song)
player.Backends[song.Source].Play(song, player)
}
diff --git a/web/client.html b/web/client.html
index 3cddb29..2ca1f0d 100644
--- a/web/client.html
+++ b/web/client.html
@@ -77,9 +77,10 @@
let votes = new Map();
function formatSong(song) {
+ let s = song.weight + ' '
if (song.artist)
- return song.artist + ' - ' + song.title
- return song.title
+ return s + song.artist + ' - ' + song.title
+ return s + song.title
}
function renderPlaylist() {
@@ -148,6 +149,13 @@
renderPlaylist();
}
+ function handleVotes(direction, votedSongs) {
+ for (const song of votedSongs) {
+ votes.set(song.uri, direction)
+ }
+ renderPlaylist();
+ }
+
function handleUpdate(updated) {
for (const updated_song of updated) {
songs[songs.findIndex(function(s) {return s.uri == updated_song.uri})] = updated_song;
@@ -203,6 +211,12 @@
case "play":
handlePlay(cmd.songs[0])
break;
+ case "upvoted":
+ handleVotes("up", cmd.songs)
+ break;
+ case "downvoted":
+ handleVotes("down", cmd.songs)
+ break;
}
};
diff --git a/wrms.go b/wrms.go
index 12d7fd7..f8d0049 100644
--- a/wrms.go
+++ b/wrms.go
@@ -3,7 +3,8 @@ package main
import (
"encoding/json"
"fmt"
- "log"
+
+ "muhq.space/wrms/llog"
"github.com/google/uuid"
@@ -29,7 +30,7 @@ func NewSongFromJson(data []byte) (Song, error) {
var s Song
err := json.Unmarshal(data, &s)
if err != nil {
- log.Println(fmt.Sprintf("Failed to parse song data %s with %s", string(data), err))
+ llog.Error(fmt.Sprintf("Failed to parse song data %s with %s", string(data), err))
return s, err
}
@@ -50,7 +51,7 @@ type Connection struct {
}
func (c *Connection) Close() {
- log.Println("Closing connection %s", c.Id)
+ llog.Info(fmt.Sprintf("Closing connection %s", c.Id))
close(c.Events)
c.C.Close(websocket.StatusNormalClosure, "")
}
@@ -71,13 +72,14 @@ func NewWrms() Wrms {
}
func (wrms *Wrms) Close() {
- log.Println("Closing WRMS")
+ llog.Info("Closing WRMS")
for _, conn := range wrms.Connections {
conn.Close()
}
}
func (wrms *Wrms) Broadcast(cmd Event) {
+ llog.Info(fmt.Sprintf("Broadcasting %v"))
for i := 0; i < len(wrms.Connections); i++ {
wrms.Connections[i].Events <- cmd
}
@@ -87,7 +89,7 @@ func (wrms *Wrms) AddSong(song Song) {
wrms.Songs = append(wrms.Songs, song)
s := &wrms.Songs[len(wrms.Songs)-1]
wrms.Queue.Add(s)
- log.Println(fmt.Sprintf("Added song %s (ptr=%p) to Songs", s.Uri, s))
+ llog.Info(fmt.Sprintf("Added song %s (ptr=%p) to Songs", s.Uri, s))
}
func (wrms *Wrms) Next() {
@@ -97,7 +99,7 @@ func (wrms *Wrms) Next() {
return
}
- wrms.CurrentSong = *next
+ llog.Info(fmt.Sprintf("popped next song and removing it from the song list %v", next))
for i, s := range wrms.Songs {
if s.Uri == wrms.CurrentSong.Uri {
@@ -106,14 +108,21 @@ func (wrms *Wrms) Next() {
break
}
}
+
+ wrms.CurrentSong = *next
+
}
func (wrms *Wrms) PlayPause() {
var ev Event
if !wrms.Playing {
if wrms.CurrentSong.Uri == "" {
- log.Println("No song currently playing play the next")
+ llog.Info("No song currently playing play the next")
wrms.Next()
+ if wrms.CurrentSong.Uri == "" {
+ llog.Info("No song left to play")
+ return
+ }
}
ev = Event{"play", []Song{wrms.CurrentSong}}
wrms.Player.Play(&wrms.CurrentSong)
@@ -134,11 +143,11 @@ func (wrms *Wrms) AdjustSongWeight(connId string, songUri string, vote string) {
continue
}
- log.Println(fmt.Sprintf("Adjusting song %s (ptr=%p)", s.Uri, s))
+ llog.Info(fmt.Sprintf("Adjusting song %s (ptr=%p)", s.Uri, s))
switch vote {
case "up":
if _, ok := s.Upvotes[connId]; ok {
- log.Println(fmt.Sprintf("Double upvote of song %s by connections %s", songUri, connId))
+ llog.Error(fmt.Sprintf("Double upvote of song %s by connections %s", songUri, connId))
return
}
@@ -153,7 +162,7 @@ func (wrms *Wrms) AdjustSongWeight(connId string, songUri string, vote string) {
case "down":
if _, ok := s.Downvotes[connId]; ok {
- log.Println(fmt.Sprintf("Double downvote of song %s by connections %s", songUri, connId))
+ llog.Error(fmt.Sprintf("Double downvote of song %s by connections %s", songUri, connId))
return
}
@@ -176,12 +185,12 @@ func (wrms *Wrms) AdjustSongWeight(connId string, songUri string, vote string) {
delete(s.Upvotes, connId)
s.Weight -= 1
} else {
- log.Println(fmt.Sprintf("Double downvote of song %s by connections %s", songUri, connId))
+ llog.Error(fmt.Sprintf("Double unvote of song %s by connections %s", songUri, connId))
return
}
default:
- log.Fatal("invalid vote")
+ llog.Fatal("invalid vote")
}
wrms.Queue.Adjust(s)