diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index a87b7d6d..90ab3ff2 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -2,170 +2,126 @@ name: Continuous Deployment on: push: + branches: + - master tags: - 'v*.*.*' jobs: - publish: - name: Publishing ${{ matrix.build_target }}-${{ matrix.artifact_type }} - runs-on: ${{ matrix.os }} + build: + name: Building ${{matrix.os}}-${{ matrix.arch }} (${{ matrix.artifact_type }}) + runs-on: ${{ matrix.runs_on }} strategy: matrix: - build_target: [macos, linux, linux-armhf, linux-armv6] + os: [macos, linux] + arch: [x86_64, aarch64, armv7] rust: [stable] artifact_type: ['slim', 'default', 'full'] # The build strategy will build all types for each OS specified include: - - artifact_type: 'slim' # Slim version has no features enabled by default. - feature: '' - - artifact_type: 'default' - feature: 'dbus_mpris' # Default version has all extra features enabled - - artifact_type: 'full' - feature: 'dbus_mpris' # Full version has all extra features and audio backends enabled - - build_target: macos - os: macos-latest - artifact_prefix: macos - target: x86_64-apple-darwin - - build_target: linux - os: ubuntu-latest - artifact_prefix: linux - target: x86_64-unknown-linux-gnu - - build_target: linux-armhf - os: ubuntu-18.04 - artifact_prefix: linux-armhf - target: arm-unknown-linux-gnueabihf - - build_target: linux-armv6 - os: ubuntu-18.04 - artifact_prefix: linux-armv6 - target: arm-unknown-linux-gnueabihf - - build_target: macos + # Runner configuration + - os: macos + arch: x86_64 + runs_on: macos-13 + - os: macos + arch: aarch64 + runs_on: macos-latest + - os: linux + runs_on: ubuntu-latest + # DBus configuration + - artifact_type: slim + dbus: '' + - artifact_type: default + dbus: dbus_mpris + - artifact_type: full + dbus: dbus_mpris + # Cross Compilation Targets + - os: linux + arch: aarch64 + target: aarch64-unknown-linux-gnu + - os: linux + arch: armv7 + target: armv7-unknown-linux-gnueabihf + # Audio backend configuration: Linux + - os: linux artifact_type: slim - audio_backend: portaudio_backend - - build_target: linux - artifact_type: slim - audio_backend: pulseaudio_backend - - build_target: linux-armhf - artifact_type: slim - audio_backend: alsa_backend - - build_target: linux-armv6 - artifact_type: slim - audio_backend: alsa_backend - - build_target: macos - artifact_type: default - audio_backend: portaudio_backend - - build_target: linux - artifact_type: default - audio_backend: pulseaudio_backend - - build_target: linux-armhf + audio_backends: alsa_backend + - os: linux artifact_type: default - audio_backend: alsa_backend - - build_target: linux + audio_backends: alsa_backend,pulseaudio_backend,rodio_backend + - os: linux artifact_type: full - audio_backend: pulseaudio_backend,alsa_backend,rodio_backend - - build_target: macos - artifact_type: full - audio_backend: portaudio_backend,rodio_backend - - build_target: linux-armhf - artifact_type: full - audio_backend: alsa_backend + audio_backends: alsa_backend,pulseaudio_backend,rodio_backend,rodiojack_backend + # Audio backend configuration: macOS + - os: macos + audio_backends: portaudio_backend,rodio_backend exclude: - - build_target: linux-armv6 - artifact_type: 'default' # Raspberry Pi toolchain is too old for dbus/systemd - - build_target: linux-armv6 - artifact_type: 'full' # Raspberry Pi toolchain is too old for dbus/systemd - + - os: macos + artifact_type: 'full' + - os: macos + arch: armv7 steps: - - name: Installing Rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ matrix.rust }} - target: ${{ matrix.target }} - override: true + - name: Checking out sources + uses: actions/checkout@v4 - name: Installing needed macOS dependencies - if: matrix.os == 'macos-latest' - run: brew install awk dbus pkg-config portaudio + if: matrix.os == 'macos' + run: brew install dbus portaudio - name: Installing needed Ubuntu dependencies - if: matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-18.04' + if: startsWith(matrix.runs_on, 'ubuntu') && matrix.target == '' run: | sudo apt-get update - sudo apt-get install -y -qq libasound2-dev libssl-dev libpulse-dev libdbus-1-dev - - name: Installing needed Ubuntu armhf dependencies - if: matrix.os == 'ubuntu-18.04' && matrix.build_target == 'linux-armhf' + # alsa_backend,rodio_backend and base deps + sudo apt-get install -y libasound2-dev libssl-dev libclang-dev clang + # dbus_mpris + sudo apt-get install -y libdbus-1-dev + # pulseaudio_backend + sudo apt-get install -y libpulse-dev + # portaudio_backend + sudo apt-get install -y portaudio19-dev + - name: Determine cargo args run: | - sudo mkdir -p /build/sysroot - echo "deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic main" | sudo tee -a /etc/apt/sources.list - sudo apt-get update - sudo apt-get install -y -qq gcc-arm-linux-gnueabihf libc6-armhf-cross libc6-dev-armhf-cross - sudo apt-get download libasound2:armhf libasound2-dev:armhf libssl-dev:armhf libssl1.1:armhf - sudo dpkg -x libasound2_*.deb /build/sysroot/ - sudo dpkg -x libssl-dev*.deb /build/sysroot/ - sudo dpkg -x libssl1.1*.deb /build/sysroot/ - sudo dpkg -x libasound2-dev*.deb /build/sysroot/ - echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV - echo "TEST=abc" >> $GITHUB_ENV - echo "RUSTFLAGS=-C linker=arm-linux-gnueabihf-gcc -L/usr/arm-linux-gnueabihf/lib -L/build/sysroot/usr/lib/arm-linux-gnueabihf -L/build/sysroot/lib/arm-linux-gnueabihf" >> $GITHUB_ENV - echo "C_INCLUDE_PATH=/build/sysroot/usr/include" >> $GITHUB_ENV - echo "OPENSSL_LIB_DIR=/build/sysroot/usr/lib/arm-linux-gnueabihf" >> $GITHUB_ENV - echo "OPENSSL_INCLUDE_DIR=/build/sysroot/usr/include/arm-linux-gnueabihf" >> $GITHUB_ENV - - name: Installing needed Ubuntu armv6 dependencies - if: matrix.os == 'ubuntu-18.04' && matrix.build_target == 'linux-armv6' - run: | - sudo mkdir -p /build/sysroot - echo "deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic main" | sudo tee -a /etc/apt/sources.list - sudo apt-get update - sudo apt-get install -y -qq git - sudo git -C /build clone --depth=1 https://github.com/raspberrypi/tools.git - sudo apt-get download libasound2:armhf libasound2-dev:armhf libssl-dev:armhf libssl1.1:armhf - sudo dpkg -x libasound2_*.deb /build/sysroot/ - sudo dpkg -x libssl-dev*.deb /build/sysroot/ - sudo dpkg -x libssl1.1*.deb /build/sysroot/ - sudo dpkg -x libasound2-dev*.deb /build/sysroot/ - echo "/build/tools/arm-bcm2708/arm-linux-gnueabihf/bin" >> $GITHUB_PATH - echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV - echo "TEST=abcd" >> $GITHUB_ENV - echo "RUSTFLAGS=-C linker=/build/tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -L/build/tools/arm-bcm2708/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/lib -L/build/tools/arm-bcm2708/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/usr/lib -L/build/sysroot/usr/lib/arm-linux-gnueabihf -L/build/sysroot/lib/arm-linux-gnueabihf" >> $GITHUB_ENV - echo "C_INCLUDE_PATH=/build/sysroot/usr/include" >> $GITHUB_ENV - echo "OPENSSL_LIB_DIR=/build/sysroot/usr/lib/arm-linux-gnueabihf" >> $GITHUB_ENV - echo "OPENSSL_INCLUDE_DIR=/build/sysroot/usr/include/arm-linux-gnueabihf" >> $GITHUB_ENV - - name: Installing needed Ubuntu armhf dependencies (full) - if: matrix.os == 'ubuntu-18.04' && matrix.build_target == 'linux-armhf' && matrix.artifact_type != 'slim' + features="--no-default-features --features ${{ matrix.dbus }},${{ matrix.audio_backends }}" + echo CARGO_ARGS="--locked --release $features" | tee -a "$GITHUB_ENV" + - name: Build (using cargo) + if: matrix.target == '' run: | - # Make dbus-rs cross-compile, see https://github.com/diwic/dbus-rs/issues/184#issuecomment-520228758 - sudo apt-get download libdbus-1-dev:armhf libdbus-1-3:armhf libsystemd0:armhf libgcrypt20:armhf liblzma5:armhf liblz4-1:armhf libgpg-error0:armhf - sudo dpkg -x libdbus-1-3*.deb /build/sysroot/ - sudo dpkg -x libdbus-1-dev*.deb /build/sysroot/ - sudo dpkg -x libsystemd0*.deb /build/sysroot/ - sudo dpkg -x libgcrypt20_*.deb /build/sysroot/ - sudo dpkg -x liblzma5_*.deb /build/sysroot/ - sudo dpkg -x liblz4-1_*.deb /build/sysroot/ - sudo dpkg -x libgpg-error0_*.deb /build/sysroot/ - sudo cp -r /build/sysroot/lib/* /build/sysroot/usr/lib/ - sudo ln -frs /build/sysroot/lib/arm-linux-gnueabihf/libdbus-1.so.3 /build/sysroot/lib/arm-linux-gnueabihf/libdbus-1.so - sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/libgcrypt.so.20 /build/sysroot/lib/arm-linux-gnueabihf/libgcrypt.so - sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/libgpg-error.so.0 /build/sysroot/lib/arm-linux-gnueabihf/libgpg-error.so - sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/liblzma.so.5 /build/sysroot/lib/arm-linux-gnueabihf/liblzma.so - sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/libsystemd.so.0 /build/sysroot/lib/arm-linux-gnueabihf/libsystemd.so - sudo ln -rs /build/sysroot/usr/lib/arm-linux-gnueabihf/liblz4.so.1 /build/sysroot/usr/lib/arm-linux-gnueabihf/liblz4.so - sudo mkdir -p /.cargo - echo -e '[target.arm-unknown-linux-gnueabihf.dbus]\nrustc-link-lib = ["dbus-1", "gcrypt", "gpg-error", "lz4", "lzma", "systemd"]' | sudo tee -a /.cargo/config - - name: Checking out sources - uses: actions/checkout@v1 - - name: Running cargo build - uses: actions-rs/cargo@v1 + cargo +${{ matrix.rust }} build $CARGO_ARGS + - name: Build (using cross) + if: matrix.target != '' + uses: houseabsolute/actions-rust-cross@v1 with: + cross-version: 49338b1 # currently needed (check again if cross version > 0.2.5) command: build toolchain: ${{ matrix.rust }} - args: --locked --release --target ${{ matrix.target }} --no-default-features --features "${{ matrix.feature }},${{ matrix.audio_backend }}" + target: ${{ matrix.target }} + args: $CARGO_ARGS + - name: Uploading artifacts + uses: actions/upload-artifact@v4 + with: + name: spotifyd-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.artifact_type }} + path: target/${{ matrix.target }}/release/spotifyd + release: # only runs when a version tag is pushed + if: startsWith(github.ref, 'refs/tags/v') + needs: build + runs-on: ubuntu-latest + steps: + - name: Downloading artifacts # download all binaries + uses: actions/download-artifact@v4 - name: Packaging final binary shell: bash run: | - cd target/${{ matrix.target }}/release - tar czvf spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.tar.gz spotifyd - shasum -a 512 spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.tar.gz > spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.sha512 + for artifact_dir in ./*/ + do + pushd $artifact_dir + artifact_name=$(basename $artifact_dir) + tar czvf $artifact_name.tar.gz spotifyd + shasum -a 512 $artifact_name.tar.gz > $artifact_name.sha512 + popd + done - name: Releasing assets uses: softprops/action-gh-release@v1 with: files: | - target/${{ matrix.target }}/release/spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.tar.gz - target/${{ matrix.target }}/release/spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.sha512 + **/*.tar.gz + **/*.sha512 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa1b0108..e0560b27 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - rust: [stable, 1.81] + rust: [stable, 1.82] os: [macos-latest, ubuntu-latest] include: - os: macos-latest diff --git a/CHANGELOG.md b/CHANGELOG.md index 17d887d6..992b6ee6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,18 +6,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Breaking +- username and password authentaction have been removed and are replaced by OAuth ([#1321]) + Look at the [docs](https://docs.spotifyd.rs) for setup instructions. + ### Added - retry enabling discovery several times before exiting ([#1228]) +- development artifacts are now available ([#1332]) +- prebuilt binaries are available for `aarch64` (both Linux and macOS) ([#1332]) +- Windows and Android are now supported ([#1219], [#1314]) +- expose pipe and subprocess backends ([#1284]) +- new device type options are available ([#1316]) +- OAuth login is now supported ([#1321]) +- a warning is emitted on unsupported configuration values ([#1327]) ### Changed +- the docs have been overhauled to reflect the current state of the project and simplify onboarding ([#1327]) +- `librespot` dependency has been updated to 0.6 ([#1317]) - Credential caching has been re-enabled. ([#1214]) ### Fixed - alsa mixer: volume calculation has been fixed ([#1229]) +### Removed +- `armv6` binaries are no longer available by default ([#1332]) + If you still need them, please join our matrix channel (https://matrix.to/#/#spotifyd:matrix.org) and tell us! + [#1214]: https://github.com/Spotifyd/spotifyd/pull/1214 [#1229]: https://github.com/Spotifyd/spotifyd/pull/1229 [#1228]: https://github.com/Spotifyd/spotifyd/pull/1228 +[#1284]: https://github.com/Spotifyd/spotifyd/pull/1284 +[#1219]: https://github.com/Spotifyd/spotifyd/pull/1219 +[#1314]: https://github.com/Spotifyd/spotifyd/pull/1314 +[#1316]: https://github.com/Spotifyd/spotifyd/pull/1316 +[#1317]: https://github.com/Spotifyd/spotifyd/pull/1317 +[#1321]: https://github.com/Spotifyd/spotifyd/pull/1321 +[#1327]: https://github.com/Spotifyd/spotifyd/pull/1327 +[#1332]: https://github.com/Spotifyd/spotifyd/pull/1332 ## [0.3.5] diff --git a/Cargo.lock b/Cargo.lock index b58a005e..26f95b85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -44,7 +44,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.6.0", + "bitflags 2.9.0", "cfg-if", "libc", ] @@ -115,19 +115,20 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "arrayvec" @@ -137,13 +138,13 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -158,29 +159,45 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "aws-lc-fips-sys" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29003a681b2b9465c1139bfb726da452a841a8b025f35953f3bce71139f10b21" +dependencies = [ + "bindgen 0.69.5", + "cc", + "cmake", + "dunce", + "fs_extra", + "paste", + "regex", +] + [[package]] name = "aws-lc-rs" -version = "1.12.0" +version = "1.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f409eb70b561706bf8abba8ca9c112729c481595893fd06a2dd9af8ed8441148" +checksum = "5e4e8200b9a4a5801a769d50eeabc05670fec7e959a8cb7a63a93e4e519942ae" dependencies = [ + "aws-lc-fips-sys", "aws-lc-sys", "paste", + "untrusted 0.7.1", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.24.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8478a5c29ead3f3be14aff8a202ad965cf7da6856860041bfca271becf8ba48b" +checksum = "0f9dd2e03ee80ca2822dd6ea431163d2ef259f2066a4d6ccaca6d9dcb386aa43" dependencies = [ "bindgen 0.69.5", "cc", "cmake", "dunce", "fs_extra", - "libc", "paste", ] @@ -229,7 +246,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -242,7 +259,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.93", + "syn", "which", ] @@ -252,7 +269,7 @@ version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -261,7 +278,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.93", + "syn", ] [[package]] @@ -272,9 +289,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "block-buffer" @@ -287,15 +304,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" [[package]] name = "byteorder" @@ -305,15 +322,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.6" +version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "jobserver", "libc", @@ -343,9 +360,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -353,7 +370,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -379,9 +396,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.23" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" +checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", "clap_derive", @@ -389,9 +406,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.23" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" +checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", @@ -401,14 +418,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -419,9 +436,9 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.52" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] @@ -459,6 +476,16 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + [[package]] name = "combine" version = "4.6.7" @@ -547,9 +574,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -603,7 +630,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.93", + "syn", ] [[package]] @@ -614,7 +641,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -625,9 +652,9 @@ checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "dbus" @@ -700,7 +727,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -710,7 +737,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.93", + "syn", ] [[package]] @@ -727,23 +754,23 @@ dependencies = [ [[package]] name = "directories" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -754,7 +781,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -765,9 +792,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encoding_rs" @@ -803,9 +830,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -817,15 +844,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", -] - [[package]] name = "eyre" version = "0.6.12" @@ -848,6 +866,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4316185f709b23713e41e3195f90edef7fb00c3ed4adc79769cf09cc762a3b29" dependencies = [ + "colored", "log", "syslog", ] @@ -935,7 +954,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -986,11 +1005,11 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.5.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc3655aa6818d65bc620d6911f05aa7b6aeb596291e1e9f79e52df85583d1e30" +checksum = "4fd4b8790c0792e3b11895efdf5f289ebe8b59107a6624f1cce68f24ff8c7035" dependencies = [ - "rustix", + "rustix 0.38.44", "windows-targets 0.52.6", ] @@ -1003,10 +1022,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + [[package]] name = "gimli" version = "0.28.1" @@ -1032,7 +1063,7 @@ dependencies = [ "nonzero_ext", "parking_lot", "portable-atomic", - "rand", + "rand 0.8.5", "smallvec", "spinning_top", ] @@ -1058,9 +1089,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" dependencies = [ "atomic-waker", "bytes", @@ -1135,17 +1166,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - [[package]] name = "hostname" version = "0.4.0" @@ -1215,9 +1235,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -1257,14 +1277,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.7", + "h2 0.4.8", "http 1.2.0", "http-body 1.0.1", "httparse", @@ -1286,7 +1306,7 @@ dependencies = [ "futures-util", "headers", "http 1.2.0", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-rustls 0.26.0", "hyper-util", "pin-project-lite", @@ -1319,7 +1339,7 @@ checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ "futures-util", "http 1.2.0", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "log", "rustls 0.22.4", @@ -1338,14 +1358,14 @@ checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http 1.2.0", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "log", - "rustls 0.23.20", + "rustls 0.23.23", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls 0.26.2", "tower-service", ] @@ -1360,7 +1380,7 @@ dependencies = [ "futures-util", "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.2", + "hyper 1.6.0", "pin-project-lite", "socket2", "tokio", @@ -1506,7 +1526,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -1554,9 +1574,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", @@ -1564,18 +1584,18 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" @@ -1603,9 +1623,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jack" @@ -1667,9 +1687,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -1692,9 +1712,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libdbus-sys" @@ -1739,11 +1759,11 @@ checksum = "48854699e11b111433431b69cee2365fcab0b29b06993f48c257dfbaf6395862" dependencies = [ "byteorder", "futures-util", - "hostname 0.4.0", + "hostname", "if-addrs", "log", "multimap", - "rand", + "rand 0.8.5", "socket2", "thiserror 1.0.69", "tokio", @@ -1751,23 +1771,23 @@ dependencies = [ [[package]] name = "libpulse-binding" -version = "2.28.2" +version = "2.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1040a6c4c4d1e9e852000f6202df1a02a4f074320de336ab21e4fd317b538" +checksum = "441092fb2d05962d74246a00c1b2f8c87c60fb6b38a5cc42227c229a702c0ce5" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.0", "libc", "libpulse-sys", - "num-derive 0.3.3", + "num-derive", "num-traits", "winapi", ] [[package]] name = "libpulse-simple-binding" -version = "2.28.1" +version = "2.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05fd6b68f33f6a251265e6ed1212dc3107caad7c5c6fdcd847b2e65ef58c308d" +checksum = "b7bebef0381c8e3e4b23cc24aaf36fab37472bece128de96f6a111efa464cfef" dependencies = [ "libpulse-binding", "libpulse-simple-sys", @@ -1776,9 +1796,9 @@ dependencies = [ [[package]] name = "libpulse-simple-sys" -version = "1.21.1" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6613b4199d8b9f0edcfb623e020cb17bbd0bee8dd21f3c7cc938de561c4152" +checksum = "3bd96888fe37ad270d16abf5e82cccca1424871cf6afa2861824d2a52758eebc" dependencies = [ "libpulse-sys", "pkg-config", @@ -1786,12 +1806,12 @@ dependencies = [ [[package]] name = "libpulse-sys" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc19e110fbf42c17260d30f6d3dc545f58491c7830d38ecb9aaca96e26067a9b" +checksum = "b8febf45075a6ac7e36d0c7aa62536217f476f24456854cdad296952852b5cd2" dependencies = [ "libc", - "num-derive 0.3.3", + "num-derive", "num-traits", "pkg-config", "winapi", @@ -1803,7 +1823,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "libc", ] @@ -1818,7 +1838,7 @@ dependencies = [ "ctr", "futures-util", "http-body-util", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "librespot-core", "log", @@ -1841,7 +1861,7 @@ dependencies = [ "librespot-protocol", "log", "protobuf", - "rand", + "rand 0.8.5", "serde", "serde_json", "thiserror 1.0.69", @@ -1868,7 +1888,7 @@ dependencies = [ "http 1.2.0", "http-body-util", "httparse", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-proxy2", "hyper-rustls 0.27.5", "hyper-util", @@ -1877,7 +1897,7 @@ dependencies = [ "log", "nonzero_ext", "num-bigint", - "num-derive 0.4.2", + "num-derive", "num-integer", "num-traits", "once_cell", @@ -1887,7 +1907,7 @@ dependencies = [ "priority-queue", "protobuf", "quick-xml", - "rand", + "rand 0.8.5", "rsa", "serde", "serde_json", @@ -1920,12 +1940,12 @@ dependencies = [ "futures-util", "hmac", "http-body-util", - "hyper 1.5.2", + "hyper 1.6.0", "hyper-util", "libmdns", "librespot-core", "log", - "rand", + "rand 0.8.5", "serde_json", "serde_repr", "sha1", @@ -1980,14 +2000,14 @@ dependencies = [ "log", "parking_lot", "portaudio-rs", - "rand", + "rand 0.8.5", "rand_distr", "rodio", "shell-words", "symphonia", "thiserror 1.0.69", "tokio", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -2002,15 +2022,21 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" [[package]] name = "litemap" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -2024,9 +2050,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "mach2" @@ -2037,12 +2063,6 @@ dependencies = [ "libc", ] -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "memchr" version = "2.7.4" @@ -2077,7 +2097,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -2096,7 +2116,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "jni-sys", "log", "ndk-sys", @@ -2158,7 +2178,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -2173,7 +2193,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "smallvec", "zeroize", ] @@ -2184,17 +2204,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "num-derive" version = "0.4.2" @@ -2203,7 +2212,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -2254,7 +2263,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -2274,9 +2283,9 @@ checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f" dependencies = [ "base64 0.13.1", "chrono", - "getrandom", + "getrandom 0.2.15", "http 0.2.12", - "rand", + "rand 0.8.5", "reqwest", "serde", "serde_json", @@ -2304,7 +2313,7 @@ dependencies = [ "jni", "ndk", "ndk-context", - "num-derive 0.4.2", + "num-derive", "num-traits", "oboe-sys", ] @@ -2320,15 +2329,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "option-ext" @@ -2411,9 +2420,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -2444,9 +2453,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "pledge" @@ -2459,9 +2468,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "portaudio-rs" @@ -2496,24 +2505,24 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] name = "prettyplease" -version = "0.2.25" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" dependencies = [ "proc-macro2", - "syn 2.0.93", + "syn", ] [[package]] name = "priority-queue" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714c75db297bc88a63783ffc6ab9f830698a6705aa0201416931759ef4c8183d" +checksum = "63023f69f97c4bc2936c0440f8a2827af36058523cbdacceeff9afb4a680bf24" dependencies = [ "autocfg", "equivalent", @@ -2522,18 +2531,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -2601,9 +2610,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" dependencies = [ "proc-macro2", ] @@ -2615,8 +2624,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "zerocopy 0.8.23", ] [[package]] @@ -2626,7 +2646,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -2635,7 +2665,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.1", ] [[package]] @@ -2645,27 +2684,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", ] [[package]] name = "redox_users" -version = "0.4.6" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", - "thiserror 1.0.69", + "thiserror 2.0.12", ] [[package]] @@ -2740,16 +2779,15 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", - "spin", - "untrusted", + "untrusted 0.9.0", "windows-sys 0.52.0", ] @@ -2776,7 +2814,7 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core", + "rand_core 0.6.4", "signature", "spki", "subtle", @@ -2797,14 +2835,27 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.42" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dade4812df5c384711475be5fcd8c162555352945401aed22a35bffeab61f657" +dependencies = [ + "bitflags 2.9.0", + "errno", + "libc", + "linux-raw-sys 0.9.2", "windows-sys 0.59.0", ] @@ -2836,9 +2887,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.20" +version = "0.23.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "aws-lc-rs", "log", @@ -2871,7 +2922,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.1.0", + "security-framework 3.2.0", ] [[package]] @@ -2894,9 +2945,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" @@ -2905,7 +2956,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", - "untrusted", + "untrusted 0.9.0", ] [[package]] @@ -2917,20 +2968,20 @@ dependencies = [ "aws-lc-rs", "ring", "rustls-pki-types", - "untrusted", + "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "same-file" @@ -2963,7 +3014,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", - "untrusted", + "untrusted 0.9.0", ] [[package]] @@ -2972,7 +3023,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -2981,11 +3032,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d3f8c9bfcc3cbb6b0179eb57042d75b1582bdc65c3cb95f3fa999509c03cbc" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.9.0", "core-foundation 0.10.0", "core-foundation-sys", "libc", @@ -2994,9 +3045,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -3004,38 +3055,38 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] name = "serde_ignored" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf" +checksum = "566da67d80e92e009728b3731ff0e5360cb181432b8ca73ea30bb1d170700d76" dependencies = [ "serde", ] [[package]] name = "serde_json" -version = "1.0.134" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -3045,9 +3096,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" dependencies = [ "itoa", "serde", @@ -3055,13 +3106,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -3164,7 +3215,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -3178,9 +3229,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "socket2" @@ -3222,6 +3273,7 @@ name = "spotifyd" version = "0.3.5" dependencies = [ "alsa", + "aws-lc-rs", "chrono", "clap", "color-eyre", @@ -3250,7 +3302,7 @@ dependencies = [ "serde_ignored", "sha-1", "syslog", - "thiserror 2.0.9", + "thiserror 2.0.12", "time", "tokio", "tokio-stream", @@ -3363,20 +3415,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.109" +version = "2.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" +checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" dependencies = [ "proc-macro2", "quote", @@ -3397,7 +3438,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -3415,12 +3456,11 @@ dependencies = [ [[package]] name = "syslog" -version = "6.1.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc7e95b5b795122fafe6519e27629b5ab4232c73ebb2428f568e82b1a457ad3" +checksum = "019f1500a13379b7d051455df397c75770de6311a7a188a699499502704d9f10" dependencies = [ - "error-chain", - "hostname 0.3.1", + "hostname", "libc", "log", "time", @@ -3449,14 +3489,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.14.0" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" dependencies = [ "cfg-if", "fastrand", + "getrandom 0.3.1", "once_cell", - "rustix", + "rustix 1.0.1", "windows-sys 0.59.0", ] @@ -3471,11 +3512,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.9" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.9", + "thiserror-impl 2.0.12", ] [[package]] @@ -3486,18 +3527,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] name = "thiserror-impl" -version = "2.0.9" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -3522,9 +3563,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" dependencies = [ "deranged", "itoa", @@ -3539,15 +3580,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" dependencies = [ "num-conv", "time-core", @@ -3565,9 +3606,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.42.0" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" dependencies = [ "backtrace", "bytes", @@ -3583,13 +3624,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -3615,11 +3656,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.20", + "rustls 0.23.23", "tokio", ] @@ -3642,11 +3683,11 @@ checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", - "rustls 0.23.20", + "rustls 0.23.23", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls 0.26.2", "tungstenite", ] @@ -3665,9 +3706,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -3686,9 +3727,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "serde", @@ -3762,8 +3803,8 @@ dependencies = [ "http 1.2.0", "httparse", "log", - "rand", - "rustls 0.23.20", + "rand 0.8.5", + "rustls 0.23.23", "rustls-pki-types", "sha1", "thiserror 1.0.69", @@ -3772,15 +3813,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "untrusted" @@ -3826,25 +3873,25 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" dependencies = [ - "getrandom", - "rand", + "getrandom 0.3.1", + "rand 0.9.0", ] [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vergen" -version = "9.0.2" +version = "9.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f25fc8f8f05df455c7941e87f093ad22522a9ff33d7a027774815acf6f0639" +checksum = "e0d2f179f8075b805a43a2a21728a46f0cc2921b3c58695b28fa8817e103cd9a" dependencies = [ "anyhow", "derive_builder", @@ -3855,9 +3902,9 @@ dependencies = [ [[package]] name = "vergen-gitcl" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0227006d09f98ab00ea69e9a5e055e676a813cfbed4232986176c86a6080b997" +checksum = "b2f89d70a58a4506a6079cedf575c64cf51649ccbb4e02a63dac539b264b7711" dependencies = [ "anyhow", "derive_builder", @@ -3869,9 +3916,9 @@ dependencies = [ [[package]] name = "vergen-lib" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0c767e6751c09fc85cde58722cf2f1007e80e4c8d5a4321fc90d83dc54ca147" +checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" dependencies = [ "anyhow", "derive_builder", @@ -3909,6 +3956,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasite" version = "0.1.0" @@ -3917,34 +3973,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.93", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -3955,9 +4012,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3965,28 +4022,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -3999,7 +4059,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ "ring", - "untrusted", + "untrusted 0.9.0", ] [[package]] @@ -4017,7 +4077,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix", + "rustix 0.38.44", ] [[package]] @@ -4131,7 +4191,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] [[package]] @@ -4142,9 +4202,15 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] +[[package]] +name = "windows-link" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" + [[package]] name = "windows-result" version = "0.1.2" @@ -4370,9 +4436,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] @@ -4387,6 +4453,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.9.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -4419,7 +4494,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", "synstructure", ] @@ -4430,7 +4505,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +dependencies = [ + "zerocopy-derive 0.8.23", ] [[package]] @@ -4441,27 +4525,38 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", "synstructure", ] @@ -4490,5 +4585,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.93", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index 53c60c7e..765cbae8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ description = "A Spotify daemon" repository = "https://github.com/Spotifyd/spotifyd" license = "GPL-3.0-only" version = "0.3.5" -rust-version = "1.81" +rust-version = "1.82" [dependencies] alsa = { version = "0.9.1", optional = true } @@ -14,9 +14,9 @@ chrono = "0.4" dbus = { version = "0.9", optional = true } dbus-tokio = { version = "0.7.3", optional = true } dbus-crossroads = { version = "0.5.0", optional = true } -fern = { version = "0.7.0", features = ["syslog-6"] } +fern = { version = "0.7.0", features = ["syslog-7", "colored"] } futures = "0.3.15" -gethostname = "0.5.0" +gethostname = "1.0.0" hex = "0.4" libc = "0.2.82" log = "0.4.6" @@ -35,7 +35,7 @@ librespot-protocol = "0.6" librespot-oauth = "0.6" toml = "0.8.19" color-eyre = "0.6" -directories = "5.0.1" +directories = "6.0.0" thiserror = "2.0" time = { version = "0.3.37", default-features = false, features = ["formatting"] } clap = { version = "4.5.23", features = ["derive"] } @@ -43,7 +43,7 @@ serde_ignored = "0.1.10" [target."cfg(unix)".dependencies] daemonize = "0.5" -syslog = "6" +syslog = "7" [target."cfg(target_os = \"macos\")".dependencies] whoami = "1" @@ -51,14 +51,16 @@ whoami = "1" [target."cfg(target_os = \"openbsd\")".dependencies] pledge = "0.4.2" +[target.armv7-unknown-linux-gnueabihf.dependencies] +aws-lc-rs = { version = "*", features = ["bindgen"] } + [dev-dependencies] env_logger = "0.11" [features] -alsa_backend = ["librespot-playback/alsa-backend", "alsa"] -dbus_mpris = ["dbus", "dbus-tokio", "dbus-crossroads"] -pipe_backend = [] -default = ["alsa_backend", "pipe_backend"] +alsa_backend = ["librespot-playback/alsa-backend", "dep:alsa"] +dbus_mpris = ["dep:dbus", "dep:dbus-tokio", "dep:dbus-crossroads"] +default = ["rodio_backend"] portaudio_backend = ["librespot-playback/portaudio-backend"] pulseaudio_backend = ["librespot-playback/pulseaudio-backend"] rodio_backend = ["librespot-playback/rodio-backend"] diff --git a/Cross.toml b/Cross.toml new file mode 100644 index 00000000..5e45396d --- /dev/null +++ b/Cross.toml @@ -0,0 +1,16 @@ +[build] +pre-build = [ + "dpkg --add-architecture $CROSS_DEB_ARCH", + "apt-get update", + # alsa_backend,rodio_backend and base requirements + "apt-get install -y libasound2-dev:$CROSS_DEB_ARCH libssl-dev:$CROSS_DEB_ARCH libclang-10-dev clang-10", + # dbus_mpris + "apt-get install -y libdbus-1-dev:$CROSS_DEB_ARCH", + # pulseaudio_backend + "apt-get install -y libpulse-dev:$CROSS_DEB_ARCH", + # portaudio_backend + "apt-get install -y portaudio19-dev:$CROSS_DEB_ARCH", +] + +[target.armv7-unknown-linux-gnueabihf] +image = ":edge" # needed, since dbus and pulse dependencies on older ubuntu versions are messy diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index 04313c8b..3fd9238f 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -4,9 +4,8 @@ - [Installation](./installation/README.md) - [Running as a service](./installation/service.md) - - [Installing on RaspberryPi OS 64-bit](./installation/raspberrypi64.md) - [Building from source](./installation/source.md) - - [Cross-Compile using Docker](./installation/cross-compile-using-docker.md) + - [Cross-Compilation](./installation/cross-compilation.md) - [Configuration](./configuration/README.md) - [Authentication](./configuration/auth.md) - [Audio](./configuration/audio.md) diff --git a/docs/src/installation/README.md b/docs/src/installation/README.md index 4d374dce..89ec672b 100644 --- a/docs/src/installation/README.md +++ b/docs/src/installation/README.md @@ -1,7 +1,7 @@ # Installation Getting `spotifyd` on your system should be as easy as downloading a binary in most cases. -If you'd like to learn how to compile `spotifyd` yourself, head over to [building from source](./source.md). And if you're running a 64-bit RaspbianOS system, have a look [here](./raspbian64.md). +If you'd like to learn how to compile `spotifyd` yourself, head over to [building from source](./source.md). ## Linux @@ -36,7 +36,7 @@ and the platform architecture that they were built for. You can find the latest **Feature Sets:** - `full`: **all audio backends** and **MPRIS** support -- `default`: **one audio backend** (depending on your platform: PulseAudio, PortAudio, ALSA) and **MPRIS** support +- `default`: **some audio backends** (depending on your platform: PulseAudio, PortAudio, ALSA) and **MPRIS** support - `slim`: **one audio backend** (depending on your platform) and **no MPRIS** support (good for headless systems) If you're unsure which version to choose, just go for `default` on desktop systems and `slim` on headless systems. @@ -45,10 +45,10 @@ If you're unsure which version to choose, just go for `default` on desktop syste If you're on Linux, check your platform architecture with `uname -m`: -- `x86_64`: Download one of the `spotifyd-linux-{full,default,slim}.tar.gz` packages. -- `armhf`, `armv7`: Download one of the `spotifyd-linux-armhf-{full,default,slim}.tar.gz` packages. -- `armv6`: Download the `spotifyd-linux-armv6-slim.tar.gz` package. -- `aarch64`: Head over to the [RaspberryPi OS 64-bit installation guide](./raspberrypi64.md). +- `x86_64`: Download one of the `spotifyd-linux-x86_64-{full,default,slim}.tar.gz` packages. +- `armhf`, `armv7`: Download one of the `spotifyd-linux-armv7-{full,default,slim}.tar.gz` packages. +- `aarch64`: Download one of the `spotifyd-linux-aarch64-{full,default,slim}.tar.gz` +- `armv6`: Unfortunately, we no longer support this architecture. If you still need this to work, please open an issue or join the [community matrix channel](https://matrix.to/#/#spotifyd:matrix.org) and we'll try to find a solution. If you're on macOS, download one of the `spotifyd-macos-{full,default,slim}.tar.gz` packages. diff --git a/docs/src/installation/cross-compilation.md b/docs/src/installation/cross-compilation.md new file mode 100644 index 00000000..1ea8f975 --- /dev/null +++ b/docs/src/installation/cross-compilation.md @@ -0,0 +1,68 @@ +# Cross-Compilation + +If you want to run `spotifyd` on lower-power hardware such as a RaspberryPi, but none of our prebuilt binaries suit your needs, you might want to cross-compile `spotifyd` on a more powerful machine and deploy the binary on the target system. + +## Using `cross` + +The easiest way to cross-compile is using the amazing [`cross` project](https://github.com/cross-rs/cross). This way, the build environment comes already pre-configured. +Follow the instructions in their README to install `cross`. + +
+ +In the current latest release of cross (v0.2.5), some targets are too outdated and compilation will fail. Thus, it is currently recommended to install the latest version of `cross` from their git repo instead of a prebuilt binary. + +
+ +Then, you should be able to run `cross build --target `, where target is one of the targets in `rustc --print target-list`. Please also refer to [the general from source guide](./source.md) for additional flags that you might want to append to that command. + +If this was successful, copy the resulting binary from `target//{release,debug}/spotifyd` to the `spotifyd` machine and try running it there. + +If `cross` doesn't support your target, you can try the alternative approach using Docker and QEMU below. + +If compilation of your target isn't working even though `cross` supports it, feel free to open an issue on our GitHub or join the [community matrix channel](https://matrix.to/#/#spotifyd:matrix.org) and ask there. + +## Using Docker and QEMU + +We can also use `docker` to cross compile on every platform and OS that runs `docker` and `qemu`: + +1. Setup a docker [custom builder](https://docs.docker.com/build/building/multi-platform/#create-a-custom-builder) + + ```shell + docker buildx create \ + --name container-builder \ + --driver docker-container \ + --use --bootstrap + ``` + + If you are **not** using Docker-Desktop you might have to install [QEMU](https://docs.docker.com/build/building/multi-platform/#install-qemu-manually) + +2. Create a docker `docker-compose.yml` + + Here we are building a `arm64` binary, so we set `platform: linux/arm64` + + ```yaml + services: + build-container: + image: rust:1-bookworm + platform: linux/arm64 + command: bash -c " + apt-get update && + apt-get install -y \ + libasound2-dev \ + libssl-dev \ + jq \ + pkg-config && + wget -O - https://api.github.com/repos/Spotifyd/spotifyd/tarball/$(\ + curl -SsL https://api.github.com/repos/Spotifyd/spotifyd/releases/latest \ + | jq '.tag_name' -r) \ + | tar xzv -C /spotifyd --strip-components=1 && + cargo build --release && + cp /spotifyd/target/release/spotifyd /build/" + working_dir: /spotifyd + volumes: + - ./:/build + ``` + +3. Run `docker compose up` + + This will copy the build `spotifyd` binary in the current directory. diff --git a/docs/src/installation/cross-compile-using-docker.md b/docs/src/installation/cross-compile-using-docker.md deleted file mode 100644 index 53d480f8..00000000 --- a/docs/src/installation/cross-compile-using-docker.md +++ /dev/null @@ -1,45 +0,0 @@ -# Cross Compilation using Docker - -We can also use `docker` to cross compile on every platform and OS that runs `docker` and `qemu`: - -1. Setup a docker [custom builder](https://docs.docker.com/build/building/multi-platform/#create-a-custom-builder) - - ```shell - docker buildx create \ - --name container-builder \ - --driver docker-container \ - --use --bootstrap - ``` - - If you are **not** using Docker-Desktop you might have to install [QEMU](https://docs.docker.com/build/building/multi-platform/#install-qemu-manually) - -2. Create a docker `docker-compose.yml` - - Here we are building a `arm64` binary, so we set `platform: linux/arm64` - - ```yaml - services: - build-container: - image: rust:1-bookworm - platform: linux/arm64 - command: bash -c " - apt-get update && - apt-get install -y \ - libasound2-dev \ - libssl-dev \ - jq \ - pkg-config && - wget -O - https://api.github.com/repos/Spotifyd/spotifyd/tarball/$(\ - curl -SsL https://api.github.com/repos/Spotifyd/spotifyd/releases/latest \ - | jq '.tag_name' -r) \ - | tar xzv -C /spotifyd --strip-components=1 && - cargo build --release && - cp /spotifyd/target/release/spotifyd /build/" - working_dir: /spotifyd - volumes: - - ./:/build - ``` - -3. Run `docker compose up` - - This will copy the build `spotifyd` binary in the current directory. diff --git a/docs/src/installation/raspberrypi64.md b/docs/src/installation/raspberrypi64.md deleted file mode 100644 index e30deca4..00000000 --- a/docs/src/installation/raspberrypi64.md +++ /dev/null @@ -1,30 +0,0 @@ -# Installation on RaspberryPi OS 64-bit - -Unfortunately, we do not yet provide 64-bit binaries for ARM. -Trying to run them will result in `cannot execute: required file not found`. - -To run spotifyd on a 64-bit Raspberry Pi OS, you have two possiblities. Build the 64-bit binary by yourself or add the 32-bit architecture as an additional architecture to your 64-bit Raspberry Pi OS. - -## Option 1: Building yourself - -To build `spotifyd` yourself, head over to [Building from source](./source.md). Note, however, that building can take a long time, especially on low-power devices like a RaspberryPi. - -## Option 2: Add the 32-bit architecture - -### Adding architecture and dependency packages - -These commands add the architecture and install the required packages for the architecure: - -```bash -dpkg --add-architecture armhf -sudo apt update -sudo apt install libasound2-plugins:armhf -``` - -Now you can go on with the [regular install guide](./), by assuming the `armhf` architecture. - -Downloading other variants than thin like full or default may require further armhf packages to be installed with the command like above: - -```console -sudo apt install packagename:armhf -``` diff --git a/docs/src/installation/source.md b/docs/src/installation/source.md index a29ce955..a3bf09a3 100644 --- a/docs/src/installation/source.md +++ b/docs/src/installation/source.md @@ -1,5 +1,7 @@ # Building from source +The guide below assumes that you're building `spotifyd` on the system that you want to run it on. If you'd instead prefer to cross-compile, head over to [this section](./cross-compilation.md). + You can also compile `spotifyd` yourself, allowing you to tailor it perfectly to your needs or get the latest fixes. `spotifyd` is written in Rust. You can download the toolchain (compiler and package manager) over at [rustup.rs](https://rustup.rs). Follow their instructions to get started. > __Note:__ Please make sure that you compile the package using the most recent `stable` version of Rust available through `rustup`. Some distro versions are quite outdated and might result in compilation errors. diff --git a/src/config.rs b/src/config.rs index 78f99e6e..263bfee7 100644 --- a/src/config.rs +++ b/src/config.rs @@ -207,7 +207,7 @@ where toml::Value::String(num) => { return u8::from_str(&num) .map(Some) - .inspect(|_| warn!("Configuration Warning: `initial_volume` should be a number rather than a string, this will become a hard error in the future")) + .inspect(|_| warn!("`initial_volume` should be a number rather than a string, this will become a hard error in the future")) .map_err(de::Error::custom) } toml::Value::Float(f) => Unexpected::Float(f), @@ -420,18 +420,44 @@ impl FileConfig { } } -fn get_missing_feature(path: &serde_ignored::Path<'_>) -> Option<&'static str> { - const DISABLED_CONFIGS: &[(&str, &[&str])] = &[ +#[derive(Copy, Clone)] +enum KnownConfigProblem { + #[cfg_attr( + all(feature = "alsa_backend", feature = "dbus_mpris"), + expect(dead_code) + )] + MissingFeature(&'static str), + UsernamePassword, +} + +fn get_known_config_problem(path: &serde_ignored::Path<'_>) -> Option { + const DISABLED_CONFIGS: &[(KnownConfigProblem, &[&str])] = &[ #[cfg(not(feature = "alsa_backend"))] - ("alsa_backend", &["control", "mixer"]), + ( + KnownConfigProblem::MissingFeature("alsa_backend"), + &["control", "mixer"], + ), #[cfg(not(feature = "dbus_mpris"))] - ("dbus_mpris", &["use_mpris", "dbus_type"]), + ( + KnownConfigProblem::MissingFeature("dbus_mpris"), + &["use_mpris", "dbus_type"], + ), + ( + KnownConfigProblem::UsernamePassword, + &[ + "username", + "password", + "username_cmd", + "password_cmd", + "use_keyring", + ], + ), ]; if let serde_ignored::Path::Map { key, .. } = path { - for (feature, params) in DISABLED_CONFIGS { + for (problem, params) in DISABLED_CONFIGS { if params.contains(&key.as_str()) { - return Some(*feature); + return Some(*problem); } } } @@ -459,10 +485,17 @@ impl CliConfig { let toml_de = toml::Deserializer::new(&content); let config_content: FileConfig = serde_ignored::deserialize(toml_de, |path| { - if let Some(feature) = get_missing_feature(&path) { - warn!("Warning: The config key '{path}' is ignored, because the feature '{feature}' is missing in this build"); + if let Some(problem) = get_known_config_problem(&path) { + match problem { + KnownConfigProblem::MissingFeature(feature) => { + warn!("The config key '{path}' is ignored, because the feature '{feature}' is missing in this build"); + } + KnownConfigProblem::UsernamePassword => { + warn!("The config key '{path}' is ignored, because authentication with username and password is no longer supported by Spotify. Please use `spotifyd authenticate` instead"); + } + } } else { - warn!("Warning: Unknown key '{path}' in config will be ignored"); + warn!("Unknown key '{path}' in config will be ignored"); } })?; @@ -795,7 +828,10 @@ mod tests { let toml_de = toml::Deserializer::new(&uncommented_example_config); let config: FileConfig = serde_ignored::deserialize(toml_de, |path| { - if get_missing_feature(&path).is_none() { + if !matches!( + get_known_config_problem(&path), + Some(KnownConfigProblem::MissingFeature(_)) + ) { panic!("Unknown configuration key in example config: {}", path); } }) diff --git a/src/main.rs b/src/main.rs index f041ab91..8525b74e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ use color_eyre::eyre::{self, Context}; use config::ExecutionMode; #[cfg(unix)] use daemonize::Daemonize; +use fern::colors::ColoredLevelConfig; #[cfg(unix)] use log::error; use log::{info, trace, LevelFilter}; @@ -40,23 +41,32 @@ fn setup_logger(log_target: LogTarget, verbose: u8) -> eyre::Result<()> { 1 => LevelFilter::Debug, 2.. => LevelFilter::Trace, }; + let mut logger = fern::Dispatch::new().level(log_level); - logger = if verbose > 0 { - logger.format(|out, message, record| { - out.finish(format_args!( - "[{} {}] {}", - record.level(), - record.target(), - message - )) - }) - } else { - logger.level_for("symphonia_format_ogg::demuxer", LevelFilter::Warn) - }; + if verbose == 0 { + logger = logger.level_for("symphonia_format_ogg::demuxer", LevelFilter::Warn); + } let logger = match log_target { - LogTarget::Terminal => logger.chain(std::io::stdout()), + LogTarget::Terminal => { + let colors = ColoredLevelConfig::new(); + logger + .format(move |out, message, record| { + let target = if verbose > 0 { + &format!(" {}", record.target()) + } else { + "" + }; + out.finish(format_args!( + "[{}{}] {}", + colors.color(record.level()), + target, + message + )) + }) + .chain(std::io::stdout()) + } #[cfg(unix)] LogTarget::Syslog => { let log_format = syslog::Formatter3164 {