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
47 lines
1.9 KiB
Rust
47 lines
1.9 KiB
Rust
//! qconnect-app
|
|
//!
|
|
//! Application adapter that composes qconnect core + protocol + transport.
|
|
|
|
mod app;
|
|
mod error;
|
|
mod events;
|
|
mod feature_flags;
|
|
mod renderer_engine;
|
|
pub mod session;
|
|
mod state;
|
|
pub mod startup;
|
|
mod sync_state;
|
|
|
|
pub use app::{
|
|
queue_payload_track_preview, QconnectApp, SessionApplyOutcome, SessionLoopHost,
|
|
SessionStateTakeoverInput,
|
|
};
|
|
pub use startup::{compute_effective_startup, QconnectStartupMode};
|
|
pub use error::QconnectAppError;
|
|
pub use events::{NoOpEventSink, QconnectAppEvent, QconnectEventSink};
|
|
pub use session::{
|
|
compute_connection_state, deferred_join_reason, find_unique_renderer_id,
|
|
is_local_renderer_active, is_peer_renderer_active, normalize_active_renderer_id,
|
|
quality_from_max_audio_quality, refresh_local_renderer_id, renderer_allows_remote_volume,
|
|
should_arm_renderer_watchdog, should_reask_queue_state, ConnectionDecision, LocalIdentity,
|
|
QconnectFileAudioQualitySnapshot, QconnectLifecycleState, QconnectRendererInfo,
|
|
QconnectSessionRendererState, QconnectSessionState, RendererStatus, ServerActiveState,
|
|
JOIN_SESSION_REASON_CONTROLLER_REQUEST, JOIN_SESSION_REASON_RECONNECTION,
|
|
QCONNECT_RENDERER_LOST_TIMEOUT_MS,
|
|
};
|
|
pub use feature_flags::{
|
|
QBZ_QCONNECT_PANEL_SWITCH, QBZ_QCONNECT_QUEUE_MODEL, QBZ_QCONNECT_STRICT_DOMAIN_ISOLATION,
|
|
QBZ_QCONNECT_TRANSPORT,
|
|
};
|
|
pub use qconnect_core::{
|
|
evaluate_remote_queue_admission, resolve_handoff_intent, validate_track_origins_for_admission,
|
|
AdmissionDecision, HandoffIntent, QConnectQueueState, QConnectRendererState, QueueVersion,
|
|
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,
|
|
};
|