Instead of trying to handle signals for every step of the `cursive`
event loop, move the signal handling into its own asynchronous task and
send callbacks to `cursive` when a signal arrives.
The `lazy_static` crate was superseded by the `once_cell` crate which
has been included in Rust's standard library since version `1.70`.
Remove the `lazy_static` dependency and refactor all use cases to use
`std::sync::OnceLock` instead.
Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
* Rewrite MPRIS implementation using zbus
The initial DBus implementation was getting harder to maintain and `zbus` offers
some nice convenience features that should make our MPRIS implementation
cleaner.
For now this only implements the `org.mpris.MediaPlayer2` interface which does
not do much.
Should help with #1103
* Implement MPRIS properties
- `PlaybackStatus`
- `PlaybackRate`
- `Volume` (get/set)
* Implement remaining player properties/functions
* Emit signal for changed properties on track change
* Add automatic shell completion generation.
Add automatic generation of shell completion scripts for various shells
(the ones supported by `clap_complete`). The scripts can be generated
using the `generate-shell-completion` xtask, which outputs the shell
script to stdout.
* Improve shell completion generation xtask.
General improvements to both the shell completion generation as well as
the xtask package itself. Update the README to match the new additions.
* Add manpage generation.
* Hide xtask compilation info.
This changes the default behavior of the `cargo run` command for xtasks
to hide the compilation info. This makes sense as xtask's are run as a
program, and showing the compilation info every time clutters stdout
with unrelated info.
* Move ncspot's `clap::Command` to `lib.rs`.
Moving the `clap::Command` used internally by ncspot to a library allows
it to be easily shared between different packages (xtask and ncspot
itself).
This commit also reworks the xtasks to use clap for parsing the xtask
arguments, which simplifies writing new xtasks.
* Make `generate-manpage` `--output` optional.
When more xtasks get added, it would make sense to have a `generate-all`
subcommand that executes all xtasks, which wouldn't be able to have
options for every separate subcommand. Therefore the `output` argument
should be optional, and by default output to the `misc` directory which
contains extra metadata files already.
* Add packaging info to `README.md`.
Update the README to include information for packagers. The information
includes provided files as well as info on how to generate some of them.
* 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
Passing IDs to rspotify still feels a little wonky with their `Id` changes
making use of `Cow`. Maybe it can be simplified on our end, but it's a start.
Fixes#844
See also:
https://github.com/ramsayleung/rspotify/pull/332