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:
5 files changed
+98
No files matched your search
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user