Simplify Subsonic API handler implementation
This commit is contained in:
@@ -6,7 +6,6 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/navidrome/navidrome/core/scrobbler"
|
||||
"github.com/navidrome/navidrome/log"
|
||||
"github.com/navidrome/navidrome/model"
|
||||
"github.com/navidrome/navidrome/server/subsonic/filter"
|
||||
@@ -14,20 +13,7 @@ import (
|
||||
"github.com/navidrome/navidrome/utils"
|
||||
)
|
||||
|
||||
type AlbumListController struct {
|
||||
ds model.DataStore
|
||||
scrobbler scrobbler.PlayTracker
|
||||
}
|
||||
|
||||
func NewAlbumListController(ds model.DataStore, scrobbler scrobbler.PlayTracker) *AlbumListController {
|
||||
c := &AlbumListController{
|
||||
ds: ds,
|
||||
scrobbler: scrobbler,
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *AlbumListController) getAlbumList(r *http.Request) (model.Albums, int64, error) {
|
||||
func (api *Router) getAlbumList(r *http.Request) (model.Albums, int64, error) {
|
||||
typ, err := requiredParamString(r, "type")
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
@@ -74,14 +60,14 @@ func (c *AlbumListController) getAlbumList(r *http.Request) (model.Albums, int64
|
||||
|
||||
opts.Offset = utils.ParamInt(r, "offset", 0)
|
||||
opts.Max = utils.MinInt(utils.ParamInt(r, "size", 10), 500)
|
||||
albums, err := c.ds.Album(r.Context()).GetAllWithoutGenres(opts)
|
||||
albums, err := api.ds.Album(r.Context()).GetAllWithoutGenres(opts)
|
||||
|
||||
if err != nil {
|
||||
log.Error(r, "Error retrieving albums", "error", err)
|
||||
return nil, 0, newError(responses.ErrorGeneric, "internal error")
|
||||
}
|
||||
|
||||
count, err := c.ds.Album(r.Context()).CountAll(opts)
|
||||
count, err := api.ds.Album(r.Context()).CountAll(opts)
|
||||
if err != nil {
|
||||
log.Error(r, "Error counting albums", "error", err)
|
||||
return nil, 0, newError(responses.ErrorGeneric, "internal error")
|
||||
@@ -90,8 +76,8 @@ func (c *AlbumListController) getAlbumList(r *http.Request) (model.Albums, int64
|
||||
return albums, count, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) GetAlbumList(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
albums, count, err := c.getAlbumList(r)
|
||||
func (api *Router) GetAlbumList(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
albums, count, err := api.getAlbumList(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -103,8 +89,8 @@ func (c *AlbumListController) GetAlbumList(w http.ResponseWriter, r *http.Reques
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) GetAlbumList2(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
albums, pageCount, err := c.getAlbumList(r)
|
||||
func (api *Router) GetAlbumList2(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
albums, pageCount, err := api.getAlbumList(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -116,20 +102,20 @@ func (c *AlbumListController) GetAlbumList2(w http.ResponseWriter, r *http.Reque
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) GetStarred(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
func (api *Router) GetStarred(r *http.Request) (*responses.Subsonic, error) {
|
||||
ctx := r.Context()
|
||||
options := filter.Starred()
|
||||
artists, err := c.ds.Artist(ctx).GetAll(options)
|
||||
artists, err := api.ds.Artist(ctx).GetAll(options)
|
||||
if err != nil {
|
||||
log.Error(r, "Error retrieving starred artists", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
albums, err := c.ds.Album(ctx).GetAllWithoutGenres(options)
|
||||
albums, err := api.ds.Album(ctx).GetAllWithoutGenres(options)
|
||||
if err != nil {
|
||||
log.Error(r, "Error retrieving starred albums", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
mediaFiles, err := c.ds.MediaFile(ctx).GetAll(options)
|
||||
mediaFiles, err := api.ds.MediaFile(ctx).GetAll(options)
|
||||
if err != nil {
|
||||
log.Error(r, "Error retrieving starred mediaFiles", "error", err)
|
||||
return nil, err
|
||||
@@ -143,8 +129,8 @@ func (c *AlbumListController) GetStarred(w http.ResponseWriter, r *http.Request)
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) GetStarred2(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
resp, err := c.GetStarred(w, r)
|
||||
func (api *Router) GetStarred2(r *http.Request) (*responses.Subsonic, error) {
|
||||
resp, err := api.GetStarred(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -154,9 +140,9 @@ func (c *AlbumListController) GetStarred2(w http.ResponseWriter, r *http.Request
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) GetNowPlaying(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
func (api *Router) GetNowPlaying(r *http.Request) (*responses.Subsonic, error) {
|
||||
ctx := r.Context()
|
||||
npInfo, err := c.scrobbler.GetNowPlaying(ctx)
|
||||
npInfo, err := api.scrobbler.GetNowPlaying(ctx)
|
||||
if err != nil {
|
||||
log.Error(r, "Error retrieving now playing list", "error", err)
|
||||
return nil, err
|
||||
@@ -166,7 +152,7 @@ func (c *AlbumListController) GetNowPlaying(w http.ResponseWriter, r *http.Reque
|
||||
response.NowPlaying = &responses.NowPlaying{}
|
||||
response.NowPlaying.Entry = make([]responses.NowPlayingEntry, len(npInfo))
|
||||
for i, np := range npInfo {
|
||||
mf, err := c.ds.MediaFile(ctx).Get(np.TrackID)
|
||||
mf, err := api.ds.MediaFile(ctx).Get(np.TrackID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -180,13 +166,13 @@ func (c *AlbumListController) GetNowPlaying(w http.ResponseWriter, r *http.Reque
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) GetRandomSongs(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
func (api *Router) GetRandomSongs(r *http.Request) (*responses.Subsonic, error) {
|
||||
size := utils.MinInt(utils.ParamInt(r, "size", 10), 500)
|
||||
genre := utils.ParamString(r, "genre")
|
||||
fromYear := utils.ParamInt(r, "fromYear", 0)
|
||||
toYear := utils.ParamInt(r, "toYear", 0)
|
||||
|
||||
songs, err := c.getSongs(r.Context(), 0, size, filter.SongsByRandom(genre, fromYear, toYear))
|
||||
songs, err := api.getSongs(r.Context(), 0, size, filter.SongsByRandom(genre, fromYear, toYear))
|
||||
if err != nil {
|
||||
log.Error(r, "Error retrieving random songs", "error", err)
|
||||
return nil, err
|
||||
@@ -198,12 +184,12 @@ func (c *AlbumListController) GetRandomSongs(w http.ResponseWriter, r *http.Requ
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) GetSongsByGenre(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
|
||||
func (api *Router) GetSongsByGenre(r *http.Request) (*responses.Subsonic, error) {
|
||||
count := utils.MinInt(utils.ParamInt(r, "count", 10), 500)
|
||||
offset := utils.MinInt(utils.ParamInt(r, "offset", 0), 500)
|
||||
genre := utils.ParamString(r, "genre")
|
||||
|
||||
songs, err := c.getSongs(r.Context(), offset, count, filter.SongsByGenre(genre))
|
||||
songs, err := api.getSongs(r.Context(), offset, count, filter.SongsByGenre(genre))
|
||||
if err != nil {
|
||||
log.Error(r, "Error retrieving random songs", "error", err)
|
||||
return nil, err
|
||||
@@ -215,8 +201,8 @@ func (c *AlbumListController) GetSongsByGenre(w http.ResponseWriter, r *http.Req
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (c *AlbumListController) getSongs(ctx context.Context, offset, size int, opts filter.Options) (model.MediaFiles, error) {
|
||||
func (api *Router) getSongs(ctx context.Context, offset, size int, opts filter.Options) (model.MediaFiles, error) {
|
||||
opts.Offset = offset
|
||||
opts.Max = size
|
||||
return c.ds.MediaFile(ctx).GetAll(opts)
|
||||
return api.ds.MediaFile(ctx).GetAll(opts)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user