spotify

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 7, 2026 License: MIT Imports: 26 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNoContent = fmt.Errorf("no content")
View Source
var ErrUnsupported = errors.New("unsupported operation")
View Source
var ErrUnsupportedType = errors.New("unsupported spotify type")

Functions

func SetTotpSecretFetcher

func SetTotpSecretFetcher(fn func(context.Context) (int, []byte, error)) func()

SetTotpSecretFetcher overrides the secret fetcher for tests and returns a restore func.

Types

type API

type API interface {
	Search(ctx context.Context, kind, query string, limit, offset int) (SearchResult, error)
	GetTrack(ctx context.Context, id string) (Item, error)
	GetAlbum(ctx context.Context, id string) (Item, error)
	GetArtist(ctx context.Context, id string) (Item, error)
	GetPlaylist(ctx context.Context, id string) (Item, error)
	GetShow(ctx context.Context, id string) (Item, error)
	GetEpisode(ctx context.Context, id string) (Item, error)
	Playback(ctx context.Context) (PlaybackStatus, error)
	Play(ctx context.Context, uri string) error
	Pause(ctx context.Context) error
	Next(ctx context.Context) error
	Previous(ctx context.Context) error
	Seek(ctx context.Context, positionMS int) error
	Volume(ctx context.Context, volume int) error
	Shuffle(ctx context.Context, enabled bool) error
	Repeat(ctx context.Context, mode string) error
	Devices(ctx context.Context) ([]Device, error)
	Transfer(ctx context.Context, deviceID string) error
	QueueAdd(ctx context.Context, uri string) error
	Queue(ctx context.Context) (Queue, error)
	LibraryTracks(ctx context.Context, limit, offset int) ([]Item, int, error)
	LibraryAlbums(ctx context.Context, limit, offset int) ([]Item, int, error)
	LibraryModify(ctx context.Context, path string, ids []string, method string) error
	FollowArtists(ctx context.Context, ids []string, method string) error
	FollowedArtists(ctx context.Context, limit int, after string) ([]Item, int, string, error)
	Playlists(ctx context.Context, limit, offset int) ([]Item, int, error)
	PlaylistTracks(ctx context.Context, id string, limit, offset int) ([]Item, int, error)
	CreatePlaylist(ctx context.Context, name string, public, collaborative bool) (Item, error)
	AddTracks(ctx context.Context, playlistID string, uris []string) error
	RemoveTracks(ctx context.Context, playlistID string, uris []string) error
}

func NewAppleScriptClient added in v0.2.0

func NewAppleScriptClient(opts AppleScriptOptions) (API, error)

func NewAutoClient

func NewAutoClient(connect API, web API) API

func NewPlaybackFallbackClient

func NewPlaybackFallbackClient(web API, connect API) API

type APIError

type APIError struct {
	Status  int
	Message string
	Body    string
}

func (APIError) Error

func (e APIError) Error() string

type AppleScriptClient added in v0.2.0

type AppleScriptClient struct{}

type AppleScriptOptions added in v0.2.0

type AppleScriptOptions struct {
	Fallback API
}

type Client

type Client struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(opts Options) (*Client, error)

func (*Client) AddTracks

func (c *Client) AddTracks(ctx context.Context, playlistID string, uris []string) error

func (*Client) ArtistTopTracks

func (c *Client) ArtistTopTracks(ctx context.Context, id string, limit int) ([]Item, error)

func (*Client) CreatePlaylist

func (c *Client) CreatePlaylist(ctx context.Context, name string, public, collaborative bool) (Item, error)

func (*Client) Devices

func (c *Client) Devices(ctx context.Context) ([]Device, error)

func (*Client) FollowArtists

func (c *Client) FollowArtists(ctx context.Context, ids []string, method string) error

func (*Client) FollowedArtists

func (c *Client) FollowedArtists(ctx context.Context, limit int, after string) ([]Item, int, string, error)

func (*Client) GetAlbum

func (c *Client) GetAlbum(ctx context.Context, id string) (Item, error)

func (*Client) GetArtist

func (c *Client) GetArtist(ctx context.Context, id string) (Item, error)

func (*Client) GetEpisode

func (c *Client) GetEpisode(ctx context.Context, id string) (Item, error)

func (*Client) GetPlaylist

func (c *Client) GetPlaylist(ctx context.Context, id string) (Item, error)

func (*Client) GetShow

func (c *Client) GetShow(ctx context.Context, id string) (Item, error)

func (*Client) GetTrack

func (c *Client) GetTrack(ctx context.Context, id string) (Item, error)

func (*Client) LibraryAlbums

func (c *Client) LibraryAlbums(ctx context.Context, limit, offset int) ([]Item, int, error)

