Initial implementation of qobuz-qt

- Rust backend (qobuz-backend static lib): Qobuz API client (reqwest/tokio),
  Symphonia audio decoder, CPAL audio output, extern "C" FFI bridge
- Qt 6 frontend mirroring spotify-qt layout: toolbar with playback controls,
  left library dock, central track list, right search panel
- Auth: email/password login with MD5-signed requests; session token persisted
  via QSettings
- Playback: double-click a track → Rust fetches stream URL → Symphonia decodes
  → CPAL outputs to default audio device
- Dark Fusion palette matching spotify-qt feel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
joren
2026-03-23 23:34:23 +01:00
commit 9402dca7ed
40 changed files with 3963 additions and 0 deletions

33
rust/Cargo.toml Normal file
View File

@@ -0,0 +1,33 @@
[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"
[profile.release]
lto = "thin"
opt-level = 3