mirror of
https://github.com/navidrome/navidrome.git
synced 2026-05-03 06:51:16 +00:00
Rename the capability from PlaylistGenerator to PlaylistProvider and the internal orchestrator struct from playlistGeneratorOrchestrator to playlistSyncer. The new names better describe what the capability does (provides playlists) rather than how it works internally. All source files, test plugin, PDK packages (Go/Rust), YAML schemas, and exported WASM function names are updated accordingly.
87 lines
2.4 KiB
Go
87 lines
2.4 KiB
Go
// Test playlist provider plugin for Navidrome plugin system integration tests.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
|
|
pp "github.com/navidrome/navidrome/plugins/pdk/go/playlistprovider"
|
|
)
|
|
|
|
func init() {
|
|
pp.Register(&testPlaylistProvider{})
|
|
}
|
|
|
|
type testPlaylistProvider struct{}
|
|
|
|
func (t *testPlaylistProvider) GetAvailablePlaylists(_ pp.GetAvailablePlaylistsRequest) (pp.GetAvailablePlaylistsResponse, error) {
|
|
// Check for configured error
|
|
errMsg, hasErr := pdk.GetConfig("error")
|
|
if hasErr && errMsg != "" {
|
|
return pp.GetAvailablePlaylistsResponse{}, fmt.Errorf("%s", errMsg)
|
|
}
|
|
|
|
// Get the owner username from config (defaults to "admin")
|
|
ownerUsername := "admin"
|
|
if u, ok := pdk.GetConfig("owner_username"); ok && u != "" {
|
|
ownerUsername = u
|
|
}
|
|
|
|
resp := pp.GetAvailablePlaylistsResponse{
|
|
Playlists: []pp.PlaylistInfo{
|
|
{ID: "daily-mix-1", OwnerUsername: ownerUsername},
|
|
{ID: "daily-mix-2", OwnerUsername: ownerUsername},
|
|
},
|
|
RefreshInterval: 0, // No re-discovery in tests
|
|
}
|
|
|
|
// Support configurable retry interval
|
|
if ri, ok := pdk.GetConfig("retry_interval"); ok && ri != "" {
|
|
if v, err := strconv.ParseInt(ri, 10, 64); err == nil {
|
|
resp.RetryInterval = v
|
|
}
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
func (t *testPlaylistProvider) GetPlaylist(req pp.GetPlaylistRequest) (pp.GetPlaylistResponse, error) {
|
|
// Check for configured error
|
|
errMsg, hasErr := pdk.GetConfig("get_playlist_error")
|
|
if hasErr && errMsg != "" {
|
|
// Check if the error should be typed (e.g., NotFound)
|
|
errType, _ := pdk.GetConfig("get_playlist_error_type")
|
|
if errType == pp.PlaylistProviderErrorNotFound.Error() {
|
|
return pp.GetPlaylistResponse{}, fmt.Errorf("%w: %s", pp.PlaylistProviderErrorNotFound, errMsg)
|
|
}
|
|
return pp.GetPlaylistResponse{}, fmt.Errorf("%s", errMsg)
|
|
}
|
|
|
|
switch req.ID {
|
|
case "daily-mix-1":
|
|
return pp.GetPlaylistResponse{
|
|
Name: "Daily Mix 1",
|
|
Description: "Your personalized daily mix",
|
|
CoverArtURL: "https://example.com/cover1.jpg",
|
|
Tracks: []pp.SongRef{
|
|
{Name: "Song A", Artist: "Artist One"},
|
|
{Name: "Song B", Artist: "Artist Two"},
|
|
},
|
|
ValidUntil: 0, // Static, no refresh
|
|
}, nil
|
|
case "daily-mix-2":
|
|
return pp.GetPlaylistResponse{
|
|
Name: "Daily Mix 2",
|
|
Tracks: []pp.SongRef{
|
|
{Name: "Song C", Artist: "Artist Three"},
|
|
},
|
|
ValidUntil: 0,
|
|
}, nil
|
|
default:
|
|
return pp.GetPlaylistResponse{}, fmt.Errorf("unknown playlist: %s", req.ID)
|
|
}
|
|
}
|
|
|
|
func main() {}
|