Make all Subsonic helper functions private

This commit is contained in:
Deluan
2020-08-13 22:11:18 -04:00
committed by Deluan Quintão
parent 22f34b3347
commit c271aa24d1
13 changed files with 150 additions and 150 deletions
+26 -26
View File
@@ -22,7 +22,7 @@ func NewAlbumListController(listGen engine.ListGenerator) *AlbumListController {
} }
func (c *AlbumListController) getNewAlbumList(r *http.Request) (engine.Entries, error) { func (c *AlbumListController) getNewAlbumList(r *http.Request) (engine.Entries, error) {
typ, err := RequiredParamString(r, "type", "Required string parameter 'type' is not present") typ, err := requiredParamString(r, "type", "Required string parameter 'type' is not present")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -69,22 +69,22 @@ func (c *AlbumListController) getNewAlbumList(r *http.Request) (engine.Entries,
func (c *AlbumListController) GetAlbumList(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *AlbumListController) GetAlbumList(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
albums, err := c.getNewAlbumList(r) albums, err := c.getNewAlbumList(r)
if err != nil { if err != nil {
return nil, NewError(responses.ErrorGeneric, err.Error()) return nil, newError(responses.ErrorGeneric, err.Error())
} }
response := NewResponse() response := newResponse()
response.AlbumList = &responses.AlbumList{Album: ToChildren(r.Context(), albums)} response.AlbumList = &responses.AlbumList{Album: toChildren(r.Context(), albums)}
return response, nil return response, nil
} }
func (c *AlbumListController) GetAlbumList2(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *AlbumListController) GetAlbumList2(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
albums, err := c.getNewAlbumList(r) albums, err := c.getNewAlbumList(r)
if err != nil { if err != nil {
return nil, NewError(responses.ErrorGeneric, err.Error()) return nil, newError(responses.ErrorGeneric, err.Error())
} }
response := NewResponse() response := newResponse()
response.AlbumList2 = &responses.AlbumList{Album: ToAlbums(r.Context(), albums)} response.AlbumList2 = &responses.AlbumList{Album: toAlbums(r.Context(), albums)}
return response, nil return response, nil
} }
@@ -92,14 +92,14 @@ func (c *AlbumListController) GetStarred(w http.ResponseWriter, r *http.Request)
artists, albums, mediaFiles, err := c.listGen.GetAllStarred(r.Context()) artists, albums, mediaFiles, err := c.listGen.GetAllStarred(r.Context())
if err != nil { if err != nil {
log.Error(r, "Error retrieving starred media", "error", err) log.Error(r, "Error retrieving starred media", "error", err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.Starred = &responses.Starred{} response.Starred = &responses.Starred{}
response.Starred.Artist = ToArtists(artists) response.Starred.Artist = toArtists(artists)
response.Starred.Album = ToChildren(r.Context(), albums) response.Starred.Album = toChildren(r.Context(), albums)
response.Starred.Song = ToChildren(r.Context(), mediaFiles) response.Starred.Song = toChildren(r.Context(), mediaFiles)
return response, nil return response, nil
} }
@@ -107,14 +107,14 @@ func (c *AlbumListController) GetStarred2(w http.ResponseWriter, r *http.Request
artists, albums, mediaFiles, err := c.listGen.GetAllStarred(r.Context()) artists, albums, mediaFiles, err := c.listGen.GetAllStarred(r.Context())
if err != nil { if err != nil {
log.Error(r, "Error retrieving starred media", "error", err) log.Error(r, "Error retrieving starred media", "error", err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.Starred2 = &responses.Starred{} response.Starred2 = &responses.Starred{}
response.Starred2.Artist = ToArtists(artists) response.Starred2.Artist = toArtists(artists)
response.Starred2.Album = ToAlbums(r.Context(), albums) response.Starred2.Album = toAlbums(r.Context(), albums)
response.Starred2.Song = ToChildren(r.Context(), mediaFiles) response.Starred2.Song = toChildren(r.Context(), mediaFiles)
return response, nil return response, nil
} }
@@ -122,14 +122,14 @@ func (c *AlbumListController) GetNowPlaying(w http.ResponseWriter, r *http.Reque
npInfos, err := c.listGen.GetNowPlaying(r.Context()) npInfos, err := c.listGen.GetNowPlaying(r.Context())
if err != nil { if err != nil {
log.Error(r, "Error retrieving now playing list", "error", err) log.Error(r, "Error retrieving now playing list", "error", err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.NowPlaying = &responses.NowPlaying{} response.NowPlaying = &responses.NowPlaying{}
response.NowPlaying.Entry = make([]responses.NowPlayingEntry, len(npInfos)) response.NowPlaying.Entry = make([]responses.NowPlayingEntry, len(npInfos))
for i, entry := range npInfos { for i, entry := range npInfos {
response.NowPlaying.Entry[i].Child = ToChild(r.Context(), entry) response.NowPlaying.Entry[i].Child = toChild(r.Context(), entry)
response.NowPlaying.Entry[i].UserName = entry.UserName response.NowPlaying.Entry[i].UserName = entry.UserName
response.NowPlaying.Entry[i].MinutesAgo = entry.MinutesAgo response.NowPlaying.Entry[i].MinutesAgo = entry.MinutesAgo
response.NowPlaying.Entry[i].PlayerId = entry.PlayerId response.NowPlaying.Entry[i].PlayerId = entry.PlayerId
@@ -147,12 +147,12 @@ func (c *AlbumListController) GetRandomSongs(w http.ResponseWriter, r *http.Requ
songs, err := c.listGen.GetSongs(r.Context(), 0, size, engine.SongsByRandom(genre, fromYear, toYear)) songs, err := c.listGen.GetSongs(r.Context(), 0, size, engine.SongsByRandom(genre, fromYear, toYear))
if err != nil { if err != nil {
log.Error(r, "Error retrieving random songs", "error", err) log.Error(r, "Error retrieving random songs", "error", err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.RandomSongs = &responses.Songs{} response.RandomSongs = &responses.Songs{}
response.RandomSongs.Songs = ToChildren(r.Context(), songs) response.RandomSongs.Songs = toChildren(r.Context(), songs)
return response, nil return response, nil
} }
@@ -164,11 +164,11 @@ func (c *AlbumListController) GetSongsByGenre(w http.ResponseWriter, r *http.Req
songs, err := c.listGen.GetSongs(r.Context(), offset, count, engine.SongsByGenre(genre)) songs, err := c.listGen.GetSongs(r.Context(), offset, count, engine.SongsByGenre(genre))
if err != nil { if err != nil {
log.Error(r, "Error retrieving random songs", "error", err) log.Error(r, "Error retrieving random songs", "error", err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.SongsByGenre = &responses.Songs{} response.SongsByGenre = &responses.Songs{}
response.SongsByGenre.Songs = ToChildren(r.Context(), songs) response.SongsByGenre.Songs = toChildren(r.Context(), songs)
return response, nil return response, nil
} }
+1 -1
View File
@@ -181,7 +181,7 @@ func HGone(r chi.Router, path string) {
} }
func SendError(w http.ResponseWriter, r *http.Request, err error) { func SendError(w http.ResponseWriter, r *http.Request, err error) {
response := NewResponse() response := newResponse()
code := responses.ErrorGeneric code := responses.ErrorGeneric
if e, ok := err.(SubsonicError); ok { if e, ok := err.(SubsonicError); ok {
code = e.code code = e.code
+15 -15
View File
@@ -24,14 +24,14 @@ func (c *BookmarksController) GetBookmarks(w http.ResponseWriter, r *http.Reques
repo := c.ds.MediaFile(r.Context()) repo := c.ds.MediaFile(r.Context())
bmks, err := repo.GetBookmarks() bmks, err := repo.GetBookmarks()
if err != nil { if err != nil {
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.Bookmarks = &responses.Bookmarks{} response.Bookmarks = &responses.Bookmarks{}
for _, bmk := range bmks { for _, bmk := range bmks {
b := responses.Bookmark{ b := responses.Bookmark{
Entry: []responses.Child{ChildFromMediaFile(r.Context(), bmk.Item)}, Entry: []responses.Child{childFromMediaFile(r.Context(), bmk.Item)},
Position: bmk.Position, Position: bmk.Position,
Username: user.UserName, Username: user.UserName,
Comment: bmk.Comment, Comment: bmk.Comment,
@@ -44,7 +44,7 @@ func (c *BookmarksController) GetBookmarks(w http.ResponseWriter, r *http.Reques
} }
func (c *BookmarksController) CreateBookmark(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *BookmarksController) CreateBookmark(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required") id, err := requiredParamString(r, "id", "id parameter required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -55,13 +55,13 @@ func (c *BookmarksController) CreateBookmark(w http.ResponseWriter, r *http.Requ
repo := c.ds.MediaFile(r.Context()) repo := c.ds.MediaFile(r.Context())
err = repo.AddBookmark(id, comment, position) err = repo.AddBookmark(id, comment, position)
if err != nil { if err != nil {
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return NewResponse(), nil return newResponse(), nil
} }
func (c *BookmarksController) DeleteBookmark(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *BookmarksController) DeleteBookmark(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required") id, err := requiredParamString(r, "id", "id parameter required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -69,9 +69,9 @@ func (c *BookmarksController) DeleteBookmark(w http.ResponseWriter, r *http.Requ
repo := c.ds.MediaFile(r.Context()) repo := c.ds.MediaFile(r.Context())
err = repo.DeleteBookmark(id) err = repo.DeleteBookmark(id)
if err != nil { if err != nil {
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return NewResponse(), nil return newResponse(), nil
} }
func (c *BookmarksController) GetPlayQueue(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *BookmarksController) GetPlayQueue(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
@@ -80,12 +80,12 @@ func (c *BookmarksController) GetPlayQueue(w http.ResponseWriter, r *http.Reques
repo := c.ds.PlayQueue(r.Context()) repo := c.ds.PlayQueue(r.Context())
pq, err := repo.Retrieve(user.ID) pq, err := repo.Retrieve(user.ID)
if err != nil { if err != nil {
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.PlayQueue = &responses.PlayQueue{ response.PlayQueue = &responses.PlayQueue{
Entry: ChildrenFromMediaFiles(r.Context(), pq.Items), Entry: childrenFromMediaFiles(r.Context(), pq.Items),
Current: pq.Current, Current: pq.Current,
Position: pq.Position, Position: pq.Position,
Username: user.UserName, Username: user.UserName,
@@ -96,7 +96,7 @@ func (c *BookmarksController) GetPlayQueue(w http.ResponseWriter, r *http.Reques
} }
func (c *BookmarksController) SavePlayQueue(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *BookmarksController) SavePlayQueue(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
ids, err := RequiredParamStrings(r, "id", "id parameter required") ids, err := requiredParamStrings(r, "id", "id parameter required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -125,7 +125,7 @@ func (c *BookmarksController) SavePlayQueue(w http.ResponseWriter, r *http.Reque
repo := c.ds.PlayQueue(r.Context()) repo := c.ds.PlayQueue(r.Context())
err = repo.Store(pq) err = repo.Store(pq)
if err != nil { if err != nil {
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return NewResponse(), nil return newResponse(), nil
} }
+33 -33
View File
@@ -30,7 +30,7 @@ func (c *BrowsingController) GetMusicFolders(w http.ResponseWriter, r *http.Requ
folders[i].Id = f.ID folders[i].Id = f.ID
folders[i].Name = f.Name folders[i].Name = f.Name
} }
response := NewResponse() response := newResponse()
response.MusicFolders = &responses.MusicFolders{Folders: folders} response.MusicFolders = &responses.MusicFolders{Folders: folders}
return response, nil return response, nil
} }
@@ -39,13 +39,13 @@ func (c *BrowsingController) getArtistIndex(ctx context.Context, mediaFolderId s
folder, err := c.ds.MediaFolder(ctx).Get(mediaFolderId) folder, err := c.ds.MediaFolder(ctx).Get(mediaFolderId)
if err != nil { if err != nil {
log.Error(ctx, "Error retrieving MediaFolder", "id", mediaFolderId, err) log.Error(ctx, "Error retrieving MediaFolder", "id", mediaFolderId, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
l, err := c.ds.Property(ctx).DefaultGet(model.PropLastScan+"-"+folder.Path, "-1") l, err := c.ds.Property(ctx).DefaultGet(model.PropLastScan+"-"+folder.Path, "-1")
if err != nil { if err != nil {
log.Error(ctx, "Error retrieving LastScan property", err) log.Error(ctx, "Error retrieving LastScan property", err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
var indexes model.ArtistIndexes var indexes model.ArtistIndexes
@@ -55,7 +55,7 @@ func (c *BrowsingController) getArtistIndex(ctx context.Context, mediaFolderId s
indexes, err = c.ds.Artist(ctx).GetIndex() indexes, err = c.ds.Artist(ctx).GetIndex()
if err != nil { if err != nil {
log.Error(ctx, "Error retrieving Indexes", err) log.Error(ctx, "Error retrieving Indexes", err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
} }
@@ -86,7 +86,7 @@ func (c *BrowsingController) GetIndexes(w http.ResponseWriter, r *http.Request)
return nil, err return nil, err
} }
response := NewResponse() response := newResponse()
response.Indexes = res response.Indexes = res
return response, nil return response, nil
} }
@@ -98,7 +98,7 @@ func (c *BrowsingController) GetArtists(w http.ResponseWriter, r *http.Request)
return nil, err return nil, err
} }
response := NewResponse() response := newResponse()
response.Artist = res response.Artist = res
return response, nil return response, nil
} }
@@ -111,10 +111,10 @@ func (c *BrowsingController) GetMusicDirectory(w http.ResponseWriter, r *http.Re
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(r, "Requested ID not found ", "id", id) log.Error(r, "Requested ID not found ", "id", id)
return nil, NewError(responses.ErrorDataNotFound, "Directory not found") return nil, newError(responses.ErrorDataNotFound, "Directory not found")
case err != nil: case err != nil:
log.Error(err) log.Error(err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
var dir *responses.Directory var dir *responses.Directory
@@ -126,15 +126,15 @@ func (c *BrowsingController) GetMusicDirectory(w http.ResponseWriter, r *http.Re
dir, err = c.buildAlbumDirectory(ctx, v) dir, err = c.buildAlbumDirectory(ctx, v)
default: default:
log.Error(r, "Requested ID of invalid type", "id", id, "entity", v) log.Error(r, "Requested ID of invalid type", "id", id, "entity", v)
return nil, NewError(responses.ErrorDataNotFound, "Directory not found") return nil, newError(responses.ErrorDataNotFound, "Directory not found")
} }
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.Directory = dir response.Directory = dir
return response, nil return response, nil
} }
@@ -147,19 +147,19 @@ func (c *BrowsingController) GetArtist(w http.ResponseWriter, r *http.Request) (
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(ctx, "Requested ArtistID not found ", "id", id) log.Error(ctx, "Requested ArtistID not found ", "id", id)
return nil, NewError(responses.ErrorDataNotFound, "Artist not found") return nil, newError(responses.ErrorDataNotFound, "Artist not found")
case err != nil: case err != nil:
log.Error(ctx, "Error retrieving artist", "id", id, err) log.Error(ctx, "Error retrieving artist", "id", id, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
albums, err := c.ds.Album(ctx).FindByArtist(id) albums, err := c.ds.Album(ctx).FindByArtist(id)
if err != nil { if err != nil {
log.Error(ctx, "Error retrieving albums by artist", "id", id, "name", artist.Name, err) log.Error(ctx, "Error retrieving albums by artist", "id", id, "name", artist.Name, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.ArtistWithAlbumsID3 = c.buildArtist(ctx, artist, albums) response.ArtistWithAlbumsID3 = c.buildArtist(ctx, artist, albums)
return response, nil return response, nil
} }
@@ -172,19 +172,19 @@ func (c *BrowsingController) GetAlbum(w http.ResponseWriter, r *http.Request) (*
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(ctx, "Requested AlbumID not found ", "id", id) log.Error(ctx, "Requested AlbumID not found ", "id", id)
return nil, NewError(responses.ErrorDataNotFound, "Album not found") return nil, newError(responses.ErrorDataNotFound, "Album not found")
case err != nil: case err != nil:
log.Error(ctx, "Error retrieving album", "id", id, err) log.Error(ctx, "Error retrieving album", "id", id, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
mfs, err := c.ds.MediaFile(ctx).FindByAlbum(id) mfs, err := c.ds.MediaFile(ctx).FindByAlbum(id)
if err != nil { if err != nil {
log.Error(ctx, "Error retrieving tracks from album", "id", id, "name", album.Name, err) log.Error(ctx, "Error retrieving tracks from album", "id", id, "name", album.Name, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.AlbumWithSongsID3 = c.buildAlbum(ctx, album, mfs) response.AlbumWithSongsID3 = c.buildAlbum(ctx, album, mfs)
return response, nil return response, nil
} }
@@ -197,14 +197,14 @@ func (c *BrowsingController) GetSong(w http.ResponseWriter, r *http.Request) (*r
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(r, "Requested MediaFileID not found ", "id", id) log.Error(r, "Requested MediaFileID not found ", "id", id)
return nil, NewError(responses.ErrorDataNotFound, "Song not found") return nil, newError(responses.ErrorDataNotFound, "Song not found")
case err != nil: case err != nil:
log.Error(r, "Error retrieving MediaFile", "id", id, err) log.Error(r, "Error retrieving MediaFile", "id", id, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
child := ChildFromMediaFile(ctx, *mf) child := childFromMediaFile(ctx, *mf)
response.Song = &child response.Song = &child
return response, nil return response, nil
} }
@@ -214,7 +214,7 @@ func (c *BrowsingController) GetGenres(w http.ResponseWriter, r *http.Request) (
genres, err := c.ds.Genre(ctx).GetAll() genres, err := c.ds.Genre(ctx).GetAll()
if err != nil { if err != nil {
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
for i, g := range genres { for i, g := range genres {
if strings.TrimSpace(g.Name) == "" { if strings.TrimSpace(g.Name) == "" {
@@ -225,8 +225,8 @@ func (c *BrowsingController) GetGenres(w http.ResponseWriter, r *http.Request) (
return genres[i].Name < genres[j].Name return genres[i].Name < genres[j].Name
}) })
response := NewResponse() response := newResponse()
response.Genres = ToGenres(genres) response.Genres = toGenres(genres)
return response, nil return response, nil
} }
@@ -236,7 +236,7 @@ const placeholderArtistImageLargeUrl = "https://lastfm.freetls.fastly.net/i/u/30
// TODO Integrate with Last.FM // TODO Integrate with Last.FM
func (c *BrowsingController) GetArtistInfo(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *BrowsingController) GetArtistInfo(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
response := NewResponse() response := newResponse()
response.ArtistInfo = &responses.ArtistInfo{} response.ArtistInfo = &responses.ArtistInfo{}
response.ArtistInfo.Biography = "Biography not available" response.ArtistInfo.Biography = "Biography not available"
response.ArtistInfo.SmallImageUrl = placeholderArtistImageSmallUrl response.ArtistInfo.SmallImageUrl = placeholderArtistImageSmallUrl
@@ -247,7 +247,7 @@ func (c *BrowsingController) GetArtistInfo(w http.ResponseWriter, r *http.Reques
// TODO Integrate with Last.FM // TODO Integrate with Last.FM
func (c *BrowsingController) GetArtistInfo2(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *BrowsingController) GetArtistInfo2(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
response := NewResponse() response := newResponse()
response.ArtistInfo2 = &responses.ArtistInfo2{} response.ArtistInfo2 = &responses.ArtistInfo2{}
response.ArtistInfo2.Biography = "Biography not available" response.ArtistInfo2.Biography = "Biography not available"
response.ArtistInfo2.SmallImageUrl = placeholderArtistImageSmallUrl response.ArtistInfo2.SmallImageUrl = placeholderArtistImageSmallUrl
@@ -258,7 +258,7 @@ func (c *BrowsingController) GetArtistInfo2(w http.ResponseWriter, r *http.Reque
// TODO Integrate with Last.FM // TODO Integrate with Last.FM
func (c *BrowsingController) GetTopSongs(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *BrowsingController) GetTopSongs(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
response := NewResponse() response := newResponse()
response.TopSongs = &responses.TopSongs{} response.TopSongs = &responses.TopSongs{}
return response, nil return response, nil
} }
@@ -279,7 +279,7 @@ func (c *BrowsingController) buildArtistDirectory(ctx context.Context, artist *m
return nil, err return nil, err
} }
dir.Child = ChildrenFromAlbums(ctx, albums) dir.Child = childrenFromAlbums(ctx, albums)
return dir, nil return dir, nil
} }
@@ -292,7 +292,7 @@ func (c *BrowsingController) buildArtist(ctx context.Context, artist *model.Arti
dir.Starred = &artist.StarredAt dir.Starred = &artist.StarredAt
} }
dir.Album = ChildrenFromAlbums(ctx, albums) dir.Album = childrenFromAlbums(ctx, albums)
return dir return dir
} }
@@ -314,7 +314,7 @@ func (c *BrowsingController) buildAlbumDirectory(ctx context.Context, album *mod
return nil, err return nil, err
} }
dir.Child = ChildrenFromMediaFiles(ctx, mfs) dir.Child = childrenFromMediaFiles(ctx, mfs)
return dir, nil return dir, nil
} }
@@ -337,6 +337,6 @@ func (c *BrowsingController) buildAlbum(ctx context.Context, album *model.Album,
dir.Starred = &album.StarredAt dir.Starred = &album.StarredAt
} }
dir.Song = ChildrenFromMediaFiles(ctx, mfs) dir.Song = childrenFromMediaFiles(ctx, mfs)
return dir return dir
} }
+23 -23
View File
@@ -14,30 +14,30 @@ import (
"github.com/deluan/navidrome/utils" "github.com/deluan/navidrome/utils"
) )
func NewResponse() *responses.Subsonic { func newResponse() *responses.Subsonic {
return &responses.Subsonic{Status: "ok", Version: Version, Type: consts.AppName, ServerVersion: consts.Version()} return &responses.Subsonic{Status: "ok", Version: Version, Type: consts.AppName, ServerVersion: consts.Version()}
} }
func RequiredParamString(r *http.Request, param string, msg string) (string, error) { func requiredParamString(r *http.Request, param string, msg string) (string, error) {
p := utils.ParamString(r, param) p := utils.ParamString(r, param)
if p == "" { if p == "" {
return "", NewError(responses.ErrorMissingParameter, msg) return "", newError(responses.ErrorMissingParameter, msg)
} }
return p, nil return p, nil
} }
func RequiredParamStrings(r *http.Request, param string, msg string) ([]string, error) { func requiredParamStrings(r *http.Request, param string, msg string) ([]string, error) {
ps := utils.ParamStrings(r, param) ps := utils.ParamStrings(r, param)
if len(ps) == 0 { if len(ps) == 0 {
return nil, NewError(responses.ErrorMissingParameter, msg) return nil, newError(responses.ErrorMissingParameter, msg)
} }
return ps, nil return ps, nil
} }
func RequiredParamInt(r *http.Request, param string, msg string) (int, error) { func requiredParamInt(r *http.Request, param string, msg string) (int, error) {
p := utils.ParamString(r, param) p := utils.ParamString(r, param)
if p == "" { if p == "" {
return 0, NewError(responses.ErrorMissingParameter, msg) return 0, newError(responses.ErrorMissingParameter, msg)
} }
return utils.ParamInt(r, param, 0), nil return utils.ParamInt(r, param, 0), nil
} }
@@ -47,7 +47,7 @@ type SubsonicError struct {
messages []interface{} messages []interface{}
} }
func NewError(code int, message ...interface{}) error { func newError(code int, message ...interface{}) error {
return SubsonicError{ return SubsonicError{
code: code, code: code,
messages: message, messages: message,
@@ -64,16 +64,16 @@ func (e SubsonicError) Error() string {
return msg return msg
} }
func ToAlbums(ctx context.Context, entries engine.Entries) []responses.Child { func toAlbums(ctx context.Context, entries engine.Entries) []responses.Child {
children := make([]responses.Child, len(entries)) children := make([]responses.Child, len(entries))
for i, entry := range entries { for i, entry := range entries {
children[i] = ToAlbum(ctx, entry) children[i] = toAlbum(ctx, entry)
} }
return children return children
} }
func ToAlbum(ctx context.Context, entry engine.Entry) responses.Child { func toAlbum(ctx context.Context, entry engine.Entry) responses.Child {
album := ToChild(ctx, entry) album := toChild(ctx, entry)
album.Name = album.Title album.Name = album.Title
album.Title = "" album.Title = ""
album.Parent = "" album.Parent = ""
@@ -82,7 +82,7 @@ func ToAlbum(ctx context.Context, entry engine.Entry) responses.Child {
return album return album
} }
func ToArtists(entries engine.Entries) []responses.Artist { func toArtists(entries engine.Entries) []responses.Artist {
artists := make([]responses.Artist, len(entries)) artists := make([]responses.Artist, len(entries))
for i, entry := range entries { for i, entry := range entries {
artists[i] = responses.Artist{ artists[i] = responses.Artist{
@@ -97,15 +97,15 @@ func ToArtists(entries engine.Entries) []responses.Artist {
return artists return artists
} }
func ToChildren(ctx context.Context, entries engine.Entries) []responses.Child { func toChildren(ctx context.Context, entries engine.Entries) []responses.Child {
children := make([]responses.Child, len(entries)) children := make([]responses.Child, len(entries))
for i, entry := range entries { for i, entry := range entries {
children[i] = ToChild(ctx, entry) children[i] = toChild(ctx, entry)
} }
return children return children
} }
func ToChild(ctx context.Context, entry engine.Entry) responses.Child { func toChild(ctx context.Context, entry engine.Entry) responses.Child {
child := responses.Child{} child := responses.Child{}
child.Id = entry.Id child.Id = entry.Id
child.Title = entry.Title child.Title = entry.Title
@@ -146,7 +146,7 @@ func ToChild(ctx context.Context, entry engine.Entry) responses.Child {
return child return child
} }
func ToGenres(genres model.Genres) *responses.Genres { func toGenres(genres model.Genres) *responses.Genres {
response := make([]responses.Genre, len(genres)) response := make([]responses.Genre, len(genres))
for i, g := range genres { for i, g := range genres {
response[i] = responses.Genre(g) response[i] = responses.Genre(g)
@@ -166,7 +166,7 @@ func getTranscoding(ctx context.Context) (format string, bitRate int) {
// This seems to be duplicated, but it is an initial step into merging `engine` and the `subsonic` packages, // This seems to be duplicated, but it is an initial step into merging `engine` and the `subsonic` packages,
// In the future there won't be any conversion to/from `engine. Entry` anymore // In the future there won't be any conversion to/from `engine. Entry` anymore
func ChildFromMediaFile(ctx context.Context, mf model.MediaFile) responses.Child { func childFromMediaFile(ctx context.Context, mf model.MediaFile) responses.Child {
child := responses.Child{} child := responses.Child{}
child.Id = mf.ID child.Id = mf.ID
child.Title = mf.Title child.Title = mf.Title
@@ -219,15 +219,15 @@ func realArtistName(mf model.MediaFile) string {
return mf.Artist return mf.Artist
} }
func ChildrenFromMediaFiles(ctx context.Context, mfs model.MediaFiles) []responses.Child { func childrenFromMediaFiles(ctx context.Context, mfs model.MediaFiles) []responses.Child {
children := make([]responses.Child, len(mfs)) children := make([]responses.Child, len(mfs))
for i, mf := range mfs { for i, mf := range mfs {
children[i] = ChildFromMediaFile(ctx, mf) children[i] = childFromMediaFile(ctx, mf)
} }
return children return children
} }
func ChildFromAlbum(ctx context.Context, al model.Album) responses.Child { func childFromAlbum(ctx context.Context, al model.Album) responses.Child {
child := responses.Child{} child := responses.Child{}
child.Id = al.ID child.Id = al.ID
child.IsDir = true child.IsDir = true
@@ -248,10 +248,10 @@ func ChildFromAlbum(ctx context.Context, al model.Album) responses.Child {
return child return child
} }
func ChildrenFromAlbums(ctx context.Context, als model.Albums) []responses.Child { func childrenFromAlbums(ctx context.Context, als model.Albums) []responses.Child {
children := make([]responses.Child, len(als)) children := make([]responses.Child, len(als))
for i, al := range als { for i, al := range als {
children[i] = ChildFromAlbum(ctx, al) children[i] = childFromAlbum(ctx, al)
} }
return children return children
} }
+14 -14
View File
@@ -22,11 +22,11 @@ func NewMediaAnnotationController(scrobbler engine.Scrobbler, ds model.DataStore
} }
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) {
id, err := RequiredParamString(r, "id", "Required id parameter is missing") id, err := requiredParamString(r, "id", "Required id parameter is missing")
if err != nil { if err != nil {
return nil, err return nil, err
} }
rating, err := RequiredParamInt(r, "rating", "Required rating parameter is missing") rating, err := requiredParamInt(r, "rating", "Required rating parameter is missing")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -37,13 +37,13 @@ func (c *MediaAnnotationController) SetRating(w http.ResponseWriter, r *http.Req
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorDataNotFound, "ID not found") return nil, newError(responses.ErrorDataNotFound, "ID not found")
case err != nil: case err != nil:
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return NewResponse(), nil return newResponse(), nil
} }
func (c *MediaAnnotationController) setRating(ctx context.Context, id string, rating int) error { func (c *MediaAnnotationController) setRating(ctx context.Context, id string, rating int) error {
@@ -62,7 +62,7 @@ func (c *MediaAnnotationController) Star(w http.ResponseWriter, r *http.Request)
albumIds := utils.ParamStrings(r, "albumId") albumIds := utils.ParamStrings(r, "albumId")
artistIds := utils.ParamStrings(r, "artistId") artistIds := utils.ParamStrings(r, "artistId")
if len(ids)+len(albumIds)+len(artistIds) == 0 { if len(ids)+len(albumIds)+len(artistIds) == 0 {
return nil, NewError(responses.ErrorMissingParameter, "Required id parameter is missing") return nil, newError(responses.ErrorMissingParameter, "Required id parameter is missing")
} }
ids = append(ids, albumIds...) ids = append(ids, albumIds...)
ids = append(ids, artistIds...) ids = append(ids, artistIds...)
@@ -72,7 +72,7 @@ func (c *MediaAnnotationController) Star(w http.ResponseWriter, r *http.Request)
return nil, err return nil, err
} }
return NewResponse(), nil return newResponse(), 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) {
@@ -80,7 +80,7 @@ func (c *MediaAnnotationController) Unstar(w http.ResponseWriter, r *http.Reques
albumIds := utils.ParamStrings(r, "albumId") albumIds := utils.ParamStrings(r, "albumId")
artistIds := utils.ParamStrings(r, "artistId") artistIds := utils.ParamStrings(r, "artistId")
if len(ids)+len(albumIds)+len(artistIds) == 0 { if len(ids)+len(albumIds)+len(artistIds) == 0 {
return nil, NewError(responses.ErrorMissingParameter, "Required id parameter is missing") return nil, newError(responses.ErrorMissingParameter, "Required id parameter is missing")
} }
ids = append(ids, albumIds...) ids = append(ids, albumIds...)
ids = append(ids, artistIds...) ids = append(ids, artistIds...)
@@ -90,17 +90,17 @@ func (c *MediaAnnotationController) Unstar(w http.ResponseWriter, r *http.Reques
return nil, err return nil, err
} }
return NewResponse(), nil return newResponse(), nil
} }
func (c *MediaAnnotationController) Scrobble(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *MediaAnnotationController) Scrobble(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
ids, err := RequiredParamStrings(r, "id", "Required id parameter is missing") ids, err := requiredParamStrings(r, "id", "Required id parameter is missing")
if err != nil { if err != nil {
return nil, err return nil, err
} }
times := utils.ParamTimes(r, "time") times := utils.ParamTimes(r, "time")
if len(times) > 0 && len(times) != len(ids) { if len(times) > 0 && len(times) != len(ids) {
return nil, NewError(responses.ErrorGeneric, "Wrong number of timestamps: %d, should be %d", len(times), len(ids)) return nil, newError(responses.ErrorGeneric, "Wrong number of timestamps: %d, should be %d", len(times), len(ids))
} }
submission := utils.ParamBool(r, "submission", true) submission := utils.ParamBool(r, "submission", true)
playerId := 1 // TODO Multiple players, based on playerName/username/clientIP(?) playerId := 1 // TODO Multiple players, based on playerName/username/clientIP(?)
@@ -129,7 +129,7 @@ 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 { func (c *MediaAnnotationController) setStar(ctx context.Context, star bool, ids ...string) error {
@@ -177,10 +177,10 @@ func (c *MediaAnnotationController) setStar(ctx context.Context, star bool, ids
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(ctx, err) log.Error(ctx, err)
return NewError(responses.ErrorDataNotFound, "ID not found") return newError(responses.ErrorDataNotFound, "ID not found")
case err != nil: case err != nil:
log.Error(ctx, err) log.Error(ctx, err)
return NewError(responses.ErrorGeneric, "Internal Error") return newError(responses.ErrorGeneric, "Internal Error")
} }
return nil return nil
} }
+4 -4
View File
@@ -25,7 +25,7 @@ func (c *MediaRetrievalController) GetAvatar(w http.ResponseWriter, r *http.Requ
f, err := resources.AssetFile().Open(consts.PlaceholderAlbumArt) f, err := resources.AssetFile().Open(consts.PlaceholderAlbumArt)
if err != nil { if err != nil {
log.Error(r, "Image not found", err) log.Error(r, "Image not found", err)
return nil, NewError(responses.ErrorDataNotFound, "Avatar image not found") return nil, newError(responses.ErrorDataNotFound, "Avatar image not found")
} }
defer f.Close() defer f.Close()
_, _ = io.Copy(w, f) _, _ = io.Copy(w, f)
@@ -34,7 +34,7 @@ func (c *MediaRetrievalController) GetAvatar(w http.ResponseWriter, r *http.Requ
} }
func (c *MediaRetrievalController) GetCoverArt(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *MediaRetrievalController) GetCoverArt(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required") id, err := requiredParamString(r, "id", "id parameter required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -46,10 +46,10 @@ func (c *MediaRetrievalController) GetCoverArt(w http.ResponseWriter, r *http.Re
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(r, "Couldn't find coverArt", "id", id, err) log.Error(r, "Couldn't find coverArt", "id", id, err)
return nil, NewError(responses.ErrorDataNotFound, "Artwork not found") return nil, newError(responses.ErrorDataNotFound, "Artwork not found")
case err != nil: case err != nil:
log.Error(r, "Error retrieving coverArt", "id", id, err) log.Error(r, "Error retrieving coverArt", "id", id, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return nil, nil return nil, nil
+3 -3
View File
@@ -23,7 +23,7 @@ func postFormToQueryParams(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm() err := r.ParseForm()
if err != nil { if err != nil {
SendError(w, r, NewError(responses.ErrorGeneric, err.Error())) SendError(w, r, newError(responses.ErrorGeneric, err.Error()))
} }
var parts []string var parts []string
for key, values := range r.Form { for key, values := range r.Form {
@@ -45,7 +45,7 @@ func checkRequiredParameters(next http.Handler) http.Handler {
if utils.ParamString(r, p) == "" { if utils.ParamString(r, p) == "" {
msg := fmt.Sprintf(`Missing required parameter "%s"`, p) msg := fmt.Sprintf(`Missing required parameter "%s"`, p)
log.Warn(r, msg) log.Warn(r, msg)
SendError(w, r, NewError(responses.ErrorMissingParameter, msg)) SendError(w, r, newError(responses.ErrorMissingParameter, msg))
return return
} }
} }
@@ -82,7 +82,7 @@ func authenticate(users engine.Users) func(next http.Handler) http.Handler {
if err != nil { if err != nil {
log.Warn(r, "Invalid login", "username", username) log.Warn(r, "Invalid login", "username", username)
SendError(w, r, NewError(responses.ErrorAuthenticationFail)) SendError(w, r, newError(responses.ErrorAuthenticationFail))
return return
} }
+17 -17
View File
@@ -25,7 +25,7 @@ func (c *PlaylistsController) GetPlaylists(w http.ResponseWriter, r *http.Reques
allPls, err := c.pls.GetAll(r.Context()) allPls, err := c.pls.GetAll(r.Context())
if err != nil { if err != nil {
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorGeneric, "Internal error") return nil, newError(responses.ErrorGeneric, "Internal error")
} }
playlists := make([]responses.Playlist, len(allPls)) playlists := make([]responses.Playlist, len(allPls))
for i, p := range allPls { for i, p := range allPls {
@@ -39,13 +39,13 @@ func (c *PlaylistsController) GetPlaylists(w http.ResponseWriter, r *http.Reques
playlists[i].Created = p.CreatedAt playlists[i].Created = p.CreatedAt
playlists[i].Changed = p.UpdatedAt playlists[i].Changed = p.UpdatedAt
} }
response := NewResponse() response := newResponse()
response.Playlists = &responses.Playlists{Playlist: playlists} response.Playlists = &responses.Playlists{Playlist: playlists}
return response, nil return response, nil
} }
func (c *PlaylistsController) GetPlaylist(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *PlaylistsController) GetPlaylist(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required") id, err := requiredParamString(r, "id", "id parameter required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -53,13 +53,13 @@ func (c *PlaylistsController) GetPlaylist(w http.ResponseWriter, r *http.Request
switch { switch {
case err == model.ErrNotFound: case err == model.ErrNotFound:
log.Error(r, err.Error(), "id", id) log.Error(r, err.Error(), "id", id)
return nil, NewError(responses.ErrorDataNotFound, "Directory not found") return nil, newError(responses.ErrorDataNotFound, "Directory not found")
case err != nil: case err != nil:
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
response := NewResponse() response := newResponse()
response.Playlist = c.buildPlaylistWithSongs(r.Context(), pinfo) response.Playlist = c.buildPlaylistWithSongs(r.Context(), pinfo)
return response, nil return response, nil
} }
@@ -74,29 +74,29 @@ func (c *PlaylistsController) CreatePlaylist(w http.ResponseWriter, r *http.Requ
err := c.pls.Create(r.Context(), playlistId, name, songIds) err := c.pls.Create(r.Context(), playlistId, name, songIds)
if err != nil { if err != nil {
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return NewResponse(), nil return newResponse(), nil
} }
func (c *PlaylistsController) DeletePlaylist(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *PlaylistsController) DeletePlaylist(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "Required parameter id is missing") id, err := requiredParamString(r, "id", "Required parameter id is missing")
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = c.pls.Delete(r.Context(), id) err = c.pls.Delete(r.Context(), id)
if err == model.ErrNotAuthorized { if err == model.ErrNotAuthorized {
return nil, NewError(responses.ErrorAuthorizationFail) return nil, newError(responses.ErrorAuthorizationFail)
} }
if err != nil { if err != nil {
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return NewResponse(), nil return newResponse(), nil
} }
func (c *PlaylistsController) UpdatePlaylist(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *PlaylistsController) UpdatePlaylist(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
playlistId, err := RequiredParamString(r, "playlistId", "Required parameter playlistId is missing") playlistId, err := requiredParamString(r, "playlistId", "Required parameter playlistId is missing")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -118,20 +118,20 @@ func (c *PlaylistsController) UpdatePlaylist(w http.ResponseWriter, r *http.Requ
err = c.pls.Update(r.Context(), playlistId, pname, songsToAdd, songIndexesToRemove) err = c.pls.Update(r.Context(), playlistId, pname, songsToAdd, songIndexesToRemove)
if err == model.ErrNotAuthorized { if err == model.ErrNotAuthorized {
return nil, NewError(responses.ErrorAuthorizationFail) return nil, newError(responses.ErrorAuthorizationFail)
} }
if err != nil { if err != nil {
log.Error(r, err) log.Error(r, err)
return nil, NewError(responses.ErrorGeneric, "Internal Error") return nil, newError(responses.ErrorGeneric, "Internal Error")
} }
return NewResponse(), nil return newResponse(), nil
} }
func (c *PlaylistsController) buildPlaylistWithSongs(ctx context.Context, d *engine.PlaylistInfo) *responses.PlaylistWithSongs { func (c *PlaylistsController) buildPlaylistWithSongs(ctx context.Context, d *engine.PlaylistInfo) *responses.PlaylistWithSongs {
pls := &responses.PlaylistWithSongs{ pls := &responses.PlaylistWithSongs{
Playlist: *c.buildPlaylist(d), Playlist: *c.buildPlaylist(d),
} }
pls.Entry = ToChildren(ctx, d.Entries) pls.Entry = toChildren(ctx, d.Entries)
return pls return pls
} }
+8 -8
View File
@@ -31,7 +31,7 @@ func NewSearchingController(search engine.Search) *SearchingController {
func (c *SearchingController) getParams(r *http.Request) (*searchParams, error) { func (c *SearchingController) getParams(r *http.Request) (*searchParams, error) {
var err error var err error
sp := &searchParams{} sp := &searchParams{}
sp.query, err = RequiredParamString(r, "query", "Parameter query required") sp.query, err = requiredParamString(r, "query", "Parameter query required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -69,11 +69,11 @@ func (c *SearchingController) Search2(w http.ResponseWriter, r *http.Request) (*
} }
mfs, als, as := c.searchAll(r, sp) mfs, als, as := c.searchAll(r, sp)
response := NewResponse() response := newResponse()
searchResult2 := &responses.SearchResult2{} searchResult2 := &responses.SearchResult2{}
searchResult2.Artist = ToArtists(as) searchResult2.Artist = toArtists(as)
searchResult2.Album = ToChildren(r.Context(), als) searchResult2.Album = toChildren(r.Context(), als)
searchResult2.Song = ToChildren(r.Context(), mfs) searchResult2.Song = toChildren(r.Context(), mfs)
response.SearchResult2 = searchResult2 response.SearchResult2 = searchResult2
return response, nil return response, nil
} }
@@ -85,7 +85,7 @@ func (c *SearchingController) Search3(w http.ResponseWriter, r *http.Request) (*
} }
mfs, als, as := c.searchAll(r, sp) mfs, als, as := c.searchAll(r, sp)
response := NewResponse() response := newResponse()
searchResult3 := &responses.SearchResult3{} searchResult3 := &responses.SearchResult3{}
searchResult3.Artist = make([]responses.ArtistID3, len(as)) searchResult3.Artist = make([]responses.ArtistID3, len(as))
for i, e := range as { for i, e := range as {
@@ -99,8 +99,8 @@ func (c *SearchingController) Search3(w http.ResponseWriter, r *http.Request) (*
searchResult3.Artist[i].Starred = &e.Starred searchResult3.Artist[i].Starred = &e.Starred
} }
} }
searchResult3.Album = ToAlbums(r.Context(), als) searchResult3.Album = toAlbums(r.Context(), als)
searchResult3.Song = ToChildren(r.Context(), mfs) searchResult3.Song = toChildren(r.Context(), mfs)
response.SearchResult3 = searchResult3 response.SearchResult3 = searchResult3
return response, nil return response, nil
} }
+2 -2
View File
@@ -23,7 +23,7 @@ func NewStreamController(streamer core.MediaStreamer, archiver core.Archiver, ds
} }
func (c *StreamController) Stream(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *StreamController) Stream(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required") id, err := requiredParamString(r, "id", "id parameter required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -71,7 +71,7 @@ func (c *StreamController) Stream(w http.ResponseWriter, r *http.Request) (*resp
} }
func (c *StreamController) Download(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *StreamController) Download(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required") id, err := requiredParamString(r, "id", "id parameter required")
if err != nil { if err != nil {
return nil, err return nil, err
} }
+2 -2
View File
@@ -13,11 +13,11 @@ func NewSystemController() *SystemController {
} }
func (c *SystemController) Ping(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *SystemController) Ping(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
return NewResponse(), nil return newResponse(), nil
} }
func (c *SystemController) GetLicense(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *SystemController) GetLicense(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
response := NewResponse() response := newResponse()
response.License = &responses.License{Valid: true} response.License = &responses.License{Valid: true}
return response, nil return response, nil
} }
+2 -2
View File
@@ -14,11 +14,11 @@ func NewUsersController() *UsersController {
// TODO This is a placeholder. The real one has to read this info from a config file or the database // TODO This is a placeholder. The real one has to read this info from a config file or the database
func (c *UsersController) GetUser(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) { func (c *UsersController) GetUser(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
user, err := RequiredParamString(r, "username", "Required string parameter 'username' is not present") user, err := requiredParamString(r, "username", "Required string parameter 'username' is not present")
if err != nil { if err != nil {
return nil, err return nil, err
} }
response := NewResponse() response := newResponse()
response.User = &responses.User{} response.User = &responses.User{}
response.User.Username = user response.User.Username = user
response.User.StreamRole = true response.User.StreamRole = true