Documentation
¶
Overview ¶
Package ipc provides Unix socket IPC for remote playback control of cliamp. The protocol is newline-delimited JSON over a Unix domain socket.
Index ¶
- func DefaultSocketPath() string
- func StreamBands(ctx context.Context, sockPath string, interval time.Duration, out io.Writer) error
- type BandsRequestMsg
- type DeviceMsg
- type Dispatcher
- type DispatcherFunc
- type EQMsg
- type LoadMsg
- type MonoMsg
- type PauseMsg
- type PlayMsg
- type PluginDispatcher
- type QueueMsg
- type RepeatMsg
- type Request
- type Response
- type SeekMsg
- type Server
- type ShuffleMsg
- type SpeedMsg
- type StatusRequestMsg
- type ThemeInfo
- type ThemeMsg
- type TrackInfo
- type VisMsg
- type VolumeMsg
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DefaultSocketPath ¶
func DefaultSocketPath() string
DefaultSocketPath returns the default IPC socket path (~/.config/cliamp/cliamp.sock).
func StreamBands ¶
StreamBands holds one IPC connection open and writes one NDJSON line per tick containing the current visualizer bands and mode. It exits cleanly when ctx is cancelled or the server closes the socket.
Types ¶
type BandsRequestMsg ¶
type BandsRequestMsg struct {
Reply chan Response
}
BandsRequestMsg asks the TUI for the current visualizer band values (smoothed) and the active visualizer mode name. Lightweight compared to StatusRequestMsg — intended for high-rate polling from external widgets.
type DeviceMsg ¶
DeviceMsg requests switching the audio output device or listing devices. If Name is "list", returns available devices. Otherwise switches to named device.
type Dispatcher ¶
type Dispatcher interface {
Send(msg any)
}
Dispatcher is how the server sends commands to the TUI. In main.go, this is wired to prog.Send().
type DispatcherFunc ¶
type DispatcherFunc func(msg any)
DispatcherFunc adapts a plain function to the Dispatcher interface.
type EQMsg ¶
EQMsg requests setting EQ preset by name or a single band's gain. If Band >= 0, sets that band to Value dB. Otherwise applies preset Name.
type LoadMsg ¶
LoadMsg requests loading a playlist by name. Reply receives the result so the client can report errors.
type MonoMsg ¶
MonoMsg requests toggling or setting mono mode. If Name is "on"/"off", it sets the mode explicitly; "toggle" toggles.
type PauseMsg ¶
type PauseMsg struct{}
PauseMsg requests playback to pause (pause only, not toggle).
type PluginDispatcher ¶
type PluginDispatcher interface {
EmitCommand(plugin, command string, args []string) (string, error)
CommandList() []string
}
PluginDispatcher is the hook the IPC server calls to forward plugin.call and plugin.commands requests to the Lua plugin manager. Optional — if nil, those subcommands return an error.
type QueueMsg ¶
type QueueMsg struct{ Path string }
QueueMsg requests queuing a file path for playback.
type RepeatMsg ¶
RepeatMsg requests setting or cycling the repeat mode. Name is "off", "all", "one", or "cycle".
type Request ¶
type Request struct {
Cmd string `json:"cmd"`
Value float64 `json:"value,omitempty"`
Playlist string `json:"playlist,omitempty"`
Path string `json:"path,omitempty"`
Name string `json:"name,omitempty"`
Band int `json:"band,omitempty"`
Sub string `json:"sub,omitempty"`
Args []string `json:"args,omitempty"`
}
Request is the JSON command sent by the client.
type Response ¶
type Response struct {
OK bool `json:"ok"`
Error string `json:"error,omitempty"`
State string `json:"state,omitempty"`
Track *TrackInfo `json:"track,omitempty"`
Position float64 `json:"position,omitempty"`
Duration float64 `json:"duration,omitempty"`
Volume float64 `json:"volume,omitempty"`
Playlist string `json:"playlist,omitempty"`
Index int `json:"index,omitempty"`
Total int `json:"total,omitempty"`
Visualizer string `json:"visualizer,omitempty"`
Shuffle *bool `json:"shuffle,omitempty"`
Repeat string `json:"repeat,omitempty"`
Mono *bool `json:"mono,omitempty"`
Speed float64 `json:"speed,omitempty"`
EQPreset string `json:"eq_preset,omitempty"`
Device string `json:"device,omitempty"`
Output string `json:"output,omitempty"`
Items []string `json:"items,omitempty"`
Theme *ThemeInfo `json:"theme,omitempty"`
Bands []float64 `json:"bands,omitempty"`
}
Response is the JSON response sent by the server.
func Send ¶
Send connects to the IPC socket, sends a request, and returns the response. The connection is closed after a single request/response exchange.
func SendWithDeadline ¶
SendWithDeadline is like Send but lets the caller override the exchange deadline. Plugin commands can legitimately run for minutes (downloads), so the generic 5s cap is too short for them.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server listens on a Unix socket and dispatches IPC commands.
func NewServer ¶
func NewServer(sockPath string, disp Dispatcher) (*Server, error)
NewServer creates and starts the IPC server. It cleans up stale sockets before binding. The socket is created with 0600 permissions (owner only).
func (*Server) SetPluginDispatcher ¶
func (s *Server) SetPluginDispatcher(p PluginDispatcher)
SetPluginDispatcher wires in the Lua plugin manager after the server starts. Plugin dispatch is optional — without it, plugin subcommands return an error.
type ShuffleMsg ¶
ShuffleMsg requests toggling or setting shuffle mode. If Name is "on"/"off", it sets the mode explicitly; "toggle" toggles.
type StatusRequestMsg ¶
type StatusRequestMsg struct {
Reply chan Response
}
StatusRequestMsg asks the TUI for current state. The TUI writes the response to Reply and closes the channel.
type ThemeInfo ¶
type ThemeInfo struct {
Name string `json:"name"`
Accent string `json:"accent,omitempty"`
Fg string `json:"fg,omitempty"`
BrightFg string `json:"bright_fg,omitempty"`
Green string `json:"green,omitempty"`
Yellow string `json:"yellow,omitempty"`
Red string `json:"red,omitempty"`
}
ThemeInfo carries the active theme name and its resolved hex colors. Empty hex fields mean the default (ANSI fallback) theme is active.
type ThemeMsg ¶
ThemeMsg requests changing the TUI theme by name. Reply receives confirmation or error if theme not found.
type TrackInfo ¶
type TrackInfo struct {
Title string `json:"title,omitempty"`
Artist string `json:"artist,omitempty"`
Path string `json:"path"`
}
TrackInfo is the track metadata in a status response.