package main
import (
"errors"
"strconv"
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
"github.com/navidrome/navidrome/plugins/pdk/go/sonicsimilarity"
"github.com/navidrome/navidrome/plugins/pdk/go/types"
)
func init() {
sonicsimilarity.Register(&testSonicSimilarity{})
}
type testSonicSimilarity struct{}
func checkConfigError() error {
errMsg, hasErr := pdk.GetConfig("error")
if !hasErr || errMsg == "" {
return nil
}
return errors.New(errMsg)
}
func (t *testSonicSimilarity) GetSonicSimilarTracks(input sonicsimilarity.GetSonicSimilarTracksRequest) (sonicsimilarity.SonicSimilarityResponse, error) {
if err := checkConfigError(); err != nil {
return sonicsimilarity.SonicSimilarityResponse{}, err
}
count := int(input.Count)
if count == 0 {
count = 5
}
matches := make([]sonicsimilarity.SonicMatch, 0, count)
for i := range count {
matches = append(matches, sonicsimilarity.SonicMatch{
Song: types.SongRef{
ID: "similar-track-" + strconv.Itoa(i+1),
Name: "Similar to " + input.Song.Name + " #" + strconv.Itoa(i+1),
Artist: input.Song.Artist,
},
Similarity: 1.0 - float64(i)*0.1,
})
}
return sonicsimilarity.SonicSimilarityResponse{Matches: matches}, nil
}
func (t *testSonicSimilarity) FindSonicPath(input sonicsimilarity.FindSonicPathRequest) (sonicsimilarity.SonicSimilarityResponse, error) {
if err := checkConfigError(); err != nil {
return sonicsimilarity.SonicSimilarityResponse{}, err
}
count := int(input.Count)
if count == 0 {
count = 5
}
matches := make([]sonicsimilarity.SonicMatch, 0, count)
for i := range count {
matches = append(matches, sonicsimilarity.SonicMatch{
Song: types.SongRef{
ID: "path-track-" + strconv.Itoa(i+1),
Name: "Path " + input.StartSong.Name + " to " + input.EndSong.Name + " #" + strconv.Itoa(i+1),
Artist: input.StartSong.Artist,
},
Similarity: 1.0 - float64(i)*0.05,
})
}
return sonicsimilarity.SonicSimilarityResponse{Matches: matches}, nil
}
func main() {}