Six live tabs (All/Tracks/Albums/Artists/Playlists/Labels) with real count badges, paged favorites/playlists/purchases loaders, library_all merge semantics, heart routing (Qobuz API vs local store — LocalFavoritesService now initialized at session entry), sort popup with direction carets, grid/list toggle with natively windowed GridView/ListView delegates, id-keyed artwork via signal with hand- rolled eviction. Perf marks on the owner's account: 344 items, fetch wall 2.7-3.4s (97% network, sequential), map+merge ~11ms, JSON serialize 10ms, QML parse 7ms (~20us/item => ~140ms at the 2200-item reference scale), RSS +29MB after publish. km
41 lines
1.0 KiB
TOML
41 lines
1.0 KiB
TOML
[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-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" }
|
|
qbz-text-utils = { path = "../qbz-text-utils" }
|
|
qbz-credentials = { path = "../qbz-credentials" }
|
|
qbz-i18n = { path = "../qbz-i18n" }
|
|
qbz-log = { path = "../qbz-log" }
|
|
|
|
[build-dependencies]
|
|
cxx-qt-build = "0.7"
|