package sonicsimilarity
import (
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
"github.com/navidrome/navidrome/plugins/pdk/go/types"
)
type ArtistRef = types.ArtistRef
type SongRef = types.SongRef
type FindSonicPathRequest struct {
StartSong types.SongRef `json:"startSong"`
EndSong types.SongRef `json:"endSong"`
Count int32 `json:"count"`
}
type GetSonicSimilarTracksRequest struct {
Song types.SongRef `json:"song"`
Count int32 `json:"count"`
}
type SonicMatch struct {
Song types.SongRef `json:"song"`
Similarity float64 `json:"similarity"`
}
type SonicSimilarityResponse struct {
Matches []SonicMatch `json:"matches"`
}
type SonicSimilarity interface {
GetSonicSimilarTracks(GetSonicSimilarTracksRequest) (SonicSimilarityResponse, error)
FindSonicPath(FindSonicPathRequest) (SonicSimilarityResponse, error)
}
var (
sonicSimilarTracksImpl func(GetSonicSimilarTracksRequest) (SonicSimilarityResponse, error)
findSonicPathImpl func(FindSonicPathRequest) (SonicSimilarityResponse, error)
)
func Register(impl SonicSimilarity) {
sonicSimilarTracksImpl = impl.GetSonicSimilarTracks
findSonicPathImpl = impl.FindSonicPath
}
const NotImplementedCode int32 = -2
func _NdGetSonicSimilarTracks() int32 {
if sonicSimilarTracksImpl == nil {
return NotImplementedCode
}
var input GetSonicSimilarTracksRequest
if err := pdk.InputJSON(&input); err != nil {
pdk.SetError(err)
return -1
}
output, err := sonicSimilarTracksImpl(input)
if err != nil {
pdk.SetError(err)
return -1
}
if err := pdk.OutputJSON(output); err != nil {
pdk.SetError(err)
return -1
}
return 0
}
func _NdFindSonicPath() int32 {
if findSonicPathImpl == nil {
return NotImplementedCode
}
var input FindSonicPathRequest
if err := pdk.InputJSON(&input); err != nil {
pdk.SetError(err)
return -1
}
output, err := findSonicPathImpl(input)
if err != nil {
pdk.SetError(err)
return -1
}
if err := pdk.OutputJSON(output); err != nil {
pdk.SetError(err)
return -1
}
return 0
}