[package] name = "qbz-qt" description = "Qt/QML frontend POC for QBZ (cxx-qt bridge over the UI-agnostic backend)" version.workspace = true edition.workspace = true license.workspace = true [[bin]] name = "qbz-qt" path = "src/main.rs" [dependencies] cxx = "1" cxx-qt = "0.7" cxx-qt-lib = { version = "0.7", features = ["qt_full"] } tokio = { workspace = true } log = { workspace = true } rand = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } reqwest = { workspace = true } urlencoding = "2" open = "5" dirs = "5" qbz-core = { path = "../qbz-core" } qbz-app = { path = "../qbz-app" } qbz-audio = { path = "../qbz-audio" } qbz-qobuz = { path = "../qbz-qobuz" } qbz-models = { path = "../qbz-models" } qbz-cache = { path = "../qbz-cache" } qbz-offline-cache = { path = "../qbz-offline-cache" } qbz-library = { path = "../qbz-library" } # MyQBZ: Mixtapes & Collections backend (schema + migrations, repo, shuffle, # enqueue). Headless and frontend-agnostic (ADR-006) — the same crate the # Slint app uses (crates/qbz/Cargo.toml:96), so the two frontends share # library.db's mixtape tables rather than each growing their own. qbz-mixtape = { path = "../qbz-mixtape" } # Cast: Chromecast + DLNA discovery, the two device families and the local # media server (src/cast_qt.rs drives it — nothing is reimplemented). qbz-cast = { path = "../qbz-cast" } qbz-plex = { path = "../qbz-plex" } qbz-lyrics = { path = "../qbz-lyrics" } qbz-text-utils = { path = "../qbz-text-utils" } qbz-credentials = { path = "../qbz-credentials" } qbz-i18n = { path = "../qbz-i18n" } qbz-log = { path = "../qbz-log" } qbz-theme = { path = "../qbz-theme" } qbz-integrations = { path = "../qbz-integrations" } # Last.fm "similar albums" row on the album page (external_reco_qt.rs). qbz-external-reco = { path = "../qbz-external-reco" } async-trait = "0.1" rusqlite = { version = "0.31", features = ["bundled"] } image = { version = "0.25", default-features = false, features = ["jpeg", "png"] } # Native file picker, used by exactly two call sites — the MyQBZ collection # cover upload (src/myqbz_cover_qt.rs) and the My-QBZ branding icon picker # (src/myqbz_prefs_qt.rs). # # The feature set is NOT negotiable and is copied verbatim from the reference # (crates/qbz/Cargo.toml:72): "async-std" is rfd's name for the # async-io/ashpd backend. NEVER enable rfd's "tokio" feature — zbus 5's # tokio feature unifies graph-wide and breaks the accesskit/atspi/ksni # threads. `default-features = false` keeps the GTK3 backend out; the # xdg-portal path is the Wayland-correct one and needs no extra system libs. rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "async-std"] } [build-dependencies] cxx-qt-build = "0.7"