mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-16 07:12:24 +03:00
Implemented nowplaying repo
This commit is contained in:
parent
f6866f23a0
commit
9bfb61d994
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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")
|
||||||
|
}
|
||||||
|
@ -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...)
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user