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.
73 lines
3.0 KiB
Go
73 lines
3.0 KiB
Go
package capabilities
|
|
|
|
// PlaylistProvider provides dynamically-generated playlists (e.g., "Daily Mix",
|
|
// personalized recommendations). Plugins implementing this capability expose two
|
|
// functions: GetAvailablePlaylists for lightweight discovery and GetPlaylist for
|
|
// fetching the heavy payload (tracks, metadata).
|
|
//
|
|
//nd:capability name=playlistprovider required=true
|
|
type PlaylistProvider interface {
|
|
// GetAvailablePlaylists returns the list of playlists this plugin provides.
|
|
//nd:export name=nd_playlist_provider_get_available_playlists
|
|
GetAvailablePlaylists(GetAvailablePlaylistsRequest) (GetAvailablePlaylistsResponse, error)
|
|
|
|
// GetPlaylist returns the full data for a single playlist (tracks, metadata).
|
|
//nd:export name=nd_playlist_provider_get_playlist
|
|
GetPlaylist(GetPlaylistRequest) (GetPlaylistResponse, error)
|
|
}
|
|
|
|
// GetAvailablePlaylistsRequest is the request for GetAvailablePlaylists.
|
|
type GetAvailablePlaylistsRequest struct{}
|
|
|
|
// GetAvailablePlaylistsResponse is the response for GetAvailablePlaylists.
|
|
type GetAvailablePlaylistsResponse struct {
|
|
// Playlists is the list of playlists provided by this plugin.
|
|
Playlists []PlaylistInfo `json:"playlists"`
|
|
// RefreshInterval is the number of seconds until the next GetAvailablePlaylists call.
|
|
// 0 means never re-discover.
|
|
RefreshInterval int64 `json:"refreshInterval"`
|
|
// RetryInterval is the number of seconds before retrying a failed GetPlaylist call.
|
|
// 0 means no automatic retry for transient errors.
|
|
RetryInterval int64 `json:"retryInterval"`
|
|
}
|
|
|
|
// PlaylistInfo identifies a plugin playlist and its target user.
|
|
type PlaylistInfo struct {
|
|
// ID is the plugin-scoped unique identifier for this playlist.
|
|
ID string `json:"id"`
|
|
// OwnerUsername is the Navidrome username that owns this playlist.
|
|
OwnerUsername string `json:"ownerUsername"`
|
|
}
|
|
|
|
// GetPlaylistRequest is the request for GetPlaylist.
|
|
type GetPlaylistRequest struct {
|
|
// ID is the plugin-scoped playlist ID.
|
|
ID string `json:"id"`
|
|
}
|
|
|
|
// GetPlaylistResponse is the response for GetPlaylist.
|
|
type GetPlaylistResponse struct {
|
|
// Name is the display name of the playlist.
|
|
Name string `json:"name"`
|
|
// Description is an optional description for the playlist.
|
|
Description string `json:"description,omitempty"`
|
|
// CoverArtURL is an optional external URL for the playlist cover art.
|
|
CoverArtURL string `json:"coverArtUrl,omitempty"`
|
|
// Tracks is the list of songs in the playlist, using SongRef for matching.
|
|
Tracks []SongRef `json:"tracks"`
|
|
// ValidUntil is a unix timestamp indicating when this playlist data expires.
|
|
// 0 means static (never refresh).
|
|
ValidUntil int64 `json:"validUntil"`
|
|
}
|
|
|
|
// PlaylistProviderError represents an error type for playlist provider operations.
|
|
type PlaylistProviderError string
|
|
|
|
const (
|
|
// PlaylistProviderErrorNotFound indicates a playlist is currently unavailable.
|
|
PlaylistProviderErrorNotFound PlaylistProviderError = "playlist_provider(not_found)"
|
|
)
|
|
|
|
// Error implements the error interface for PlaylistProviderError.
|
|
func (e PlaylistProviderError) Error() string { return string(e) }
|