Now Playing backend implemented
This commit is contained in:
@@ -30,6 +30,13 @@ func (c *MediaAnnotationController) Scrobble() {
|
|||||||
c.SendError(responses.ERROR_GENERIC, "Internal error")
|
c.SendError(responses.ERROR_GENERIC, "Internal error")
|
||||||
}
|
}
|
||||||
beego.Info(fmt.Sprintf(`Scrobbled (%s) "%s" at %v`, id, mf.Title, time))
|
beego.Info(fmt.Sprintf(`Scrobbled (%s) "%s" at %v`, id, mf.Title, time))
|
||||||
|
} else {
|
||||||
|
mf, err := c.scrobbler.NowPlaying(id)
|
||||||
|
if err != nil {
|
||||||
|
beego.Error("Error setting", id, "as current song:", err)
|
||||||
|
c.SendError(responses.ERROR_GENERIC, "Internal error")
|
||||||
|
}
|
||||||
|
beego.Info(fmt.Sprintf(`Current Song (%s) "%s" at %v`, id, mf.Title, time))
|
||||||
}
|
}
|
||||||
|
|
||||||
response := c.NewEmpty()
|
response := c.NewEmpty()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func CreateMockNowPlayingRepo() *MockNowPlaying {
|
func CreateMockNowPlayingRepo() *MockNowPlaying {
|
||||||
return &MockNowPlaying{data: make(map[string]time.Time)}
|
return &MockNowPlaying{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type MockNowPlaying struct {
|
type MockNowPlaying struct {
|
||||||
@@ -20,7 +20,7 @@ func (m *MockNowPlaying) SetError(err bool) {
|
|||||||
m.err = err
|
m.err = err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockNowPlaying) Add(id string) error {
|
func (m *MockNowPlaying) Set(id string) error {
|
||||||
if m.err {
|
if m.err {
|
||||||
return errors.New("Error!")
|
return errors.New("Error!")
|
||||||
}
|
}
|
||||||
@@ -28,3 +28,7 @@ func (m *MockNowPlaying) Add(id string) error {
|
|||||||
m.start = time.Now()
|
m.start = time.Now()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MockNowPlaying) Current() (string, time.Time) {
|
||||||
|
return m.id, m.start
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,5 +10,5 @@ type NowPlayingInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type NowPlayingRepository interface {
|
type NowPlayingRepository interface {
|
||||||
Add(trackId string) error
|
Set(trackId string) error
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-1
@@ -41,5 +41,14 @@ func (s *scrobbler) Register(id string, playDate time.Time) (*domain.MediaFile,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *scrobbler) NowPlaying(id string) (*domain.MediaFile, error) {
|
func (s *scrobbler) NowPlaying(id string) (*domain.MediaFile, error) {
|
||||||
return nil, errors.New("Not implemented")
|
mf, err := s.mfRepo.Get(id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if mf == nil {
|
||||||
|
return nil, errors.New(fmt.Sprintf(`Id "%s" not found`, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
return mf, s.npRepo.Set(id)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,29 @@ func TestScrobbler(t *testing.T) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Convey("When I inform the song that is now playing", func() {
|
||||||
|
mf, err := scrobbler.NowPlaying("2")
|
||||||
|
|
||||||
|
Convey("Then I get the song for that id back", func() {
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
So(mf.Title, ShouldEqual, "Hands Of Time")
|
||||||
|
})
|
||||||
|
|
||||||
|
Convey("And it saves the song as the one current playing", func() {
|
||||||
|
id, start := npRepo.Current()
|
||||||
|
So(id, ShouldEqual, "2")
|
||||||
|
So(start, ShouldHappenBefore, time.Now())
|
||||||
|
})
|
||||||
|
|
||||||
|
Convey("And iTunes is not notified", func() {
|
||||||
|
So(itCtrl.played, ShouldNotContainKey, "2")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Reset(func() {
|
||||||
|
itCtrl.played = make(map[string]time.Time)
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ func NewNowPlayingRepository() engine.NowPlayingRepository {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *nowPlayingRepository) Add(id string) error {
|
func (r *nowPlayingRepository) Set(id string) error {
|
||||||
if id == "" {
|
if id == "" {
|
||||||
return errors.New("Id is required")
|
return errors.New("Id is required")
|
||||||
}
|
}
|
||||||
@@ -32,12 +32,7 @@ func (r *nowPlayingRepository) Add(id string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = Db().Set(nowPlayingKeyName, []byte(h))
|
return Db().SetEX(nowPlayingKeyName, int64(engine.NowPlayingExpire.Seconds()), []byte(h))
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
_, err = Db().Expire(nowPlayingKeyName, int64(engine.NowPlayingExpire.Seconds()))
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ engine.NowPlayingRepository = (*nowPlayingRepository)(nil)
|
var _ engine.NowPlayingRepository = (*nowPlayingRepository)(nil)
|
||||||
|
|||||||
Reference in New Issue
Block a user