Remove ratings from engine package

This commit is contained in:
Deluan
2020-08-02 17:58:07 -04:00
parent f29e1eb248
commit 696a0feb31
7 changed files with 75 additions and 105 deletions
+1 -2
View File
@@ -47,14 +47,13 @@ func CreateSubsonicAPIRouter() (*subsonic.Router, error) {
listGenerator := engine.NewListGenerator(dataStore, nowPlayingRepository) listGenerator := engine.NewListGenerator(dataStore, nowPlayingRepository)
users := engine.NewUsers(dataStore) users := engine.NewUsers(dataStore)
playlists := engine.NewPlaylists(dataStore) playlists := engine.NewPlaylists(dataStore)
ratings := engine.NewRatings(dataStore)
scrobbler := engine.NewScrobbler(dataStore, nowPlayingRepository) scrobbler := engine.NewScrobbler(dataStore, nowPlayingRepository)
search := engine.NewSearch(dataStore) search := engine.NewSearch(dataStore)
transcoderTranscoder := transcoder.New() transcoderTranscoder := transcoder.New()
transcodingCache := core.NewTranscodingCache() transcodingCache := core.NewTranscodingCache()
mediaStreamer := core.NewMediaStreamer(dataStore, transcoderTranscoder, transcodingCache) mediaStreamer := core.NewMediaStreamer(dataStore, transcoderTranscoder, transcodingCache)
players := engine.NewPlayers(dataStore) players := engine.NewPlayers(dataStore)
router := subsonic.New(browser, artwork, listGenerator, users, playlists, ratings, scrobbler, search, mediaStreamer, players, dataStore) router := subsonic.New(browser, artwork, listGenerator, users, playlists, scrobbler, search, mediaStreamer, players, dataStore)
return router, nil return router, nil
} }
-71
View File
@@ -1,71 +0,0 @@
package engine
import (
"context"
"github.com/deluan/navidrome/log"
"github.com/deluan/navidrome/model"
)
type Ratings interface {
SetStar(ctx context.Context, star bool, ids ...string) error
SetRating(ctx context.Context, id string, rating int) error
}
func NewRatings(ds model.DataStore) Ratings {
return &ratings{ds}
}
type ratings struct {
ds model.DataStore
}
func (r ratings) SetRating(ctx context.Context, id string, rating int) error {
exist, err := r.ds.Album(ctx).Exists(id)
if err != nil {
return err
}
if exist {
return r.ds.Album(ctx).SetRating(rating, id)
}
return r.ds.MediaFile(ctx).SetRating(rating, id)
}
func (r ratings) SetStar(ctx context.Context, star bool, ids ...string) error {
if len(ids) == 0 {
log.Warn(ctx, "Cannot star/unstar an empty list of ids")
return nil
}
return r.ds.WithTx(func(tx model.DataStore) error {
for _, id := range ids {
exist, err := r.ds.Album(ctx).Exists(id)
if err != nil {
return err
}
if exist {
err = tx.Album(ctx).SetStar(star, ids...)
if err != nil {
return err
}
continue
}
exist, err = r.ds.Artist(ctx).Exists(id)
if err != nil {
return err
}
if exist {
err = tx.Artist(ctx).SetStar(star, ids...)
if err != nil {
return err
}
continue
}
err = tx.MediaFile(ctx).SetStar(star, ids...)
if err != nil {
return err
}
}
return nil
})
}
-1
View File
@@ -8,7 +8,6 @@ var Set = wire.NewSet(
NewBrowser, NewBrowser,
NewListGenerator, NewListGenerator,
NewPlaylists, NewPlaylists,
NewRatings,
NewScrobbler, NewScrobbler,
NewSearch, NewSearch,
NewNowPlayingRepository, NewNowPlayingRepository,
+2 -3
View File
@@ -27,7 +27,6 @@ type Router struct {
Artwork core.Artwork Artwork core.Artwork
ListGenerator engine.ListGenerator ListGenerator engine.ListGenerator
Playlists engine.Playlists Playlists engine.Playlists
Ratings engine.Ratings
Scrobbler engine.Scrobbler Scrobbler engine.Scrobbler
Search engine.Search Search engine.Search
Users engine.Users Users engine.Users
@@ -39,10 +38,10 @@ type Router struct {
} }
func New(browser engine.Browser, artwork core.Artwork, listGenerator engine.ListGenerator, users engine.Users, func New(browser engine.Browser, artwork core.Artwork, listGenerator engine.ListGenerator, users engine.Users,
playlists engine.Playlists, ratings engine.Ratings, scrobbler engine.Scrobbler, search engine.Search, playlists engine.Playlists, scrobbler engine.Scrobbler, search engine.Search,
streamer core.MediaStreamer, players engine.Players, ds model.DataStore) *Router { streamer core.MediaStreamer, players engine.Players, ds model.DataStore) *Router {
r := &Router{Browser: browser, Artwork: artwork, ListGenerator: listGenerator, Playlists: playlists, r := &Router{Browser: browser, Artwork: artwork, ListGenerator: listGenerator, Playlists: playlists,
Ratings: ratings, Scrobbler: scrobbler, Search: search, Users: users, Streamer: streamer, Players: players, Scrobbler: scrobbler, Search: search, Users: users, Streamer: streamer, Players: players,
DataStore: ds} DataStore: ds}
r.mux = r.routes() r.mux = r.routes()
return r return r
+68 -24
View File
@@ -14,14 +14,11 @@ import (
type MediaAnnotationController struct { type MediaAnnotationController struct {
scrobbler engine.Scrobbler scrobbler engine.Scrobbler
ratings engine.Ratings ds model.DataStore
} }
func NewMediaAnnotationController(scrobbler engine.Scrobbler, ratings engine.Ratings) *MediaAnnotationController { func NewMediaAnnotationController(scrobbler engine.Scrobbler, ds model.DataStore) *MediaAnnotationController {
return &MediaAnnotationController{ return &MediaAnnotationController{scrobbler: scrobbler, ds: ds}
scrobbler: scrobbler,
ratings: ratings,
}
} }
func (c *MediaAnnotationController) SetRating(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *MediaAnnotationController) SetRating(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
@@ -35,7 +32,7 @@ func (c *MediaAnnotationController) SetRating(w http.ResponseWriter, r *http.Req
} }
log.Debug(r, "Setting rating", "rating", rating, "id", id) log.Debug(r, "Setting rating", "rating", rating, "id", id)
err = c.ratings.SetRating(r.Context(), id, rating) err = c.setRating(r.Context(), id, rating)
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
@@ -49,6 +46,17 @@ func (c *MediaAnnotationController) SetRating(w http.ResponseWriter, r *http.Req
return NewResponse(), nil return NewResponse(), nil
} }
func (c *MediaAnnotationController) setRating(ctx context.Context, id string, rating int) error {
exist, err := c.ds.Album(ctx).Exists(id)
if err != nil {
return err
}
if exist {
return c.ds.Album(ctx).SetRating(rating, id)
}
return c.ds.MediaFile(ctx).SetRating(rating, id)
}
func (c *MediaAnnotationController) Star(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *MediaAnnotationController) Star(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
ids := utils.ParamStrings(r, "id") ids := utils.ParamStrings(r, "id")
albumIds := utils.ParamStrings(r, "albumId") albumIds := utils.ParamStrings(r, "albumId")
@@ -67,23 +75,6 @@ func (c *MediaAnnotationController) Star(w http.ResponseWriter, r *http.Request)
return NewResponse(), nil return NewResponse(), nil
} }
func (c *MediaAnnotationController) setStar(ctx context.Context, starred bool, ids ...string) error {
if len(ids) == 0 {
return nil
}
log.Debug(ctx, "Changing starred", "ids", ids, "starred", starred)
err := c.ratings.SetStar(ctx, starred, ids...)
switch {
case err == model.ErrNotFound:
log.Error(ctx, err)
return NewError(responses.ErrorDataNotFound, "ID not found")
case err != nil:
log.Error(ctx, err)
return NewError(responses.ErrorGeneric, "Internal Error")
}
return nil
}
func (c *MediaAnnotationController) Unstar(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *MediaAnnotationController) Unstar(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
ids := utils.ParamStrings(r, "id") ids := utils.ParamStrings(r, "id")
albumIds := utils.ParamStrings(r, "albumId") albumIds := utils.ParamStrings(r, "albumId")
@@ -140,3 +131,56 @@ func (c *MediaAnnotationController) Scrobble(w http.ResponseWriter, r *http.Requ
} }
return NewResponse(), nil return NewResponse(), nil
} }
func (c *MediaAnnotationController) setStar(ctx context.Context, star bool, ids ...string) error {
if len(ids) == 0 {
return nil
}
log.Debug(ctx, "Changing starred", "ids", ids, "starred", star)
if len(ids) == 0 {
log.Warn(ctx, "Cannot star/unstar an empty list of ids")
return nil
}
err := c.ds.WithTx(func(tx model.DataStore) error {
for _, id := range ids {
exist, err := c.ds.Album(ctx).Exists(id)
if err != nil {
return err
}
if exist {
err = tx.Album(ctx).SetStar(star, ids...)
if err != nil {
return err
}
continue
}
exist, err = c.ds.Artist(ctx).Exists(id)
if err != nil {
return err
}
if exist {
err = tx.Artist(ctx).SetStar(star, ids...)
if err != nil {
return err
}
continue
}
err = tx.MediaFile(ctx).SetStar(star, ids...)
if err != nil {
return err
}
}
return nil
})
switch {
case err == model.ErrNotFound:
log.Error(ctx, err)
return NewError(responses.ErrorDataNotFound, "ID not found")
case err != nil:
log.Error(ctx, err)
return NewError(responses.ErrorGeneric, "Internal Error")
}
return nil
}
+3 -3
View File
@@ -30,8 +30,8 @@ func initAlbumListController(router *Router) *AlbumListController {
func initMediaAnnotationController(router *Router) *MediaAnnotationController { func initMediaAnnotationController(router *Router) *MediaAnnotationController {
scrobbler := router.Scrobbler scrobbler := router.Scrobbler
ratings := router.Ratings dataStore := router.DataStore
mediaAnnotationController := NewMediaAnnotationController(scrobbler, ratings) mediaAnnotationController := NewMediaAnnotationController(scrobbler, dataStore)
return mediaAnnotationController return mediaAnnotationController
} }
@@ -82,5 +82,5 @@ var allProviders = wire.NewSet(
NewUsersController, NewUsersController,
NewMediaRetrievalController, NewMediaRetrievalController,
NewStreamController, NewStreamController,
NewBookmarksController, wire.FieldsOf(new(*Router), "Browser", "Artwork", "ListGenerator", "Playlists", "Ratings", "Scrobbler", "Search", "Streamer", "DataStore"), NewBookmarksController, wire.FieldsOf(new(*Router), "Browser", "Artwork", "ListGenerator", "Playlists", "Scrobbler", "Search", "Streamer", "DataStore"),
) )
+1 -1
View File
@@ -17,7 +17,7 @@ var allProviders = wire.NewSet(
NewMediaRetrievalController, NewMediaRetrievalController,
NewStreamController, NewStreamController,
NewBookmarksController, NewBookmarksController,
wire.FieldsOf(new(*Router), "Browser", "Artwork", "ListGenerator", "Playlists", "Ratings", "Scrobbler", "Search", "Streamer", "DataStore"), wire.FieldsOf(new(*Router), "Browser", "Artwork", "ListGenerator", "Playlists", "Scrobbler", "Search", "Streamer", "DataStore"),
) )
func initSystemController(router *Router) *SystemController { func initSystemController(router *Router) *SystemController {