Create IPC socket on UNIX platforms (#1018)
* Create IPC socket on UNIX platforms Creates an IPC socket which remote programs/scripts can connect to. This can be used to control ncspot or fetch the current playback status. At the moment, only remote control is implemented. Next step is to send the current player status as a JSON object. Fixes #524 * Publish status changes to connected sockets Whenever the playback mode (playing, paused, stopped) or the track changes, all socket listeners will be notified. Fixes #924, fixes #1019 * Document IPC feature
This commit is contained in:
committed by
GitHub
parent
93816af654
commit
ec4b7c209a
25
README.md
25
README.md
@@ -52,6 +52,7 @@ You **must** have an existing premium Spotify subscription to use `ncspot`.
|
||||
- [Library](#library)
|
||||
- [Vim-Like Search Bar](#vim-like-search-bar)
|
||||
- [Vim-Like Commands](#vim-like-commands)
|
||||
- [Remote control (IPC)](#remote-control-ipc)
|
||||
- [Configuration](#configuration)
|
||||
- [Custom Keybindings](#custom-keybindings)
|
||||
- [Proxy](#proxy)
|
||||
@@ -325,6 +326,30 @@ Note: \<FOO\> - mandatory arg; [BAR] - optional arg
|
||||
| `noop` | Do nothing. Useful for disabling default keybindings. See [custom keybindings](#custom-keybindings). |
|
||||
| `reload` | Reload the configuration from disk. See [Configuration](#configuration). |
|
||||
|
||||
## Remote control (IPC)
|
||||
|
||||
Apart from MPRIS, ncspot will also create a domain socket on UNIX platforms
|
||||
(Linux, macOS, *BSD) at `~/.cache/ncspot/ncspot.sock`. Applications or scripts
|
||||
can connect to this socket to send commands or be notified of the currently
|
||||
playing track, i.e. with `netcat`:
|
||||
|
||||
```
|
||||
% nc -U ~/.cache/ncspot/ncspot.sock
|
||||
play
|
||||
{"mode":{"Playing":{"secs_since_epoch":1672249086,"nanos_since_epoch":547517730}},"playable":{"type":"Track","id":"2wcrQZ7ZJolYEfIaPP9yL4","uri":"spotify:track:2wcrQZ7ZJolYEfIaPP9yL4","title":"Hit Me Where It Hurts","track_number":4,"disc_number":1,"duration":184132,"artists":["Caroline Polachek"],"artist_ids":["4Ge8xMJNwt6EEXOzVXju9a"],"album":"Pang","album_id":"4ClyeVlAKJJViIyfVW0yQD","album_artists":["Caroline Polachek"],"cover_url":"https://i.scdn.co/image/ab67616d0000b2737d983e7bf67c2806218c2759","url":"https://open.spotify.com/track/2wcrQZ7ZJolYEfIaPP9yL4","added_at":"2022-12-19T22:41:05Z","list_index":0}}
|
||||
playpause
|
||||
{"mode":{"Paused":{"secs":25,"nanos":575000000}},"playable":{"type":"Track","id":"2wcrQZ7ZJolYEfIaPP9yL4","uri":"spotify:track:2wcrQZ7ZJolYEfIaPP9yL4","title":"Hit Me Where It Hurts","track_number":4,"disc_number":1,"duration":184132,"artists":["Caroline Polachek"],"artist_ids":["4Ge8xMJNwt6EEXOzVXju9a"],"album":"Pang","album_id":"4ClyeVlAKJJViIyfVW0yQD","album_artists":["Caroline Polachek"],"cover_url":"https://i.scdn.co/image/ab67616d0000b2737d983e7bf67c2806218c2759","url":"https://open.spotify.com/track/2wcrQZ7ZJolYEfIaPP9yL4","added_at":"2022-12-19T22:41:05Z","list_index":0}}
|
||||
```
|
||||
|
||||
Each time the playback status changes (i.e. after sending the `play`/`playpause`
|
||||
command or simply by playing the queue), the current status will be published as
|
||||
a JSON structure.
|
||||
|
||||
Possible use cases for this could be:
|
||||
- Controlling a detached ncspot session (in `tmux` for example)
|
||||
- Displaying the currently playing track in your favorite application/status bar
|
||||
- Setting up routines, i.e. to play specific songs/playlists when ncspot starts
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration is saved to `~/.config/ncspot/config.toml` (or
|
||||
|
||||
Reference in New Issue
Block a user