librespot/Cargo.toml
Benedikt 94d174c33d
Discovery: Refactor and add Avahi DBus backend (#1347)
* discovery: use opaque error type for DnsSdError

This helps to decouple discovery and core by not leaking implementation
details of the zeroconf backend into Error conversion impls in core.

* discovery: map all MDNS/DNS-SD errors to DiscoveryError::DnsSdError

previously, libmdns errors would use a generic conversion
from std::io::Error to core::Error

* discovery: use an opaque type for the handle to the DNS-SD service

* discovery: make features additive

i.e. add with-libmdns instead of using not(with-dns-sd).

The logic is such that enabling with-dns-sd in addition to the default
with-libmdns will still end up using dns-sd, as before.
If only with-libmdns is enabled, that will be the default.
If none of the features is enabled, attempting to build a `Discovery`
will yield an error.

* discovery: add --zeroconf-backend CLI flag

* discovery: Add minimal Avahi zeroconf backend

* bump MSRV to 1.75

required by zbus >= 4

* discovery: ensure that server and dns-sd backend shutdown gracefully

Previously, on drop the the shutdown_tx/close_tx, it wasn't guaranteed
the corresponding tasks would continue to be polled until they actually
completed their shutdown.

Since dns_sd::Service is not Send and non-async, and because libmdns is
non-async, put them on their own threads.

* discovery: use a shared channel for server and zeroconf status messages

* discovery: add Avahi reconnection logic

This deals gracefully with the case where the Avahi daemon is restarted
or not running initially.

* discovery: allow running when compiled without zeroconf backend...

...but exit with an error if there's no way to authenticate

* better error messages for invalid options with no short flag
2024-10-26 16:45:02 +02:00

106 lines
2.9 KiB
TOML

[package]
name = "librespot"
version = "0.5.0"
rust-version = "1.75"
authors = ["Librespot Org"]
license = "MIT"
description = "An open source client library for Spotify, with support for Spotify Connect"
keywords = ["spotify"]
repository = "https://github.com/librespot-org/librespot"
readme = "README.md"
edition = "2021"
[workspace]
[lib]
name = "librespot"
path = "src/lib.rs"
[[bin]]
name = "librespot"
path = "src/main.rs"
doc = false
[dependencies.librespot-audio]
path = "audio"
version = "0.5.0"
[dependencies.librespot-connect]
path = "connect"
version = "0.5.0"
[dependencies.librespot-core]
path = "core"
version = "0.5.0"
[dependencies.librespot-discovery]
path = "discovery"
version = "0.5.0"
default-features = false
[dependencies.librespot-metadata]
path = "metadata"
version = "0.5.0"
[dependencies.librespot-playback]
path = "playback"
version = "0.5.0"
[dependencies.librespot-protocol]
path = "protocol"
version = "0.5.0"
[dependencies.librespot-oauth]
path = "oauth"
version = "0.5.0"
[dependencies]
data-encoding = "2.5"
env_logger = { version = "0.11.2", default-features = false, features = ["color", "humantime", "auto-color"] }
futures-util = { version = "0.3", default-features = false }
getopts = "0.2"
log = "0.4"
sha1 = "0.10"
sysinfo = { version = "0.31.3", default-features = false, features = ["system"] }
thiserror = "1.0"
tokio = { version = "1.40", features = ["rt", "macros", "signal", "sync", "parking_lot", "process"] }
url = "2.2"
[features]
alsa-backend = ["librespot-playback/alsa-backend"]
portaudio-backend = ["librespot-playback/portaudio-backend"]
pulseaudio-backend = ["librespot-playback/pulseaudio-backend"]
jackaudio-backend = ["librespot-playback/jackaudio-backend"]
rodio-backend = ["librespot-playback/rodio-backend"]
rodiojack-backend = ["librespot-playback/rodiojack-backend"]
sdl-backend = ["librespot-playback/sdl-backend"]
gstreamer-backend = ["librespot-playback/gstreamer-backend"]
with-avahi = ["librespot-discovery/with-avahi"]
with-dns-sd = ["librespot-discovery/with-dns-sd"]
with-libmdns = ["librespot-discovery/with-libmdns"]
passthrough-decoder = ["librespot-playback/passthrough-decoder"]
default = ["rodio-backend", "with-libmdns"]
[package.metadata.deb]
maintainer = "librespot-org"
copyright = "2018 Paul Liétar"
license-file = ["LICENSE", "4"]
depends = "$auto"
extended-description = """\
librespot is an open source client library for Spotify. It enables applications \
to use Spotify's service, without using the official but closed-source \
libspotify. Additionally, it will provide extra features which are not \
available in the official library."""
section = "sound"
priority = "optional"
assets = [
["target/release/librespot", "usr/bin/", "755"],
["contrib/librespot.service", "lib/systemd/system/", "644"],
["contrib/librespot.user.service", "lib/systemd/user/", "644"]
]
[workspace.package]
rust-version = "1.74"