aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--playlist.go13
-rw-r--r--wrms.go6
-rw-r--r--wrms_test.go42
3 files changed, 50 insertions, 11 deletions
diff --git a/playlist.go b/playlist.go
index becc85e..1fbd344 100644
--- a/playlist.go
+++ b/playlist.go
@@ -61,3 +61,16 @@ func (pl *Playlist) RemoveSong(s *Song) {
heap.Remove(pl, s.index)
llog.DDebug("removing song %p in the playlist (%p) -> %v", s, pl, pl)
}
+
+func (pl *Playlist) OrderedList() []*Song {
+ songs := make([]*Song, 0, pl.Len())
+
+ cpy := make(Playlist, 0, pl.Len())
+ copy(cpy, *pl)
+
+ for cpy.Len() > 0 {
+ songs = append(songs, heap.Pop(&cpy).(*Song))
+ }
+
+ return songs
+}
diff --git a/wrms.go b/wrms.go
index cd6cb70..a345767 100644
--- a/wrms.go
+++ b/wrms.go
@@ -240,11 +240,11 @@ func (wrms *Wrms) initConn(conn *Connection) error {
if len(wrms.Songs) > 0 {
initialCmds = append(initialCmds, newEvent("add", wrms.Songs))
- for _, song := range wrms.Songs {
+ for _, song := range wrms.queue.OrderedList() {
if _, ok := song.Upvotes[conn.Id]; ok {
- upvoted = append(upvoted, song)
+ upvoted = append(upvoted, *song)
} else if _, ok := song.Downvotes[conn.Id]; ok {
- downvoted = append(downvoted, song)
+ downvoted = append(downvoted, *song)
}
}
}
diff --git a/wrms_test.go b/wrms_test.go
index e2f5412..08a94bf 100644
--- a/wrms_test.go
+++ b/wrms_test.go
@@ -9,14 +9,14 @@ import (
type mockPlayer struct{}
-func (p *mockPlayer) Play(*Song) {}
-func (p *mockPlayer) PlayUri(string) {}
-func (p *mockPlayer) PlayData(io.Reader) {}
-func (p *mockPlayer) Search(pattern string) (res chan []Song) { return }
-func (p *mockPlayer) Playing() bool { return false }
-func (p *mockPlayer) Pause() {}
-func (p *mockPlayer) Continue() {}
-func (p *mockPlayer) Stop() {}
+func (p *mockPlayer) Play(*Song) {}
+func (p *mockPlayer) PlayUri(string) {}
+func (p *mockPlayer) PlayData(io.Reader) {}
+func (p *mockPlayer) Search(pattern map[string]string) (res chan []Song) { return }
+func (p *mockPlayer) Playing() bool { return false }
+func (p *mockPlayer) Pause() {}
+func (p *mockPlayer) Continue() {}
+func (p *mockPlayer) Stop() {}
var alice, _ = uuid.NewRandom()
@@ -31,6 +31,32 @@ func TestWrmsAdd(t *testing.T) {
}
}
+func TestWrmsAdd3Next3(t *testing.T) {
+ wrms := Wrms{Player: &mockPlayer{}}
+ songs := []Song{
+ NewDummySong("song1", "snfmt"),
+ NewDummySong("song2", "snfmt"),
+ NewDummySong("song3", "snfmt"),
+ }
+
+ for _, s := range songs {
+ wrms.AddSong(s)
+ }
+
+ if len(wrms.queue) != len(songs) {
+ t.Log("len should be 3")
+ t.Fail()
+ }
+
+ for _, s := range wrms.queue.OrderedList() {
+ wrms.Next()
+ if wrms.CurrentSong.Load().Uri != s.Uri {
+ t.Log("Not returning the next song")
+ t.Fail()
+ }
+ }
+}
+
func TestWrmsAdjust(t *testing.T) {
wrms := Wrms{Player: &mockPlayer{}}
s1 := NewDummySong("song1", "snfmt")