New qbz-qt bin crate (cxx-qt 0.7 + QML) as the only default workspace member in this worktree, so plain cargo build produces just the Qt binary. Gate verified against system Qt 6.11.1 (codegen, moc, qmltyperegistrar, qrc load, offscreen run all green). km
156 lines
5.8 KiB
TOML
156 lines
5.8 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
|
|
members = [
|
|
"qbz-app",
|
|
"qbz-theme",
|
|
"qbz-models",
|
|
"qbz-audio",
|
|
"qbz-player",
|
|
"qbz-qobuz",
|
|
"qbz-radio",
|
|
"qbz-core",
|
|
"qbz-integrations",
|
|
"qbz-cache",
|
|
"qbz-library",
|
|
"qbz-cast",
|
|
"qbz-cmaf",
|
|
"qbz-dsd",
|
|
"qbz-secrets",
|
|
"qbz-offline-cache",
|
|
"qbz-plex",
|
|
"qconnect-core",
|
|
"qconnect-protocol",
|
|
"qconnect-transport-ws",
|
|
"qconnect-app",
|
|
"qbz-ui",
|
|
"qbz-dac-wizard",
|
|
"qbz-text-utils",
|
|
"qbz-slint-common",
|
|
"qbz",
|
|
"qbz-credentials",
|
|
"qbz-media-controls",
|
|
"qbz-mixtape",
|
|
"qbz-playlist-import",
|
|
"qbz-lyrics",
|
|
"qbz-i18n",
|
|
"qbz-music-link",
|
|
"qbz-reco",
|
|
"qbz-external-reco",
|
|
"qbz-log",
|
|
"qbzd",
|
|
"qbz-qt",
|
|
]
|
|
|
|
# Qt-frontend POC worktree: plain `cargo build`/`cargo check` in this workspace
|
|
# produces ONLY the Qt binary (plus its Slint-free dependency closure). The
|
|
# Slint crates remain members but are never built by default here.
|
|
default-members = ["qbz-qt"]
|
|
|
|
[workspace.package]
|
|
version = "2.0.2"
|
|
edition = "2021"
|
|
license = "MIT"
|
|
repository = "https://github.com/vicrodh/qbz"
|
|
|
|
[workspace.dependencies]
|
|
# Async runtime
|
|
tokio = { version = "1", features = ["full"] }
|
|
async-trait = "0.1"
|
|
futures-util = "0.3"
|
|
tokio-stream = { version = "0.1", features = ["sync"] }
|
|
|
|
# Serialization
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
|
|
# HTTP
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-webpki-roots-no-provider", "cookies", "stream"] }
|
|
|
|
# Logging
|
|
log = "0.4"
|
|
tracing = "0.1"
|
|
|
|
# Error handling
|
|
thiserror = "2"
|
|
anyhow = "1"
|
|
|
|
# Crypto (Qobuz auth)
|
|
md-5 = "0.10"
|
|
base64 = "0.22"
|
|
|
|
# Time
|
|
chrono = "0.4"
|
|
|
|
# Regex
|
|
regex = "1"
|
|
|
|
# Audio
|
|
symphonia = { version = "0.5", features = ["all"] }
|
|
|
|
# Random number generation (shuffle / DJ-mix) — mirrors src-tauri pin
|
|
rand = "0.10"
|
|
|
|
# Fuzzy string similarity (track-mix dedup) — mirrors src-tauri pin
|
|
strsim = "0.11"
|
|
|
|
# Note: Linux-specific dependencies (alsa) go in individual crate Cargo.toml files
|
|
# because workspace manifests cannot have [target] sections
|
|
|
|
[profile.release]
|
|
# Strip symbol tables from release binaries. Measured on 2026-07-02:
|
|
# 400 MB -> 218 MB (-45%). There are no .debug_* sections in a default
|
|
# release build — the weight is .strtab (151 MB) + .symtab (22 MB), inflated
|
|
# by Slint's generated generic symbol names. Trade-off: panic backtraces show
|
|
# addresses instead of names; the release workflow archives the UNSTRIPPED
|
|
# binary as an Actions artifact per tag for offline symbolication.
|
|
# Codegen knobs (opt-level / codegen-units / jobs) intentionally stay in the
|
|
# workflows' env (CARGO_PROFILE_RELEASE_*) — they are CI-memory tuning, not
|
|
# a property of the package.
|
|
strip = "symbols"
|
|
|
|
[patch.crates-io]
|
|
# Slint 1.16's femtovg-wgpu renderer leaves the wgpu surface alpha mode at
|
|
# `Auto`, which resolves as an opaque compositor surface on KWin/Wayland and
|
|
# makes borderless transparent windows show a black rectangular backing. The
|
|
# patch keeps Slint pinned but chooses a supported non-opaque composite alpha
|
|
# mode when the surface advertises one, so the miniplayer card can have real
|
|
# transparent rounded corners. The non-opaque mode is PER-WINDOW opt-in
|
|
# (`wgpu::set_surface_prefers_transparent`, flipped from qbz's winit
|
|
# window-attributes hook): only the miniplayer pays the compositor-blend cost,
|
|
# the main window keeps an Opaque swapchain.
|
|
i-slint-renderer-femtovg = { path = "vendor/i-slint-renderer-femtovg-1.16.1" }
|
|
# On modern macOS, fontique's CoreText per-script fallback can fail to resolve
|
|
# a Han-script family (the suggested PingFang is not always in the scanned
|
|
# family map), so Japanese kanji rendered blank while kana worked. The patch
|
|
# pre-registers the known system CJK families (Hiragino/PingFang/Apple SD
|
|
# Gothic Neo/Arial Unicode MS, Japanese-biased default) in the fallback map at
|
|
# collection creation, which takes priority over the CoreText query. macOS-only
|
|
# (#[cfg]); Linux keeps its working fontconfig fallback.
|
|
i-slint-common = { path = "vendor/i-slint-common-1.16.1" }
|
|
# With `overflow: elide`, sharedparley culled EVERY line whose bottom edge
|
|
# exceeded max_height — including the FIRST one, eliding the text to nothing.
|
|
# CJK fallback fonts (Hiragino on macOS) report line metrics taller than
|
|
# snug fixed-height boxes (TrackRow's 20px title line at 14px), so every
|
|
# CJK track title rendered blank on macOS while Latin fit (#543; verified
|
|
# with a headless repro matrix on the Mac Mini). The patch always draws the
|
|
# first line — it still gets the ellipsis treatment as the last visible one.
|
|
i-slint-core = { path = "vendor/i-slint-core-1.16.1" }
|
|
# Slint compiles femtovg with the swash raster path. Swash fails to scale
|
|
# some variable fonts at a non-default variation instance (the CFF2-based
|
|
# CJK system fonts on modern macOS), and femtovg cached those glyphs as
|
|
# permanently missing — so CJK text at any non-regular weight rendered
|
|
# blank (#543; regular weight = empty coords = renders fine). The patch
|
|
# retries the glyph at the font's DEFAULT instance before giving up: worst
|
|
# case the glyph draws at regular weight instead of not at all. No effect
|
|
# on fonts/instances that already render.
|
|
femtovg = { path = "vendor/femtovg-0.23.2" }
|
|
# macOS Skia renderer: skia bug 310510989 makes new_from_data fail for TTC
|
|
# faces at index > 0, and for some system collections (AppleSDGothicNeo.ttc,
|
|
# where EVERY weight sits at index > 0) the upstream read/write-fonts rebuild
|
|
# workaround ALSO fails — every Korean glyph run at non-regular weights drew
|
|
# nothing. The patch adds a second-chance workaround: resolve the same face
|
|
# through CoreText by family name + OS/2 weight, guarded by cmap glyph-id
|
|
# spot checks so a wrong match is rejected instead of drawing wrong glyphs.
|
|
i-slint-renderer-skia = { path = "vendor/i-slint-renderer-skia-1.16.1" }
|