64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
// Package mediacontrols provides OS media control integration.
|
||
//
|
||
// On Linux this registers a MPRIS2 D-Bus service so that desktop
|
||
// environments, playerctl, and media keys can control playback and
|
||
// see the currently playing track. Other platforms get a no-op stub.
|
||
package mediacontrols
|
||
|
||
// PlaybackState represents the current playback state for the OS.
|
||
type PlaybackState int
|
||
|
||
// Playback state values.
|
||
const (
|
||
StateStopped PlaybackState = iota
|
||
StatePlaying
|
||
StatePaused
|
||
)
|
||
|
||
// Metadata holds track information to display in the OS media overlay.
|
||
type Metadata struct {
|
||
Title string
|
||
Artist string
|
||
Album string
|
||
ArtFilePath string // Absolute filesystem path to cover art.
|
||
DurationSec int
|
||
}
|
||
|
||
// Callbacks are invoked when the OS sends media commands.
|
||
type Callbacks struct {
|
||
OnPlay func()
|
||
OnPause func()
|
||
OnPlayPause func()
|
||
OnStop func()
|
||
OnNext func()
|
||
OnPrevious func()
|
||
OnSeek func(positionSec int)
|
||
OnVolume func(volume float64) // 0.0–1.0 linear scale.
|
||
}
|
||
|
||
// Handler manages the OS media control integration.
|
||
type Handler interface {
|
||
// Init registers with the OS and wires incoming commands to
|
||
// the provided callbacks. It must be called once during startup.
|
||
Init(callbacks Callbacks) error
|
||
|
||
// UpdateMetadata pushes new track metadata to the OS overlay.
|
||
UpdateMetadata(meta Metadata)
|
||
|
||
// UpdatePlaybackState pushes the playback state and current
|
||
// position. The position is used as a new anchor; the OS
|
||
// interpolates from there while playing.
|
||
UpdatePlaybackState(state PlaybackState, positionSec int)
|
||
|
||
// NotifySeek signals that the user seeked to a new position.
|
||
// This is separate from UpdatePlaybackState because MPRIS
|
||
// emits a distinct Seeked signal for this.
|
||
NotifySeek(positionSec int)
|
||
|
||
// UpdateVolume pushes the current volume (0.0–1.0) to the OS.
|
||
UpdateVolume(volume float64)
|
||
|
||
// Close tears down the OS registration and releases resources.
|
||
Close()
|
||
}
|