Files
qbz/src-tauri/Cargo.toml
T
vicrodh c810663c6f feat: implement 3-state DAC badge and hardware sample rate detection
Backend changes:
- Add audio_diagnostics module to read actual hardware sample rate from /proc/asound
- New command get_hardware_audio_status() parses hw_params for real-time monitoring
- Add glob dependency for file pattern matching

Frontend (AudioOutputBadges):
- Implement 3-state DAC badge system:
  - Green: DAC passthrough working correctly (rates match)
  - Yellow: DAC passthrough ON but resampling detected (warning)
  - Gray: DAC passthrough OFF (intentionally disabled)
- Dynamic tooltips showing actual hardware sample rate
- Compare file sample rate vs hardware sample rate
- Increase tooltip z-index to 9999 to prevent occlusion issues
- Add pointer-events: none to tooltip to prevent interaction issues

Frontend (SettingsView):
- Replace hardcoded "192 kHz" with dynamic hardware sample rate
- Load and display actual hardware audio status
- Show format details (e.g., S32_LE) when available
- Display "No active playback" when no audio is playing
- Add muted styling for inactive state

Frontend (QualityBadge):
- Add native tooltip showing tier and format
- Add cursor: help to indicate interactivity

i18n:
- Add "noActivePlayback" translations (EN/ES)

This allows users to verify bit-perfect playback is working and detect
resampling issues that would compromise audio quality.
2026-01-16 21:14:22 -06:00

107 lines
2.3 KiB
TOML

[package]
name = "qbz-nix"
version = "1.1.5"
description = "Native Qobuz client for Linux with Hi-Fi audio support"
authors = ["blitzkriegfc"]
edition = "2021"
[lib]
name = "qbz_nix_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
[dependencies]
# Tauri
tauri = { version = "2", features = ["protocol-asset", "tray-icon"] }
tauri-plugin-opener = "2"
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# HTTP Client
reqwest = { version = "0.12", features = ["json", "cookies", "rustls-tls", "stream", "blocking"], default-features = false }
# Async Runtime
tokio = { version = "1", features = ["full"] }
# Crypto (for API signatures)
md-5 = "0.10"
base64 = "0.22"
# Regex (for bundle parsing)
regex = "1"
# Time
chrono = "0.4"
# Error handling
thiserror = "2"
anyhow = "1"
# Logging
log = "0.4"
env_logger = "0.11"
# Audio playback
rodio = { version = "0.19", features = ["symphonia-all"] }
symphonia = { version = "0.5", features = ["all"] }
# Media controls (MPRIS on Linux)
souvlaki = "0.7"
# Desktop notifications
notify-rust = "4"
# Image decoding (for tray icon)
image = { version = "0.25", default-features = false, features = ["png"] }
# URL opening
open = "5"
# Local library
walkdir = "2"
lofty = "0.18"
rusqlite = { version = "0.31", features = ["bundled"] }
dirs = "5"
filetime = "0.2"
glob = "0.3"
# File dialogs - platform specific (see target dependencies below)
# URL encoding
urlencoding = "2"
# Environment variables
dotenvy = "0.15"
# Secure credential storage (system keyring)
keyring = "3"
# Clipboard
tauri-plugin-clipboard-manager = "2"
# Casting (Chromecast, AirPlay, DLNA)
rust_cast = "0.18.1"
mdns-sd = "0.11"
tiny_http = "0.12"
rupnp = { version = "3", features = ["full_device_spec"] }
futures-util = "0.3"
# Platform-specific dependencies
[target.'cfg(target_os = "linux")'.dependencies]
# Note: xdg-portal feature disabled due to ashpd/zbus version incompatibility
tauri-plugin-dialog = { version = "2.5.0" }
[target.'cfg(target_os = "macos")'.dependencies]
tauri-plugin-dialog = { version = "2.5.0" }
[target.'cfg(target_os = "windows")'.dependencies]
tauri-plugin-dialog = { version = "2.5.0" }
[patch.crates-io]
cpal = { path = "vendor/cpal" }
rodio = { path = "vendor/rodio" }