diff --git a/server/subsonic/helpers.go b/server/subsonic/helpers.go index 03ac352d8..87ace90b9 100644 --- a/server/subsonic/helpers.go +++ b/server/subsonic/helpers.go @@ -282,3 +282,41 @@ func buildDiscSubtitles(_ context.Context, a model.Album) responses.DiscTitles { }) return discTitles } + +func buildAlbumsID3(ctx context.Context, albums model.Albums) []responses.AlbumID3 { + res := make([]responses.AlbumID3, len(albums)) + for i, album := range albums { + res[i] = buildAlbumID3(ctx, album) + } + return res +} + +func buildAlbumID3(ctx context.Context, album model.Album) responses.AlbumID3 { + dir := responses.AlbumID3{} + dir.Id = album.ID + dir.Name = album.Name + dir.Artist = album.AlbumArtist + dir.ArtistId = album.AlbumArtistID + dir.CoverArt = album.CoverArtID().String() + dir.SongCount = int32(album.SongCount) + dir.Duration = int32(album.Duration) + dir.PlayCount = album.PlayCount + if album.PlayCount > 0 { + dir.Played = album.PlayDate + } + dir.Year = int32(album.MaxYear) + dir.Genre = album.Genre + dir.Genres = buildItemGenres(album.Genres) + dir.DiscTitles = buildDiscSubtitles(ctx, album) + dir.UserRating = int32(album.Rating) + if !album.CreatedAt.IsZero() { + dir.Created = &album.CreatedAt + } + if album.Starred { + dir.Starred = album.StarredAt + } + dir.MusicBrainzId = album.MbzAlbumID + dir.IsCompilation = album.Compilation + dir.SortName = album.SortAlbumName + return dir +} diff --git a/server/subsonic/responses/responses.go b/server/subsonic/responses/responses.go index a2c7e676f..f93a5967b 100644 --- a/server/subsonic/responses/responses.go +++ b/server/subsonic/responses/responses.go @@ -276,7 +276,7 @@ type SearchResult2 struct { type SearchResult3 struct { Artist []ArtistID3 `xml:"artist" json:"artist,omitempty"` - Album []Child `xml:"album" json:"album,omitempty"` + Album []AlbumID3 `xml:"album" json:"album,omitempty"` Song []Child `xml:"song" json:"song,omitempty"` } diff --git a/server/subsonic/searching.go b/server/subsonic/searching.go index b5dfa5833..d40d42beb 100644 --- a/server/subsonic/searching.go +++ b/server/subsonic/searching.go @@ -133,7 +133,7 @@ func (api *Router) Search3(r *http.Request) (*responses.Subsonic, error) { for i, artist := range as { searchResult3.Artist[i] = toArtistID3(r, artist) } - searchResult3.Album = childrenFromAlbums(ctx, als) + searchResult3.Album = buildAlbumsID3(ctx, als) searchResult3.Song = childrenFromMediaFiles(ctx, mfs) response.SearchResult3 = searchResult3 return response, nil