Skip to content

Commit

Permalink
Add SimilarSongs functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
deluan committed Oct 20, 2020
1 parent a289a19 commit 64ccb4d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
34 changes: 30 additions & 4 deletions core/external_info.go
Expand Up @@ -8,6 +8,7 @@ import (
"sync"
"time"

"github.com/Masterminds/squirrel"
"github.com/deluan/navidrome/core/lastfm"
"github.com/deluan/navidrome/core/spotify"
"github.com/deluan/navidrome/log"
Expand Down Expand Up @@ -63,10 +64,31 @@ func (e *externalInfo) getArtist(ctx context.Context, id string) (artist *model.
}

func (e *externalInfo) SimilarSongs(ctx context.Context, id string, count int) (model.MediaFiles, error) {
// TODO
// Get Similar Artists
// Get `count` songs from all similar artists, sorted randomly
return nil, nil
if e.lfm == nil {
log.Warn(ctx, "Last.FM client not configured")
return nil, model.ErrNotAvailable
}

artist, err := e.getArtist(ctx, id)
if err != nil {
return nil, err
}

artists, err := e.similarArtists(ctx, artist, count, false)
if err != nil {
return nil, err
}
ids := make([]string, len(artists)+1)
ids[0] = artist.ID
for i, a := range artists {
ids[i+1] = a.ID
}

return e.ds.MediaFile(ctx).GetAll(model.QueryOptions{
Filters: squirrel.Eq{"artist_id": ids},
Max: count,
Sort: "random()",
})
}

func (e *externalInfo) SimilarArtists(ctx context.Context, id string, includeNotPresent bool, count int) (model.Artists, error) {
Expand All @@ -80,6 +102,10 @@ func (e *externalInfo) SimilarArtists(ctx context.Context, id string, includeNot
return nil, err
}

return e.similarArtists(ctx, artist, count, includeNotPresent)
}

func (e *externalInfo) similarArtists(ctx context.Context, artist *model.Artist, count int, includeNotPresent bool) (model.Artists, error) {
var result model.Artists
var notPresent []string

Expand Down
2 changes: 1 addition & 1 deletion server/subsonic/browsing.go
Expand Up @@ -320,7 +320,7 @@ func (c *BrowsingController) GetSimilarSongs2(w http.ResponseWriter, r *http.Req

response := newResponse()
response.SimilarSongs2 = &responses.SimilarSongs2{
Song: res.SimilarSongs2.Song,
Song: res.SimilarSongs.Song,
}
return response, nil
}
Expand Down

0 comments on commit 64ccb4d

Please sign in to comment.