Documentation ¶
Index ¶
- Variables
- func Ping(client *ReconnectingClient) error
- func RefreshCache(client *ReconnectingClient) error
- func StringsForSubsystems(subsystems []Subsystem) (strings []string)
- type ClientCache
- type ClientCacheEntry
- type ClientOption
- type Connected
- type ConnectedListener
- type CurrentSong
- type CurrentSongChanged
- type CurrentSongChangedListener
- type Disconnected
- type DisconnectedListener
- type ListenerSet
- type NetAddr
- type OffOnOneshot
- type PingFunc
- type PlayerState
- type Playlist
- type PlaylistChanged
- type PlaylistChangedListener
- type PlaylistEntry
- type ReconnectingClient
- type Status
- type StatusChanged
- type StatusChangedListener
- type Subsystem
- type SubsystemsChanged
- type SubsystemsChangedListener
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrNotConnected = errors.New("not connected")
Functions ¶
func Ping ¶
func Ping(client *ReconnectingClient) error
func RefreshCache ¶
func RefreshCache(client *ReconnectingClient) error
func StringsForSubsystems ¶
Types ¶
type ClientCache ¶
type ClientCache struct {
// contains filtered or unexported fields
}
func NewClientCache ¶
func NewClientCache() *ClientCache
func (*ClientCache) GetOrCreate ¶
func (cc *ClientCache) GetOrCreate(network, addr string, options ...ClientOption) (*ClientCacheEntry, error)
func (*ClientCache) Shutdown ¶
func (cc *ClientCache) Shutdown()
type ClientCacheEntry ¶
type ClientCacheEntry struct { NetAddr NetAddr Options []ClientOption *ReconnectingClient }
type ClientOption ¶
type ClientOption func(*ReconnectingClient)
func WithBlocking ¶
func WithBlocking() ClientOption
func WithKeepalive ¶
func WithKeepalive(keepalive bool) ClientOption
func WithPassword ¶
func WithPassword(password string) ClientOption
func WithPingFunc ¶
func WithPingFunc(pingFunc PingFunc) ClientOption
WithPingFunc sets an alternative function for keepalive testing.
This can e.g. be used to replace the ping with a status check.
func WithWatchSubsystems ¶
func WithWatchSubsystems(subsystems ...Subsystem) ClientOption
type Connected ¶
type Connected func(client *ReconnectingClient)
type ConnectedListener ¶
type ConnectedListener struct {
// contains filtered or unexported fields
}
func NewConnectedListener ¶
func NewConnectedListener(fn func(client *ReconnectingClient)) *ConnectedListener
func (*ConnectedListener) Connected ¶
func (l *ConnectedListener) Connected(client *ReconnectingClient)
type CurrentSong ¶
type CurrentSong struct { PreviousSong *PlaylistEntry CurrentSong *PlaylistEntry NextSong *PlaylistEntry }
func NewCurrentSong ¶
func NewCurrentSong(status *Status, playlist *Playlist) *CurrentSong
func (*CurrentSong) Equals ¶
func (cs *CurrentSong) Equals(other *CurrentSong) bool
type CurrentSongChanged ¶
type CurrentSongChanged func(client *ReconnectingClient, currentSong *CurrentSong)
type CurrentSongChangedListener ¶
type CurrentSongChangedListener struct {
// contains filtered or unexported fields
}
func NewCurrentSongChangedListener ¶
func NewCurrentSongChangedListener(fn func(client *ReconnectingClient, currentSong *CurrentSong)) *CurrentSongChangedListener
func (*CurrentSongChangedListener) CurrentSongChanged ¶
func (l *CurrentSongChangedListener) CurrentSongChanged(client *ReconnectingClient, currentSong *CurrentSong)
type Disconnected ¶
type Disconnected func(client *ReconnectingClient)
type DisconnectedListener ¶
type DisconnectedListener struct {
// contains filtered or unexported fields
}
func NewDisconnectedListener ¶
func NewDisconnectedListener(fn func(client *ReconnectingClient)) *DisconnectedListener
func (*DisconnectedListener) Disconnected ¶
func (l *DisconnectedListener) Disconnected(client *ReconnectingClient)
type ListenerSet ¶
type ListenerSet[T comparable] struct { // contains filtered or unexported fields }
ListenerSet provides synchronized access to a set of listeners
func NewListenerSet ¶
func NewListenerSet[T comparable]() *ListenerSet[T]
func (*ListenerSet[T]) Add ¶
func (l *ListenerSet[T]) Add(e T)
func (*ListenerSet[T]) Notify ¶
func (l *ListenerSet[T]) Notify(notifyFn func(l T))
func (*ListenerSet[T]) Remove ¶
func (l *ListenerSet[T]) Remove(e T)
type OffOnOneshot ¶
type OffOnOneshot string
const Off OffOnOneshot = "0"
const On OffOnOneshot = "1"
const Oneshot OffOnOneshot = "oneshot"
func ParseOffOnOneshot ¶
func ParseOffOnOneshot(s string) OffOnOneshot
type PingFunc ¶
type PingFunc func(client *ReconnectingClient) error
type PlayerState ¶
type PlayerState string
PlayerState represents the current player state.
const ( Play PlayerState = "play" Stop PlayerState = "stop" Pause PlayerState = "pause" )
type PlaylistChanged ¶
type PlaylistChanged func(client *ReconnectingClient, playlist *Playlist)
type PlaylistChangedListener ¶
type PlaylistChangedListener struct {
// contains filtered or unexported fields
}
func NewPlaylistChangedListener ¶
func NewPlaylistChangedListener(fn func(client *ReconnectingClient, playlist *Playlist)) *PlaylistChangedListener
func (*PlaylistChangedListener) PlaylistChanged ¶
func (l *PlaylistChangedListener) PlaylistChanged(client *ReconnectingClient, playlist *Playlist)
type PlaylistEntry ¶
type PlaylistEntry struct { // the artist name. Its meaning is not well-defined; see “composer” and “performer” for more specific tags. Artist string // same as artist, but for sorting. This usually omits prefixes such as “The”. ArtistSort string // the album name. Album string // same as album, but for sorting. AlbumSort string // on multi-artist albums, this is the artist name which shall be used for the whole album. The exact meaning of this tag is not well-defined. AlbumArtist string // same as albumartist, but for sorting. AlbumArtistSort string // the song title. Title string // same as title, but for sorting. TitleSort string // the decimal track number within the album. Track int // a name for this song. This is not the song title. The exact meaning of this tag is not well-defined. It is often used by badly configured internet radio stations with broken tags to squeeze both the artist name and the song title in one tag. Name string // the music genre. Genre string // the mood of the audio with a few keywords. Mood string // the song’s release date. This is usually a 4-digit year. Date string // the song’s original release date. OriginalDate string // the artist who composed the song. Composer string // same as composer, but for sorting. ComposerSort string // the artist who performed the song. Performer string // the conductor who conducted the song. Conductor string // a work is a distinct intellectual or artistic creation, which can be expressed in the form of one or more audio recordings Work string // the ensemble performing this song, e.g. “Wiener Philharmoniker”. Ensemble string // name of the movement, e.g. “Andante con moto”. Movement string // movement number, e.g. “2” or “II”. MovementNumber string // location of the recording, e.g. “Royal Albert Hall”. Location string // "used if the sound belongs to a larger category of sounds/music" (from the IDv2.4.0 TIT1 description). Grouping string // a human-readable comment about this song. The exact meaning of this tag is not well-defined. Comment string // the decimal disc number in a multi-disc album. Disc int // the name of the label or publisher. Label string // the artist id in the MusicBrainz database. MusicbrainzArtistId string // the album id in the MusicBrainz database. MusicbrainzAlbumId string // the album artist id in the MusicBrainz database. MusicbrainzAlbumArtistId string // the track id in the MusicBrainz database. MusicbrainzTrackId string // the release group id in the MusicBrainz database. MusicbrainzReleaseGroupId string // the release track id in the MusicBrainz database. MusicbrainzReleaseTrackId string // the work id in the MusicBrainz database. MusicbrainzWorkId string // the duration of the song in seconds; may contain a fractional part. Duration float32 // like duration, but as integer value. This is deprecated and is only here for compatibility with older clients. Do not use. Time int // if this is a queue item referring only to a portion of the song file, then this attribute contains the time range in the form START-END or START- (open ended); both START and END are time stamps within the song in seconds (may contain a fractional part). Example: 60-120 plays only the second minute; “180 skips the first three minutes. Range string // the audio format of the song (or an approximation to a format supported by MPD and the decoder plugin being used). When playing this file, the audio value in the status response should be the same. Format string // the time stamp of the last modification of the underlying file in ISO 8601 format. Example: “2008-09-28T20:04:57Z” LastModified string // the time stamp when the file was added in ISO 8601. A negative value means that this is unknown/unavailable. Example: “2023-11-25T13:25:07Z” Added string }
PlaylistEntry represents song attributes of a playlist entry.
func ParsePlaylistEntryAttrs ¶
func ParsePlaylistEntryAttrs(attrs mpd.Attrs) *PlaylistEntry
func (*PlaylistEntry) Equals ¶
func (pe *PlaylistEntry) Equals(other *PlaylistEntry) bool
type ReconnectingClient ¶
type ReconnectingClient struct { *mpd.Client PlaylistCache atomic.Pointer[Playlist] StatusCache atomic.Pointer[Status] CurrentSongCache atomic.Pointer[CurrentSong] ConnectedListeners *ListenerSet[*ConnectedListener] DisconnectedListeners *ListenerSet[*DisconnectedListener] SubsystemsChangedListeners *ListenerSet[*SubsystemsChangedListener] StatusChangedListeners *ListenerSet[*StatusChangedListener] PlaylistChangedListeners *ListenerSet[*PlaylistChangedListener] CurrentSongChangedListeners *ListenerSet[*CurrentSongChangedListener] // contains filtered or unexported fields }
func NewReconnectingClient ¶
func NewReconnectingClient(network, addr string, options ...ClientOption) (*ReconnectingClient, error)
func (*ReconnectingClient) Close ¶
func (c *ReconnectingClient) Close() error
func (*ReconnectingClient) Connect ¶
func (c *ReconnectingClient) Connect() error
func (*ReconnectingClient) Do ¶
func (c *ReconnectingClient) Do(fn func(client *ReconnectingClient) error) error
Do runs a client command.
All commands must be run via Do() so they are protected by the connectLock and obey correct idle behavior.
func (*ReconnectingClient) IsConnected ¶
func (c *ReconnectingClient) IsConnected() bool
func (*ReconnectingClient) ReloadStatus ¶
func (c *ReconnectingClient) ReloadStatus() error
type Status ¶
type Status struct { // the name of the current partition (see Partition commands) Partition string // 0-100 (deprecated: -1 if the volume cannot be determined) Volume int // 0 or 1 Repeat bool // 0 or 1 Random bool // 0, 1, or oneshot Single OffOnOneshot // 0, 1 or oneshot 13 Consume OffOnOneshot // 31-bit unsigned integer, the playlist version number Playlist uint32 // integer, the length of the playlist PlaylistLength int // play, stop, or pause State PlayerState // playlist song number of the current song stopped on or playing Song int // playlist songid of the current song stopped on or playing SongId int // playlist song number of the next song to be played NextSong int // playlist songid of the next song to be played NextSongId int // total time elapsed (of current playing/paused song) in seconds (deprecated, use elapsed instead) Time int // Total time elapsed within the current song in seconds, but with higher resolution. Elapsed float32 // Duration of the current song in seconds. Duration int // instantaneous bitrate in kbps Bitrate int // crossfade in seconds (see Cross-Fading) CrossFade int // mixramp threshold in dB MixRampDB int // mixrampdelay in seconds MixRampDelay int // The format emitted by the decoder plugin during playback, format: samplerate:bits:channels. See Global Audio Format for a detailed explanation. Audio string // Job id UpdatingDB string // if there is an error, returns message here Error string }
Status represents the current player status.
func ParseStatusAttrs ¶
type StatusChanged ¶
type StatusChanged func(client *ReconnectingClient, status *Status)
type StatusChangedListener ¶
type StatusChangedListener struct {
// contains filtered or unexported fields
}
func NewStatusChangedListener ¶
func NewStatusChangedListener(fn func(client *ReconnectingClient, status *Status)) *StatusChangedListener
func (*StatusChangedListener) StatusChanged ¶
func (l *StatusChangedListener) StatusChanged(client *ReconnectingClient, status *Status)
type Subsystem ¶
type Subsystem string
const ( // the song database has been modified after update. SubsystemDatabase Subsystem = "database" // a database update has started or finished. If the database was modified during the update, the database event is also emitted. SubsystemUpdate Subsystem = "update" // a stored playlist has been modified, renamed, created or deleted SubsystemStoredPlaylist Subsystem = "stored_playlist" // the queue (i.e. the current playlist) has been modified SubsystemPlaylist Subsystem = "playlist" // the player has been started, stopped or seeked or tags of the currently playing song have changed (e.g. received from stream) SubsystemPlayer Subsystem = "player" // the volume has been changed SubsystemMixer Subsystem = "mixer" // an audio output has been added, removed or modified (e.g. renamed, enabled or disabled) SubsystemOutput Subsystem = "output" // options like repeat, random, crossfade, replay gain SubsystemOptions Subsystem = "options" // a partition was added, removed or changed SubsystemPartition Subsystem = "partition" // the sticker database has been modified. SubsystemSticker Subsystem = "sticker" // a client has subscribed or unsubscribed to a channel SubsystemSubscription Subsystem = "subscription" // a message was received on a channel this client is subscribed to; this event is only emitted when the client’s message queue is empty SubsystemMessage Subsystem = "message" // a neighbor was found or lost SubsystemNeighbour Subsystem = "neighbour" // the mount list has changed SubsystemMount Subsystem = "mount" )
func SubsystemsForStrings ¶
type SubsystemsChanged ¶
type SubsystemsChanged func(client *ReconnectingClient, subsystems []Subsystem)
type SubsystemsChangedListener ¶
type SubsystemsChangedListener struct {
// contains filtered or unexported fields
}
func NewSubsystemsChangedListener ¶
func NewSubsystemsChangedListener(fn func(client *ReconnectingClient, subsystems []Subsystem)) *SubsystemsChangedListener
func (*SubsystemsChangedListener) SubsystemsChanged ¶
func (l *SubsystemsChangedListener) SubsystemsChanged(client *ReconnectingClient, subsystems []Subsystem)
Click to show internal directories.
Click to hide internal directories.