diff --git a/engine/mock_nowplaying_repo.go b/engine/mock_nowplaying_repo.go index a1a95cb30..290538bcb 100644 --- a/engine/mock_nowplaying_repo.go +++ b/engine/mock_nowplaying_repo.go @@ -11,8 +11,9 @@ func CreateMockNowPlayingRepo() *MockNowPlaying { type MockNowPlaying struct { NowPlayingRepository - data map[string]time.Time - err bool + id string + start time.Time + err bool } func (m *MockNowPlaying) SetError(err bool) { @@ -23,6 +24,7 @@ func (m *MockNowPlaying) Add(id string) error { if m.err { return errors.New("Error!") } - m.data[id] = time.Now() + m.id = id + m.start = time.Now() return nil } diff --git a/engine/scrobbler.go b/engine/scrobbler.go index fb17d3a6b..feb240f6c 100644 --- a/engine/scrobbler.go +++ b/engine/scrobbler.go @@ -11,10 +11,11 @@ import ( type Scrobbler interface { Register(id string, playDate time.Time) (*domain.MediaFile, error) + NowPlaying(id string) (*domain.MediaFile, error) } func NewScrobbler(itunes itunesbridge.ItunesControl, mr domain.MediaFileRepository, npr NowPlayingRepository) Scrobbler { - return scrobbler{itunes, mr, npr} + return &scrobbler{itunes, mr, npr} } type scrobbler struct { @@ -23,7 +24,7 @@ type scrobbler struct { npRepo NowPlayingRepository } -func (s scrobbler) Register(id string, playDate time.Time) (*domain.MediaFile, error) { +func (s *scrobbler) Register(id string, playDate time.Time) (*domain.MediaFile, error) { mf, err := s.mfRepo.Get(id) if err != nil { return nil, err @@ -38,3 +39,7 @@ func (s scrobbler) Register(id string, playDate time.Time) (*domain.MediaFile, e } return mf, nil } + +func (s *scrobbler) NowPlaying(id string) (*domain.MediaFile, error) { + return nil, errors.New("Not implemented") +} diff --git a/persistence/checksum_repository.go b/persistence/checksum_repository.go index 5891f6437..13e4b61fa 100644 --- a/persistence/checksum_repository.go +++ b/persistence/checksum_repository.go @@ -9,7 +9,7 @@ import ( ) var ( - keyName = []byte("checksums") + checkSumKeyName = []byte("checksums") ) type checkSumRepository struct { @@ -25,7 +25,7 @@ func NewCheckSumRepository() scanner.CheckSumRepository { func (r *checkSumRepository) loadData() { r.data = make(map[string]string) - pairs, err := Db().HGetAll(keyName) + pairs, err := Db().HGetAll(checkSumKeyName) if err != nil { beego.Error("Error loading CheckSums:", err) } @@ -39,7 +39,7 @@ func (r *checkSumRepository) Put(id, sum string) error { if id == "" { return errors.New("Id is required") } - _, err := Db().HSet(keyName, []byte(id), []byte(sum)) + _, err := Db().HSet(checkSumKeyName, []byte(id), []byte(sum)) return err } @@ -48,7 +48,7 @@ func (r *checkSumRepository) Get(id string) (string, error) { } func (r *checkSumRepository) SetData(newSums map[string]string) error { - Db().HClear(keyName) + Db().HClear(checkSumKeyName) pairs := make([]ledis.FVPair, len(newSums)) r.data = make(map[string]string) i := 0 @@ -58,5 +58,5 @@ func (r *checkSumRepository) SetData(newSums map[string]string) error { r.data[id] = sum i++ } - return Db().HMset(keyName, pairs...) + return Db().HMset(checkSumKeyName, pairs...) } diff --git a/persistence/nowplaying_repository.go b/persistence/nowplaying_repository.go index ccbd02f79..507539005 100644 --- a/persistence/nowplaying_repository.go +++ b/persistence/nowplaying_repository.go @@ -1,19 +1,24 @@ package persistence import ( + "encoding/json" "errors" "time" "github.com/deluan/gosonic/engine" ) +var ( + nowPlayingKeyName = []byte("nowplaying") +) + type nowPlayingRepository struct { ledisRepository } func NewNowPlayingRepository() engine.NowPlayingRepository { r := &nowPlayingRepository{} - r.init("nnowplaying", &engine.NowPlayingInfo{}) + r.init("nowplaying", &engine.NowPlayingInfo{}) return r } @@ -22,7 +27,17 @@ func (r *nowPlayingRepository) Add(id string) error { return errors.New("Id is required") } m := &engine.NowPlayingInfo{TrackId: id, Start: time.Now()} - return r.saveOrUpdate(m.TrackId, m) + + h, err := json.Marshal(m) + if err != nil { + return err + } + err = Db().Set(nowPlayingKeyName, []byte(h)) + if err != nil { + return err + } + _, err = Db().Expire(nowPlayingKeyName, int64(engine.NowPlayingExpire.Seconds())) + return err } var _ engine.NowPlayingRepository = (*nowPlayingRepository)(nil)