func (*Client) LibraryModify

func (c *Client) LibraryModify(ctx context.Context, path string, ids []string, method string) error

func (*Client) LibraryTracks

func (c *Client) LibraryTracks(ctx context.Context, limit, offset int) ([]Item, int, error)

func (*Client) Next

func (c *Client) Next(ctx context.Context) error

func (*Client) Pause

func (c *Client) Pause(ctx context.Context) error

func (*Client) Play

func (c *Client) Play(ctx context.Context, uri string) error

func (*Client) Playback

func (c *Client) Playback(ctx context.Context) (PlaybackStatus, error)

func (*Client) PlaylistTracks

func (c *Client) PlaylistTracks(ctx context.Context, id string, limit, offset int) ([]Item, int, error)

func (*Client) Playlists

func (c *Client) Playlists(ctx context.Context, limit, offset int) ([]Item, int, error)

func (*Client) Previous

func (c *Client) Previous(ctx context.Context) error

func (*Client) Queue

func (c *Client) Queue(ctx context.Context) (Queue, error)

func (*Client) QueueAdd

func (c *Client) QueueAdd(ctx context.Context, uri string) error

func (*Client) RemoveTracks

func (c *Client) RemoveTracks(ctx context.Context, playlistID string, uris []string) error

func (*Client) Repeat

func (c *Client) Repeat(ctx context.Context, mode string) error

func (*Client) Search

func (c *Client) Search(ctx context.Context, kind, query string, limit, offset int) (SearchResult, error)

func (*Client) Seek

func (c *Client) Seek(ctx context.Context, positionMS int) error

func (*Client) Shuffle

func (c *Client) Shuffle(ctx context.Context, enabled bool) error

func (*Client) Transfer

func (c *Client) Transfer(ctx context.Context, deviceID string) error

func (*Client) Volume

func (c *Client) Volume(ctx context.Context, volume int) error

type ConnectClient

type ConnectClient struct {
	// contains filtered or unexported fields
}

func NewConnectClient

func NewConnectClient(opts ConnectOptions) (*ConnectClient, error)

func (*ConnectClient) AddTracks

func (c *ConnectClient) AddTracks(ctx context.Context, playlistID string, uris []string) error

func (*ConnectClient) ArtistTopTracks

func (c *ConnectClient) ArtistTopTracks(ctx context.Context, id string, limit int) ([]Item, error)

func (*ConnectClient) CreatePlaylist

func (c *ConnectClient) CreatePlaylist(ctx context.Context, name string, public, collaborative bool) (Item, error)

func (*ConnectClient) Devices

func (c *ConnectClient) Devices(ctx context.Context) ([]Device, error)

func (*ConnectClient) FollowArtists

func (c *ConnectClient) FollowArtists(ctx context.Context, ids []string, method string) error

func (*ConnectClient) FollowedArtists

func (c *ConnectClient) FollowedArtists(ctx context.Context, limit int, after string) ([]Item, int, string, error)

func (*ConnectClient) GetAlbum

func (c *ConnectClient) GetAlbum(ctx context.Context, id string) (Item, error)

func (*ConnectClient) GetArtist

func (c *ConnectClient) GetArtist(ctx context.Context, id string) (Item, error)

func (*ConnectClient) GetEpisode

func (c *ConnectClient) GetEpisode(ctx context.Context, id string) (Item, error)

func (*ConnectClient) GetPlaylist

func (c *ConnectClient) GetPlaylist(ctx context.Context, id string) (Item, error)

func (*ConnectClient) GetShow

func (c *ConnectClient) GetShow(ctx context.Context, id string) (Item, error)

func (*ConnectClient) GetTrack

func (c *ConnectClient) GetTrack(ctx context.Context, id string) (Item, error)

func (*ConnectClient) LibraryAlbums

func (c *ConnectClient) LibraryAlbums(ctx context.Context, limit, offset int) ([]Item, int, error)

func (*ConnectClient) LibraryModify

func (c *ConnectClient) LibraryModify(ctx context.Context, path string, ids []string, method string) error

func (*ConnectClient) LibraryTracks

func (c *ConnectClient) LibraryTracks(ctx context.Context, limit, offset int) ([]Item, int, error)

func (*ConnectClient) Next

func (c *ConnectClient) Next(ctx context.Context) error

func (*ConnectClient) Pause

func (c *ConnectClient) Pause(ctx context.Context) error

func (*ConnectClient) Play

func (c *ConnectClient) Play(ctx context.Context, uri string) error

func (*ConnectClient) Playback

func (c *ConnectClient) Playback(ctx context.Context) (PlaybackStatus, error)

