Files
qobuz-qt/rust/Cargo.toml
joren 70810bd4b1 feat: qbz-1 streaming, gapless prefetch, accurate scrobbling, Range-seek
Port proven playback architecture from qbqt fork:
- Bounded VecDeque buffer with condvar backpressure (4MB cap)
- decrypt_and_extract_frames for clean FLAC frame extraction from ISOBMFF
- Cancel+restart seeking with sub-segment sample skipping
- start_prefetch / QueueNext for gapless transitions with pre-started downloads
- track_transitioned signaling for scrobbler during gapless playback
- Range-request HTTP seeking for non-segmented (MP3) tracks
- OnceLock HTTP client singleton with cancel-aware chunked downloads
- Accumulated listening time scrobbling (prevents false scrobbles from seeking)
- Array-format Last.fm scrobble params (artist[0], track[0], etc.)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 20:12:23 +02:00

44 lines
926 B
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[package]
name = "qobuz-backend"
version = "0.1.0"
edition = "2021"
[lib]
name = "qobuz_backend"
crate-type = ["staticlib"]
[dependencies]
# HTTP client blocking feature is needed by the audio decoder
reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream", "blocking"], default-features = false }
tokio = { version = "1", features = ["full"] }
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# Audio decoding + output
symphonia = { version = "0.5", features = ["all"] }
cpal = { version = "0.15", features = ["jack"] }
rb = "0.3"
# Misc
anyhow = "1"
thiserror = "2"
md5 = "0.7"
dirs = "5"
toml = "0.8"
# Crypto — qbz-1 key derivation + segment decryption
aes = "0.8"
cbc = { version = "0.1", features = ["alloc"] }
ctr = "0.9"
hkdf = "0.12"
sha2 = "0.10"
hex = "0.4"
base64 = "0.22"
[profile.release]
lto = "thin"
opt-level = 3
overflow-checks = true