Implemented nowplaying repo

This commit is contained in:
Deluan 2016-03-16 20:51:03 -04:00
parent f6866f23a0
commit 9bfb61d994
4 changed files with 34 additions and 12 deletions

View File

@ -11,7 +11,8 @@ func CreateMockNowPlayingRepo() *MockNowPlaying {
type MockNowPlaying struct { type MockNowPlaying struct {
NowPlayingRepository NowPlayingRepository
data map[string]time.Time id string
start time.Time
err bool err bool
} }
@ -23,6 +24,7 @@ func (m *MockNowPlaying) Add(id string) error {
if m.err { if m.err {
return errors.New("Error!") return errors.New("Error!")
} }
m.data[id] = time.Now() m.id = id
m.start = time.Now()
return nil return nil
} }

View File

@ -11,10 +11,11 @@ import (
type Scrobbler interface { type Scrobbler interface {
Register(id string, playDate time.Time) (*domain.MediaFile, error) 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 { func NewScrobbler(itunes itunesbridge.ItunesControl, mr domain.MediaFileRepository, npr NowPlayingRepository) Scrobbler {
return scrobbler{itunes, mr, npr} return &scrobbler{itunes, mr, npr}
} }
type scrobbler struct { type scrobbler struct {
@ -23,7 +24,7 @@ type scrobbler struct {
npRepo NowPlayingRepository 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) mf, err := s.mfRepo.Get(id)
if err != nil { if err != nil {
return nil, err return nil, err
@ -38,3 +39,7 @@ func (s scrobbler) Register(id string, playDate time.Time) (*domain.MediaFile, e
} }
return mf, nil return mf, nil
} }
func (s *scrobbler) NowPlaying(id string) (*domain.MediaFile, error) {
return nil, errors.New("Not implemented")
}

View File

@ -9,7 +9,7 @@ import (
) )
var ( var (
keyName = []byte("checksums") checkSumKeyName = []byte("checksums")
) )
type checkSumRepository struct { type checkSumRepository struct {
@ -25,7 +25,7 @@ func NewCheckSumRepository() scanner.CheckSumRepository {
func (r *checkSumRepository) loadData() { func (r *checkSumRepository) loadData() {
r.data = make(map[string]string) r.data = make(map[string]string)
pairs, err := Db().HGetAll(keyName) pairs, err := Db().HGetAll(checkSumKeyName)
if err != nil { if err != nil {
beego.Error("Error loading CheckSums:", err) beego.Error("Error loading CheckSums:", err)
} }
@ -39,7 +39,7 @@ func (r *checkSumRepository) Put(id, sum string) error {
if id == "" { if id == "" {
return errors.New("Id is required") return errors.New("Id is required")
} }
_, err := Db().HSet(keyName, []byte(id), []byte(sum)) _, err := Db().HSet(checkSumKeyName, []byte(id), []byte(sum))
return err return err
} }
@ -48,7 +48,7 @@ func (r *checkSumRepository) Get(id string) (string, error) {
} }
func (r *checkSumRepository) SetData(newSums map[string]string) error { func (r *checkSumRepository) SetData(newSums map[string]string) error {
Db().HClear(keyName) Db().HClear(checkSumKeyName)
pairs := make([]ledis.FVPair, len(newSums)) pairs := make([]ledis.FVPair, len(newSums))
r.data = make(map[string]string) r.data = make(map[string]string)
i := 0 i := 0
@ -58,5 +58,5 @@ func (r *checkSumRepository) SetData(newSums map[string]string) error {
r.data[id] = sum r.data[id] = sum
i++ i++
} }
return Db().HMset(keyName, pairs...) return Db().HMset(checkSumKeyName, pairs...)
} }

View File

@ -1,19 +1,24 @@
package persistence package persistence
import ( import (
"encoding/json"
"errors" "errors"
"time" "time"
"github.com/deluan/gosonic/engine" "github.com/deluan/gosonic/engine"
) )
var (
nowPlayingKeyName = []byte("nowplaying")
)
type nowPlayingRepository struct { type nowPlayingRepository struct {
ledisRepository ledisRepository
} }
func NewNowPlayingRepository() engine.NowPlayingRepository { func NewNowPlayingRepository() engine.NowPlayingRepository {
r := &nowPlayingRepository{} r := &nowPlayingRepository{}
r.init("nnowplaying", &engine.NowPlayingInfo{}) r.init("nowplaying", &engine.NowPlayingInfo{})
return r return r
} }
@ -22,7 +27,17 @@ func (r *nowPlayingRepository) Add(id string) error {
return errors.New("Id is required") return errors.New("Id is required")
} }
m := &engine.NowPlayingInfo{TrackId: id, Start: time.Now()} 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) var _ engine.NowPlayingRepository = (*nowPlayingRepository)(nil)