feat(qconnect-app): add QconnectRendererEngine trait + qbz-player dep (slice 6)

The renderer-engine seam: a 16-method trait both frontends implement with
zero-cost forwards to their QbzCore/Player, so the hard-won renderer
orchestration (echo-seek rejection, cursor align, queue materialize, shuffle
deferral, load dedup window) can move UP into qconnect-app and be written once
against the trait instead of re-derived per frontend (slice 6, Phase T 1-2).

- Adds qbz-player as a qconnect-app dep, for PlaybackState (read by the echo
  gate + should_reload; it is not in qbz-models and not re-exported). qbz-player
  does NOT depend on qconnect-app -> no dependency cycle.
- The two protected bit-perfect seams (play_data / play_streaming_dynamic) are
  reached ONLY through the high-level start_track_stream method; BufferWriter +
  reqwest + the detached feeder spawn stay impl-side and never cross the crate
  boundary. play_data / play_streaming_dynamic are never modified.

No impls, no logic moved yet -- pure foundation. qconnect-app 38 green, src-tauri
cargo check green.

cc
This commit is contained in:
vicrodh committed 2026-06-02 16:43:08 -06:00
1 parent 6b26ea0e5e
commit e5e8d4a853
5 files changed
+98

No files matched your search

+2
View File
@@ -6,6 +6,7 @@ mod app;
mod error;
mod events;
mod feature_flags;
mod renderer_engine;
pub mod session;
mod state;
pub mod startup;
@@ -38,6 +39,7 @@ pub use qconnect_core::{
RendererCommand, TrackOrigin,
};
pub use qconnect_protocol::{QueueCommandType, RendererReport, RendererReportType};
pub use renderer_engine::QconnectRendererEngine;
pub use state::QconnectRuntimeState;
pub use sync_state::{
ensure_session_renderer_state, sync_session_renderer_active_flags, QconnectRemoteSyncState,