package sonicsimilarity
import (
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
)
type FindSonicPathRequest struct {
StartSong SongRef `json:"startSong"`
EndSong SongRef `json:"endSong"`
Count int32 `json:"count"`
}
type GetSonicSimilarTracksRequest struct {
Song SongRef `json:"song"`
Count int32 `json:"count"`
}
type SongRef struct {
ID string `json:"id,omitempty"`
Name string `json:"name"`
MBID string `json:"mbid,omitempty"`
ISRC string `json:"isrc,omitempty"`
Artist string `json:"artist,omitempty"`
ArtistMBID string `json:"artistMbid,omitempty"`
Album string `json:"album,omitempty"`
AlbumMBID string `json:"albumMbid,omitempty"`
Duration float32 `json:"duration,omitempty"`
}
type SonicMatch struct {
Song 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
}