Files
yellowjacket/backend/mediacontrols/mediacontrols.go
T

64 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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.01.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.01.0) to the OS.
UpdateVolume(volume float64)
// Close tears down the OS registration and releases resources.
Close()
}