func (*ConnectClient) PlaylistTracks

func (c *ConnectClient) PlaylistTracks(ctx context.Context, id string, limit, offset int) ([]Item, int, error)

func (*ConnectClient) Playlists

func (c *ConnectClient) Playlists(ctx context.Context, limit, offset int) ([]Item, int, error)

func (*ConnectClient) Previous

func (c *ConnectClient) Previous(ctx context.Context) error

func (*ConnectClient) Queue

func (c *ConnectClient) Queue(ctx context.Context) (Queue, error)

func (*ConnectClient) QueueAdd

func (c *ConnectClient) QueueAdd(ctx context.Context, uri string) error

func (*ConnectClient) RemoveTracks

func (c *ConnectClient) RemoveTracks(ctx context.Context, playlistID string, uris []string) error

func (*ConnectClient) Repeat

func (c *ConnectClient) Repeat(ctx context.Context, mode string) error

func (*ConnectClient) Search

func (c *ConnectClient) Search(ctx context.Context, kind, query string, limit, offset int) (SearchResult, error)

func (*ConnectClient) Seek

func (c *ConnectClient) Seek(ctx context.Context, positionMS int) error

func (*ConnectClient) Shuffle

func (c *ConnectClient) Shuffle(ctx context.Context, enabled bool) error

func (*ConnectClient) Transfer

func (c *ConnectClient) Transfer(ctx context.Context, deviceID string) error

func (*ConnectClient) Volume

func (c *ConnectClient) Volume(ctx context.Context, volume int) error

type ConnectOptions

type ConnectOptions struct {
	Source   cookies.Source
	Market   string
	Language string
	Device   string
	Timeout  time.Duration
}

type CookieTokenProvider

type CookieTokenProvider struct {
	Source  cookies.Source
	BaseURL string
	Client  *http.Client
}

func (CookieTokenProvider) Token

func (p CookieTokenProvider) Token(ctx context.Context) (Token, error)

type Device

type Device struct {
	ID         string `json:"id"`
	Name       string `json:"name"`
	Type       string `json:"type"`
	Volume     int    `json:"volume_percent"`
	Active     bool   `json:"is_active"`
	Restricted bool   `json:"is_restricted"`
}

type Item

type Item struct {
	ID            string   `json:"id"`
	URI           string   `json:"uri"`
	Name          string   `json:"name"`
	Type          string   `json:"type"`
	URL           string   `json:"url"`
	Artists       []string `json:"artists,omitempty"`
	Album         string   `json:"album,omitempty"`
	Owner         string   `json:"owner,omitempty"`
	DurationMS    int      `json:"duration_ms,omitempty"`
	Explicit      bool     `json:"explicit,omitempty"`
	TotalTracks   int      `json:"total_tracks,omitempty"`
	ReleaseDate   string   `json:"release_date,omitempty"`
	Description   string   `json:"description,omitempty"`
	TotalItems    int      `json:"total_items,omitempty"`
	Followers     int      `json:"followers,omitempty"`
	Genres        []string `json:"genres,omitempty"`
	IsPlayable    bool     `json:"is_playable,omitempty"`
	Publisher     string   `json:"publisher,omitempty"`
	TotalEpisodes int      `json:"total_episodes,omitempty"`
}

type Options

type Options struct {
	TokenProvider TokenProvider
	HTTPClient    *http.Client
	BaseURL       string
	Market        string
	Language      string
	Device        string
	Timeout       time.Duration
}

type PlaybackStatus

type PlaybackStatus struct {
	IsPlaying  bool   `json:"is_playing"`
	ProgressMS int    `json:"progress_ms"`
	Item       *Item  `json:"item,omitempty"`
	Device     Device `json:"device"`
	Shuffle    bool   `json:"shuffle"`
	Repeat     string `json:"repeat"`
}

type Queue

type Queue struct {
	CurrentlyPlaying *Item  `json:"currently_playing,omitempty"`
	Queue            []Item `json:"queue"`
}

type Resource

type Resource struct {
	Type string
	ID   string
	URI  string
}

func ParseResource

func ParseResource(input string) (Resource, error)

func ParseTypedID

func ParseTypedID(input, expectedType string) (Resource, error)

type SearchResult

type SearchResult struct {
	Type   string `json:"type"`
	Limit  int    `json:"limit"`
	Offset int    `json:"offset"`
	Total  int    `json:"total"`
	Items  []Item `json:"items"`
}

type Token

type Token struct {
	AccessToken string
	ExpiresAt   time.Time
	Anonymous   bool
	ClientID    string
}

type TokenProvider

type TokenProvider interface {
	Token(ctx context.Context) (Token, error)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL