Deluan 9522b060d5 feat: add PDK abstraction layer with mock support for non-WASM builds
Signed-off-by: Deluan <deluan@navidrome.org>
2026-01-01 15:44:32 -05:00

65 lines
1.6 KiB
Go

// Test Artwork plugin for Navidrome plugin system integration tests.
// Build with: tinygo build -o ../test-artwork.wasm -target wasip1 -buildmode=c-shared .
package main
import (
"strings"
"github.com/navidrome/navidrome/plugins/pdk/go/host"
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
)
// TestInput is the input for nd_test_artwork callback.
type TestInput struct {
ArtworkType string `json:"artwork_type"` // "artist", "album", "track", "playlist"
ID string `json:"id"`
Size int32 `json:"size"`
}
// TestOutput is the output from nd_test_artwork callback.
type TestOutput struct {
URL string `json:"url,omitempty"`
Error *string `json:"error,omitempty"`
}
// nd_test_artwork is the test callback that tests the artwork host functions.
//
//go:wasmexport nd_test_artwork
func ndTestArtwork() int32 {
var input TestInput
if err := pdk.InputJSON(&input); err != nil {
errStr := err.Error()
pdk.OutputJSON(TestOutput{Error: &errStr})
return 0
}
var url string
var err error
switch strings.ToLower(input.ArtworkType) {
case "artist":
url, err = host.ArtworkGetArtistUrl(input.ID, input.Size)
case "album":
url, err = host.ArtworkGetAlbumUrl(input.ID, input.Size)
case "track":
url, err = host.ArtworkGetTrackUrl(input.ID, input.Size)
case "playlist":
url, err = host.ArtworkGetPlaylistUrl(input.ID, input.Size)
default:
errStr := "unknown artwork type: " + input.ArtworkType
pdk.OutputJSON(TestOutput{Error: &errStr})
return 0
}
if err != nil {
errStr := err.Error()
pdk.OutputJSON(TestOutput{Error: &errStr})
return 0
}
pdk.OutputJSON(TestOutput{URL: url})
return 0
}
func main() {}