2025-12-28 17:45:06 +01:00
|
|
|
mod backend;
|
|
|
|
|
mod interne;
|
2026-01-03 08:19:23 +01:00
|
|
|
mod music_queue;
|
|
|
|
|
mod openhome;
|
|
|
|
|
mod snapshot;
|
2025-12-28 17:45:06 +01:00
|
|
|
|
2025-12-30 16:50:26 +01:00
|
|
|
use std::sync::{Arc, Mutex};
|
|
|
|
|
|
2026-01-03 08:19:23 +01:00
|
|
|
pub use backend::{EnqueueMode, QueueBackend};
|
2025-12-30 16:50:26 +01:00
|
|
|
pub use music_queue::MusicQueue;
|
|
|
|
|
pub use snapshot::{PlaybackItem, QueueSnapshot};
|
|
|
|
|
|
|
|
|
|
// Internal queue implementations - not part of the public API
|
|
|
|
|
pub(crate) use interne::InternalQueue;
|
2026-01-03 08:19:23 +01:00
|
|
|
pub(crate) use openhome::OpenHomeQueue;
|
2025-12-30 16:50:26 +01:00
|
|
|
|
|
|
|
|
use crate::{RendererInfo, errors::ControlPointError};
|
|
|
|
|
|
|
|
|
|
pub trait QueueFromRendererInfo {
|
|
|
|
|
fn from_renderer_info(renderer: &RendererInfo) -> Result<Self, ControlPointError>
|
|
|
|
|
where
|
|
|
|
|
Self: Sized;
|
|
|
|
|
|
|
|
|
|
fn to_backend(self) -> MusicQueue;
|
|
|
|
|
|
2026-01-03 08:19:23 +01:00
|
|
|
fn build_from_renderer_info(renderer: &RendererInfo) -> Result<MusicQueue, ControlPointError>
|
2025-12-30 16:50:26 +01:00
|
|
|
where
|
|
|
|
|
Self: Sized,
|
|
|
|
|
{
|
|
|
|
|
let instance = Self::from_renderer_info(renderer)?;
|
|
|
|
|
Ok(instance.to_backend())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn make_from_renderer_info(
|
|
|
|
|
renderer: &RendererInfo,
|
|
|
|
|
) -> Result<Arc<Mutex<MusicQueue>>, ControlPointError>
|
|
|
|
|
where
|
|
|
|
|
Self: Sized,
|
|
|
|
|
{
|
|
|
|
|
let backend = Self::build_from_renderer_info(renderer)?;
|
|
|
|
|
Ok(Arc::new(Mutex::new(backend)))
|
|
|
|
|
}
|
2026-01-03 08:19:23 +01:00
|
|
|
}
|