From 7678bceb3e6fa59ef8bf1093cd6ea9a699e9a6c4 Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Thu, 25 Jun 2026 17:54:10 -0600 Subject: [PATCH] refactor(slint): extract DAC wizard into qbz-dac-wizard crate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First per-feature crate split off the qbz binary. `dac_wizard.rs` (794 LOC) was the cleanest candidate: zero cross-feature module deps — it only used qbz-ui generated types (AppWindow, DacWizardState, …), qbz-audio, qbz-models and qbz-i18n. Moved verbatim into `qbz-dac-wizard/src/lib.rs` (import `crate::` -> `qbz_ui::`); the bin now `use qbz_dac_wizard as dac_wizard;` so its ~20 call sites in main.rs are unchanged. `cargo check -p qbz` green. cc --- crates/Cargo.lock | 12 ++++++++++++ crates/Cargo.toml | 1 + crates/qbz-dac-wizard/Cargo.toml | 18 ++++++++++++++++++ .../src/lib.rs} | 2 +- crates/qbz/Cargo.toml | 1 + crates/qbz/src/main.rs | 2 +- 6 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 crates/qbz-dac-wizard/Cargo.toml rename crates/{qbz/src/dac_wizard.rs => qbz-dac-wizard/src/lib.rs} (99%) diff --git a/crates/Cargo.lock b/crates/Cargo.lock index ada77f1a7..c293e6259 100644 --- a/crates/Cargo.lock +++ b/crates/Cargo.lock @@ -5531,6 +5531,7 @@ dependencies = [ "qbz-cast", "qbz-core", "qbz-credentials", + "qbz-dac-wizard", "qbz-i18n", "qbz-integrations", "qbz-library", @@ -5700,6 +5701,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "qbz-dac-wizard" +version = "0.1.0" +dependencies = [ + "qbz-audio", + "qbz-i18n", + "qbz-models", + "qbz-ui", + "slint", +] + [[package]] name = "qbz-i18n" version = "0.1.0" diff --git a/crates/Cargo.toml b/crates/Cargo.toml index bf6a94884..bb0391352 100644 --- a/crates/Cargo.toml +++ b/crates/Cargo.toml @@ -23,6 +23,7 @@ members = [ "qconnect-transport-ws", "qconnect-app", "qbz-ui", + "qbz-dac-wizard", "qbz", "qbz-credentials", "qbz-media-controls", diff --git a/crates/qbz-dac-wizard/Cargo.toml b/crates/qbz-dac-wizard/Cargo.toml new file mode 100644 index 000000000..7de0e79a6 --- /dev/null +++ b/crates/qbz-dac-wizard/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "qbz-dac-wizard" +version.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +description = "HiFi/DAC setup wizard controller (Slint) — extracted feature crate." + +[lib] +name = "qbz_dac_wizard" +path = "src/lib.rs" + +[dependencies] +qbz-ui = { path = "../qbz-ui" } +qbz-audio = { path = "../qbz-audio" } +qbz-models = { path = "../qbz-models" } +qbz-i18n = { path = "../qbz-i18n" } +slint = { version = "=1.16.1", default-features = false, features = ["std", "compat-1-2"] } diff --git a/crates/qbz/src/dac_wizard.rs b/crates/qbz-dac-wizard/src/lib.rs similarity index 99% rename from crates/qbz/src/dac_wizard.rs rename to crates/qbz-dac-wizard/src/lib.rs index 0f04b4cfc..628acf605 100644 --- a/crates/qbz/src/dac_wizard.rs +++ b/crates/qbz-dac-wizard/src/lib.rs @@ -11,7 +11,7 @@ use std::sync::Mutex; use qbz_audio::{AudioStackHealth, Distro, InitSystem}; use slint::{ComponentHandle, Model, ModelRc, VecModel}; -use crate::{AppWindow, DacCandidateRow, DacConfigRow, DacWizardState, RemediationRow}; +use qbz_ui::{AppWindow, DacCandidateRow, DacConfigRow, DacWizardState, RemediationRow}; // Last probe result, so a distro override recomputes commands without // re-shelling on every dropdown change. diff --git a/crates/qbz/Cargo.toml b/crates/qbz/Cargo.toml index b0d9f75dd..239f7771d 100644 --- a/crates/qbz/Cargo.toml +++ b/crates/qbz/Cargo.toml @@ -46,6 +46,7 @@ slint = { version = "=1.16.1", default-features = false, features = [ i-slint-backend-winit = "=1.16.1" qbz-music-link = { path = "../qbz-music-link" } qbz-ui = { path = "../qbz-ui" } +qbz-dac-wizard = { path = "../qbz-dac-wizard" } log = { workspace = true } env_logger = "0.11" tokio = { workspace = true } diff --git a/crates/qbz/src/main.rs b/crates/qbz/src/main.rs index 84750a36e..78c5561dd 100644 --- a/crates/qbz/src/main.rs +++ b/crates/qbz/src/main.rs @@ -40,7 +40,7 @@ mod favorites; mod favorites_prefs; mod foryou; mod genre_filter; -mod dac_wizard; +use qbz_dac_wizard as dac_wizard; mod home; mod immersive; mod info_modals;