Documentation
¶
Overview ¶
Package api contains interface for connecting to remote server. Subpackages contain implementations.
Index ¶
- Variables
- func MimeToAudioFormat(mimeType string) (format interfaces.AudioFormat, err error)
- type Browser
- type Cacher
- type MediaServer
- type MockConfig
- type MockServer
- func (m *MockServer) ConnectionOk() error
- func (m *MockServer) GetAlbum(id models.Id) (*models.Album, error)
- func (m *MockServer) GetAlbumArtist(album *models.Album) (*models.Artist, error)
- func (m *MockServer) GetAlbumArtists(query *interfaces.QueryOpts) ([]*models.Artist, int, error)
- func (m *MockServer) GetAlbumSongs(album models.Id) ([]*models.Song, error)
- func (m *MockServer) GetAlbums(query *interfaces.QueryOpts) ([]*models.Album, int, error)
- func (m *MockServer) GetArtist(id models.Id) (*models.Artist, error)
- func (m *MockServer) GetArtistAlbums(artist models.Id) ([]*models.Album, error)
- func (m *MockServer) GetArtists(query *interfaces.QueryOpts) ([]*models.Artist, int, error)
- func (m *MockServer) GetConfig() config.Backend
- func (m *MockServer) GetFavoriteAlbums(paging interfaces.Paging) ([]*models.Album, int, error)
- func (m *MockServer) GetGenreAlbums(genre models.IdName) ([]*models.Album, error)
- func (m *MockServer) GetGenres(paging interfaces.Paging) ([]*models.IdName, int, error)
- func (m *MockServer) GetImageUrl(item models.Id, itemType models.ItemType) string
- func (m *MockServer) GetInfo() (*models.ServerInfo, error)
- func (m *MockServer) GetInstantMix(item models.Item) ([]*models.Song, error)
- func (m *MockServer) GetLatestAlbums() ([]*models.Album, error)
- func (m *MockServer) GetLink(item models.Item) string
- func (m *MockServer) GetPlaylistSongs(playlist models.Id) ([]*models.Song, error)
- func (m *MockServer) GetPlaylists() ([]*models.Playlist, error)
- func (m *MockServer) GetRecentlyPlayed(paging interfaces.Paging) ([]*models.Song, int, error)
- func (m *MockServer) GetSimilarAlbums(album models.Id) ([]*models.Album, error)
- func (m *MockServer) GetSimilarArtists(artist models.Id) ([]*models.Artist, error)
- func (m *MockServer) GetSongs(query *interfaces.QueryOpts) ([]*models.Song, int, error)
- func (m *MockServer) ReportProgress(state *interfaces.ApiPlaybackState) error
- func (m *MockServer) Search(query string, itemType models.ItemType, maxResults int) ([]models.Item, error)
- func (m *MockServer) Start() error
- func (m *MockServer) Stop() error
- type RemoteController
- type RemoteServer
- type StreamBuffer
- type Streamer
Constants ¶
This section is empty.
Variables ¶
var MockAlbums = []*models.Album{ { Id: "album-1", Name: "album-1", Year: 2020, Duration: 3600, Artist: "artist-1", SongCount: 2, DiscCount: 1, Songs: []models.Id{"song-1", "song-2"}, }, { Id: "album-2", Name: "album-2", Year: 2019, Duration: 3600, Artist: "artist-1", SongCount: 2, DiscCount: 1, Songs: []models.Id{"song-3", "song-4"}, }, { Id: "album-3", Name: "album-3", Year: 2018, Duration: 3600, Artist: "artist-2", SongCount: 2, DiscCount: 1, Songs: []models.Id{"song-5", "song-6"}, }, }
var MockArtists = []*models.Artist{ { Id: "artist-1", Name: "artist 1", Albums: []models.Id{"album-1", "album-2"}, TotalDuration: 3600, AlbumCount: 2, }, { Id: "artist-2", Name: "artist 2", Albums: []models.Id{"album-3"}, TotalDuration: 3600, AlbumCount: 1, }, }
var MockPlaylists = []*models.Playlist{ { Id: "playlist-1", Name: "playlist 1", Songs: MockSongs[0:2], SongCount: 2, Duration: 360, }, { Id: "playlist-2", Name: "playlist 2", Songs: MockSongs[0:5], SongCount: 5, Duration: 900, }, }
var MockSongs = []*models.Song{
{
Id: "song-1",
Name: "song 1",
Duration: 180,
Index: 0,
Album: "album-1",
DiscNumber: 0,
AlbumArtist: "artist-1",
},
{
Id: "song-2",
Name: "song 2",
Duration: 180,
Index: 0,
Album: "album-1",
DiscNumber: 0,
AlbumArtist: "artist-1",
},
{
Id: "song-3",
Name: "song 3",
Duration: 180,
Index: 0,
Album: "album-2",
DiscNumber: 0,
AlbumArtist: "artist-1",
},
{
Id: "song-4",
Name: "song 4",
Duration: 180,
Index: 0,
Album: "album-2",
DiscNumber: 0,
AlbumArtist: "artist-1",
},
{
Id: "song-5",
Name: "song 5",
Duration: 180,
Index: 0,
Album: "album-3",
DiscNumber: 0,
AlbumArtist: "artist-2",
},
{
Id: "song-6",
Name: "song 6",
Duration: 180,
Index: 0,
Album: "album-3",
DiscNumber: 0,
AlbumArtist: "artist-2",
},
}
Functions ¶
func MimeToAudioFormat ¶ added in v0.8.0
func MimeToAudioFormat(mimeType string) (format interfaces.AudioFormat, err error)
Types ¶
type Browser ¶ added in v0.8.0
type Browser interface {
// GetArtists returns all artists
GetArtists(query *interfaces.QueryOpts) ([]*models.Artist, int, error)
// GetAlbumArtists returns artists that are marked as album artists. See GetArtists.
GetAlbumArtists(query *interfaces.QueryOpts) ([]*models.Artist, int, error)
// GetAlbums gets albums with given paging. Only PageSize and CurrentPage are used. Total count is returned
GetAlbums(query *interfaces.QueryOpts) ([]*models.Album, int, error)
// GetArtistAlbums returns albums that artist takes part in.
GetArtistAlbums(artist models.Id) ([]*models.Album, error)
// GetAlbumSongs returns songs for given album id.
GetAlbumSongs(album models.Id) ([]*models.Song, error)
// GetPlaylists returns all playlists.
GetPlaylists() ([]*models.Playlist, error)
// GetPlaylistSongs fills songs array for playlist. If there's error, songs will not be filled
GetPlaylistSongs(playlist models.Id) ([]*models.Song, error)
// GetSimilarArtists returns similar artists for artist id
GetSimilarArtists(artist models.Id) ([]*models.Artist, error)
// GetsimilarAlbums returns list of similar albums.
GetSimilarAlbums(album models.Id) ([]*models.Album, error)
// GetRecentlyPlayed returns songs that have been played last.
GetRecentlyPlayed(paging interfaces.Paging) ([]*models.Song, int, error)
// GetSongs returns songs by paging. It also returns total number of songs.
GetSongs(query *interfaces.QueryOpts) ([]*models.Song, int, error)
// GetGenres returns music genres with paging. Return genres, total genres and possible error
GetGenres(paging interfaces.Paging) ([]*models.IdName, int, error)
// GetAlbumArtist returns main artist for album.
GetAlbumArtist(album *models.Album) (*models.Artist, error)
// GetInstantMix returns instant mix based on given item.
GetInstantMix(item models.Item) ([]*models.Song, error)
// GetLink returns a link to item that can be opened with browser.
// If there is no link or item is invalid, empty link is returned.
GetLink(item models.Item) string
// Search returns values matching query and itemType, limited by number of maxResults,
// Only items of itemType should ne returned.
Search(query string, itemType models.ItemType, maxResults int) ([]models.Item, error)
GetAlbum(id models.Id) (*models.Album, error)
GetArtist(id models.Id) (*models.Artist, error)
GetImageUrl(item models.Id, itemType models.ItemType) string
}
Browser implements item-based viewing for music artists,albums,playlists etc.
type Cacher ¶ added in v0.9.0
type Cacher interface {
// CanCacheSong returns true if caching songs by Browser.GetSongs is implemented.
// Else, player tries to pull songs directly using Browser.GetAlbumSongs.
// GetAlbumSongs is slower method (when album contains less songs then paged song list).
CanCacheSongs() bool
}
Cacher describes how data may be pulled from remote server and might override some Browser methods.
type MediaServer ¶
type MediaServer interface {
Streamer
Browser
RemoteServer
}
MediaServer combines minimal interfaces for browsing and playing songs from remote server. Mediaserver can additionally implement RemoteController, and Cacher.
type MockConfig ¶ added in v0.9.0
type MockConfig struct {
}
func (*MockConfig) DumpConfig ¶ added in v0.9.0
func (m *MockConfig) DumpConfig() interface{}
func (*MockConfig) GetType ¶ added in v0.9.0
func (m *MockConfig) GetType() string
type MockServer ¶ added in v0.9.0
type MockServer struct {
Artists []*models.Artist
FavoriteArtists []*models.Artist
AlbumArtists []*models.Artist
Albums []*models.Album
AlbumSongs map[models.Id][]*models.Song
Playlists []*models.Playlist
PlaylistSongs map[models.Id]*models.Song
Songs []*models.Song
}
func NewMockServer ¶ added in v0.9.0
func NewMockServer() *MockServer
func (*MockServer) ConnectionOk ¶ added in v0.9.0
func (m *MockServer) ConnectionOk() error
func (*MockServer) GetAlbumArtist ¶ added in v0.9.0
func (*MockServer) GetAlbumArtists ¶ added in v0.9.0
func (m *MockServer) GetAlbumArtists(query *interfaces.QueryOpts) ([]*models.Artist, int, error)
func (*MockServer) GetAlbumSongs ¶ added in v0.9.0
func (*MockServer) GetAlbums ¶ added in v0.9.0
func (m *MockServer) GetAlbums(query *interfaces.QueryOpts) ([]*models.Album, int, error)
func (*MockServer) GetArtistAlbums ¶ added in v0.9.0
func (*MockServer) GetArtists ¶ added in v0.9.0
func (m *MockServer) GetArtists(query *interfaces.QueryOpts) ([]*models.Artist, int, error)
func (*MockServer) GetConfig ¶ added in v0.9.0
func (m *MockServer) GetConfig() config.Backend
func (*MockServer) GetFavoriteAlbums ¶ added in v0.9.0
func (m *MockServer) GetFavoriteAlbums(paging interfaces.Paging) ([]*models.Album, int, error)
func (*MockServer) GetGenreAlbums ¶ added in v0.9.0
func (*MockServer) GetGenres ¶ added in v0.9.0
func (m *MockServer) GetGenres(paging interfaces.Paging) ([]*models.IdName, int, error)
func (*MockServer) GetImageUrl ¶ added in v0.9.0
func (*MockServer) GetInfo ¶ added in v0.9.0
func (m *MockServer) GetInfo() (*models.ServerInfo, error)
func (*MockServer) GetInstantMix ¶ added in v0.9.0
func (*MockServer) GetLatestAlbums ¶ added in v0.9.0
func (m *MockServer) GetLatestAlbums() ([]*models.Album, error)
func (*MockServer) GetPlaylistSongs ¶ added in v0.9.0
func (*MockServer) GetPlaylists ¶ added in v0.9.0
func (m *MockServer) GetPlaylists() ([]*models.Playlist, error)
func (*MockServer) GetRecentlyPlayed ¶ added in v0.9.0
func (m *MockServer) GetRecentlyPlayed(paging interfaces.Paging) ([]*models.Song, int, error)
func (*MockServer) GetSimilarAlbums ¶ added in v0.9.0
func (*MockServer) GetSimilarArtists ¶ added in v0.9.0
func (*MockServer) GetSongs ¶ added in v0.9.0
func (m *MockServer) GetSongs(query *interfaces.QueryOpts) ([]*models.Song, int, error)
func (*MockServer) ReportProgress ¶ added in v0.9.0
func (m *MockServer) ReportProgress(state *interfaces.ApiPlaybackState) error
func (*MockServer) Start ¶ added in v0.9.0
func (m *MockServer) Start() error
func (*MockServer) Stop ¶ added in v0.9.0
func (m *MockServer) Stop() error
type RemoteController ¶ added in v0.8.0
type RemoteController interface {
// SetPlayer allows connecting remote controller to player, which can
// then be controlled remotely.
SetPlayer(player interfaces.Player)
SetQueue(q interfaces.QueueController)
RemoteControlEnabled() error
}
RemoteController controls audio player remotely as well as keeps remote server updated on player status.
type RemoteServer ¶ added in v0.8.0
type RemoteServer interface {
// GetInfo returns general info
GetInfo() (*models.ServerInfo, error)
// ConnectionOk returns nil of connection ok, else returns description for failure.
ConnectionOk() error
// GetConfig returns backend config that is saved to config file.
GetConfig() config.Backend
// ReportProgress reports player progress to remote controller.
ReportProgress(state *interfaces.ApiPlaybackState) error
// Start starts background service for remote server, if any.
Start() error
// Stop stops background service for remote server, if any.
Stop() error
// GetId returns unique id for server. If server does not provide one,
// it can be e.g. hashed from url and user.
GetId() string
}
RemoteServer contains general methods for getting server connection status
type StreamBuffer ¶ added in v0.8.0
type StreamBuffer struct {
// contains filtered or unexported fields
}
StreamBuffer is a buffer that reads whole http body in the background and copies it to local buffer.
func NewStreamDownload ¶ added in v0.6.0
func (*StreamBuffer) AudioFormat ¶ added in v0.8.0
func (s *StreamBuffer) AudioFormat() (format interfaces.AudioFormat, err error)
func (*StreamBuffer) Close ¶ added in v0.8.0
func (s *StreamBuffer) Close() error
func (*StreamBuffer) Len ¶ added in v0.8.0
func (s *StreamBuffer) Len() int
func (*StreamBuffer) Read ¶ added in v0.8.0
func (s *StreamBuffer) Read(p []byte) (n int, err error)
func (*StreamBuffer) SecondsBuffered ¶ added in v0.8.0
func (s *StreamBuffer) SecondsBuffered() int
type Streamer ¶ added in v0.8.0
type Streamer interface {
// Stream streams song. If server does not implement separate streaming endpoint,
// implementcation can wrap Download.
Stream(Song *models.Song) (io.ReadCloser, interfaces.AudioFormat, error)
// Download downloads original audio file.
Download(Song *models.Song) (io.ReadCloser, interfaces.AudioFormat, error)
}
Streamer contains methods for streaming audio from remote location.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package jellyfin implements connection to Jellyfin server.
|
Package jellyfin implements connection to Jellyfin server. |
|
Package subsonic contains remote server implementation for Subsonic-compatible servers.
|
Package subsonic contains remote server implementation for Subsonic-compatible servers. |