Extract the HTTP host and catalog layer into qbz-control, preserve the existing daemon API, and keep private session credentials out of SSE. Scope library stores and scan workers to their host. Share bounded source search and show Local results alongside Qobuz in the Qt search page. Add the launch-gated Qt Orbit laboratory and persistent remote-context banner. Let qbzd run --orbit own and administer its file library through instance-scoped API and CLI operations. Full remote UI control remains pending. Validate library/control/daemon suites, Qt search and QML regressions, two isolated daemon processes, Qt release build and final cargo check. cx
71 lines
2.9 KiB
TOML
71 lines
2.9 KiB
TOML
[package]
|
|
name = "qbzd"
|
|
version.workspace = true
|
|
edition = "2021"
|
|
description = "QBZ headless Qobuz playback daemon (daemon + CLI + setup TUI in one binary)"
|
|
license = "MIT"
|
|
|
|
[[bin]]
|
|
name = "qbzd"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
# workspace crates shared by the daemon and the Qt application
|
|
qbz-models = { path = "../qbz-models" }
|
|
qbz-app = { path = "../qbz-app" }
|
|
qbz-library = { path = "../qbz-library" }
|
|
qbz-control = { path = "../qbz-control" }
|
|
qbz-core = { path = "../qbz-core" }
|
|
qbz-player = { path = "../qbz-player" }
|
|
qbz-audio = { path = "../qbz-audio" } # PROTECTED — read-only consumer
|
|
qbz-qobuz = { path = "../qbz-qobuz" }
|
|
qbz-reco = { path = "../qbz-reco" } # playlist recommendations (ArtistVectorStore); already in-tree via qbz-core
|
|
qbz-integrations = { path = "../qbz-integrations" } # Last.fm / ListenBrainz scrobbling; already in-tree via qbz-core
|
|
qbz-media-controls = { path = "../qbz-media-controls" } # MPRIS/media-key control (CONSOLE ext); mpris-server on Linux
|
|
qbz-credentials = { path = "../qbz-credentials" }
|
|
qbz-log = { path = "../qbz-log" }
|
|
qconnect-core = { path = "../qconnect-core" }
|
|
qconnect-protocol = { path = "../qconnect-protocol" }
|
|
qconnect-transport-ws = { path = "../qconnect-transport-ws" }
|
|
qconnect-app = { path = "../qconnect-app" }
|
|
qconnect-lan = { path = "../qconnect-lan" }
|
|
# runtime / wire
|
|
tokio = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
reqwest = { workspace = true }
|
|
dirs = "6"
|
|
rand = { workspace = true }
|
|
log = { workspace = true }
|
|
async-trait = { workspace = true }
|
|
# QConnect glue copies (T9) — mirror the desktop copies' direct imports
|
|
uuid = { version = "1", features = ["v4"] } # renderer-report action uuids
|
|
rusqlite = { version = "0.40", features = ["bundled"] } # daemon-root qconnect_settings.db KV
|
|
futures-util = { workspace = true } # remote_stream.rs feeder (byte-exact)
|
|
zeroize = "1"
|
|
# new direct deps (versions already in lock where noted)
|
|
tiny_http = "0.12" # in lock via qbz-cast
|
|
toml = "0.9" # in lock transitively
|
|
urlencoding = "2" # OAuth redirect_url encode + callback decode (in lock via qbz)
|
|
open = "5" # system-browser launch for `qbzd login` (in lock via qbz)
|
|
clap = { version = "4", features = ["derive"] }
|
|
clap_complete = "4"
|
|
# T13 setup TUI. Keep ratatui 0.30 aligned with the workspace's unicode-width
|
|
# resolution; ratatui-core 0.30 accepts the locked 0.2.2 version (IV5).
|
|
# The `crossterm` backend is a DEFAULT feature; re-exported as ratatui::crossterm.
|
|
ratatui = "0.30"
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = "0.2" # flock in src/lock.rs
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
# LockFileEx (+ OVERLAPPED, hence Win32_System_IO) for the instance lock.
|
|
windows-sys = { version = "0.61", features = [
|
|
"Win32_Foundation",
|
|
"Win32_Storage_FileSystem",
|
|
"Win32_System_IO",
|
|
] }
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|