diff --git a/client/mpd/djmpd/djmpd.go b/client/mpd/djmpd/djmpd.go index c0202e566f2b030a350d46d7aa690af3b8aac9d4..a4512ffc067f9a7b5139370f8f0aef28c05f5385 100644 --- a/client/mpd/djmpd/djmpd.go +++ b/client/mpd/djmpd/djmpd.go @@ -17,9 +17,7 @@ func main() { flag.Parse() db := djmpd.NewDJRandomDatabase() - player := mpd.NewPortAudioPlayer() - db.SetupPlayRecorder(player) - m := mpd.NewMPD(player, db) + m := mpd.NewMPD(db, db.GetPlayRecorder()) m.HandleURL("djrandom", db) log.Fatal(m.ListenAndServe(fmt.Sprintf(":%d", *port))) } diff --git a/client/mpd/djrandom.go b/client/mpd/djrandom.go index e43cded11264346b239374e8f7cb9f10d90589c6..3ba35357752d91ad4945edd5a297564c611207f7 100644 --- a/client/mpd/djrandom.go +++ b/client/mpd/djrandom.go @@ -120,11 +120,12 @@ type songReader struct { url string pos, size int64 resp *http.Response + closed bool } func (r *songReader) Read(buf []byte) (int, error) { var err error - for i := 0; i < 2; i++ { + for i := 0; !r.closed && i < 3; i++ { if r.pos >= r.size { return 0, io.EOF } @@ -144,7 +145,6 @@ func (r *songReader) Read(buf []byte) (int, error) { r.pos += int64(n) return n, err } - log.Printf("HTTP read error: %v", err) r.resp.Body.Close() r.resp = nil } @@ -152,6 +152,7 @@ func (r *songReader) Read(buf []byte) (int, error) { } func (r *songReader) Close() error { + r.closed = true if r.resp != nil { r.resp.Body.Close() } @@ -256,9 +257,8 @@ func (d *DJRandomDatabase) GetSong(songURL *url.URL) (mpd.Song, error) { return newDJRandomSong(&resp, d.client), nil } -func (d *DJRandomDatabase) SetupPlayRecorder(player mpd.Player) { - rec := newPlayRecorder(d.client) - player.SetSongPlayedCallback(rec.SongPlayed) +func (d *DJRandomDatabase) GetPlayRecorder() *PlayRecorder { + return newPlayRecorder(d.client) } type PlayRecorder struct { @@ -277,7 +277,7 @@ func newPlayRecorder(client *util.HttpClient) *PlayRecorder { } } -func (r *PlayRecorder) SongPlayed(song mpd.Song) { +func (r *PlayRecorder) Notify(song mpd.Song) { s, ok := song.(*DJRandomSong) if !ok { return