Register PlayCount/Date in the DB, if DevUseFolderScanner is true
This commit is contained in:
@@ -33,6 +33,7 @@ type listGenerator struct {
|
||||
npRepo NowPlayingRepository
|
||||
}
|
||||
|
||||
// TODO: Only return albums that have the SortBy field != empty
|
||||
func (g *listGenerator) query(qo model.QueryOptions, offset int, size int) (Entries, error) {
|
||||
qo.Offset = offset
|
||||
qo.Size = size
|
||||
|
||||
+14
-2
@@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/cloudsonic/sonic-server/conf"
|
||||
"github.com/cloudsonic/sonic-server/itunesbridge"
|
||||
"github.com/cloudsonic/sonic-server/log"
|
||||
"github.com/cloudsonic/sonic-server/model"
|
||||
@@ -21,13 +22,14 @@ type Scrobbler interface {
|
||||
NowPlaying(ctx context.Context, playerId int, playerName, trackId, username string) (*model.MediaFile, error)
|
||||
}
|
||||
|
||||
func NewScrobbler(itunes itunesbridge.ItunesControl, mr model.MediaFileRepository, npr NowPlayingRepository) Scrobbler {
|
||||
return &scrobbler{itunes, mr, npr}
|
||||
func NewScrobbler(itunes itunesbridge.ItunesControl, mr model.MediaFileRepository, alr model.AlbumRepository, npr NowPlayingRepository) Scrobbler {
|
||||
return &scrobbler{itunes: itunes, mfRepo: mr, alRepo: alr, npRepo: npr}
|
||||
}
|
||||
|
||||
type scrobbler struct {
|
||||
itunes itunesbridge.ItunesControl
|
||||
mfRepo model.MediaFileRepository
|
||||
alRepo model.AlbumRepository
|
||||
npRepo NowPlayingRepository
|
||||
}
|
||||
|
||||
@@ -71,6 +73,16 @@ func (s *scrobbler) detectSkipped(ctx context.Context, playerId int, trackId str
|
||||
func (s *scrobbler) Register(ctx context.Context, playerId int, trackId string, playTime time.Time) (*model.MediaFile, error) {
|
||||
s.detectSkipped(ctx, playerId, trackId)
|
||||
|
||||
if conf.Sonic.DevUseFileScanner {
|
||||
mf, err := s.mfRepo.Get(trackId)
|
||||
if err != nil {
|
||||
err = s.mfRepo.MarkAsPlayed(trackId, playTime)
|
||||
return nil, err
|
||||
}
|
||||
err = s.alRepo.MarkAsPlayed(mf.AlbumID, playTime)
|
||||
return mf, err
|
||||
}
|
||||
|
||||
mf, err := s.mfRepo.Get(trackId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -17,10 +17,11 @@ func TestScrobbler(t *testing.T) {
|
||||
Init(t, false)
|
||||
|
||||
mfRepo := persistence.CreateMockMediaFileRepo()
|
||||
alRepo := persistence.CreateMockAlbumRepo()
|
||||
npRepo := engine.CreateMockNowPlayingRepo()
|
||||
itCtrl := &mockItunesControl{}
|
||||
|
||||
scrobbler := engine.NewScrobbler(itCtrl, mfRepo, npRepo)
|
||||
scrobbler := engine.NewScrobbler(itCtrl, mfRepo, alRepo, npRepo)
|
||||
|
||||
Convey("Given a DB with one song", t, func() {
|
||||
mfRepo.SetData(`[{"ID":"2","Title":"Hands Of Time"}]`, 1)
|
||||
@@ -89,10 +90,11 @@ func TestSkipping(t *testing.T) {
|
||||
Init(t, false)
|
||||
|
||||
mfRepo := persistence.CreateMockMediaFileRepo()
|
||||
alRepo := persistence.CreateMockAlbumRepo()
|
||||
npRepo := engine.CreateMockNowPlayingRepo()
|
||||
itCtrl := &mockItunesControl{}
|
||||
|
||||
scrobbler := engine.NewScrobbler(itCtrl, mfRepo, npRepo)
|
||||
scrobbler := engine.NewScrobbler(itCtrl, mfRepo, alRepo, npRepo)
|
||||
|
||||
Convey("Given a DB with three songs", t, func() {
|
||||
mfRepo.SetData(`[{"ID":"1","Title":"Femme Fatale"},{"ID":"2","Title":"Here She Comes Now"},{"ID":"3","Title":"Lady Godiva's Operation"}]`, 3)
|
||||
|
||||
Reference in New Issue
Block a user