New qbz_app::offline_mode (frontend-agnostic, ADR-006): three-state mode machine (Online / RealOffline session-scoped / InducedOffline persisted), Tauri-compatible offline_settings.db store with the issue #279 stream_first_track snapshot, and a layered connectivity actor (default-route signal on Linux, audio liveness window, IP-literal + vendor-diverse strict probes, asymmetric hysteresis with confirmation burst, captive-portal and suspend/resume handling). qbz-qobuz gains the process-wide offline_gate and ApiError::OfflineMode (the single Qobuz choke point; HTTP funnel wiring lands next). SubscriptionStateStore gains offline_playback_allowed: binary 30-day-grace playback gate for the offline cache, never a preview-degradation path. cc
26 lines
701 B
TOML
26 lines
701 B
TOML
[package]
|
|
name = "qbz-app"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
|
|
[dependencies]
|
|
qbz-models = { path = "../qbz-models" }
|
|
qbz-audio = { path = "../qbz-audio" }
|
|
qbz-player = { path = "../qbz-player" }
|
|
qbz-core = { path = "../qbz-core" }
|
|
qbz-qobuz = { path = "../qbz-qobuz" }
|
|
reqwest = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
tokio = { workspace = true }
|
|
log = { workspace = true }
|
|
rusqlite = { version = "0.31", features = ["bundled"] }
|
|
dirs = "6"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
chrono = { workspace = true }
|
|
md-5 = { workspace = true }
|
|
base64 = { workspace = true }
|
|
rand = "0.10"
|