2026-02-09 07:18:13 +01:00
|
|
|
//! Intégration avec pmoserver — enregistrement des routes WebRenderer
|
|
|
|
|
|
|
|
|
|
#[cfg(feature = "pmoserver")]
|
|
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
|
|
|
|
#[cfg(feature = "pmoserver")]
|
|
|
|
|
use async_trait::async_trait;
|
|
|
|
|
|
2026-02-26 19:58:37 +01:00
|
|
|
#[cfg(feature = "pmoserver")]
|
2026-04-05 10:52:54 +02:00
|
|
|
use axum::{
|
|
|
|
|
Router,
|
|
|
|
|
routing::{delete, get, post},
|
|
|
|
|
};
|
2026-02-26 19:58:37 +01:00
|
|
|
|
2026-02-09 07:18:13 +01:00
|
|
|
#[cfg(feature = "pmoserver")]
|
|
|
|
|
use pmocontrol::ControlPoint;
|
|
|
|
|
|
|
|
|
|
#[cfg(feature = "pmoserver")]
|
2026-04-05 21:20:51 +02:00
|
|
|
use pmomediarenderer::MediaRendererError;
|
2026-02-09 07:18:13 +01:00
|
|
|
#[cfg(feature = "pmoserver")]
|
2026-04-05 10:52:54 +02:00
|
|
|
use crate::register::{
|
2026-04-05 15:02:44 +02:00
|
|
|
nowplaying_handler, pause_handler, play_handler, position_update_handler,
|
|
|
|
|
register_handler, report_handler, set_uri_handler, state_handler, unregister_handler,
|
2026-04-05 10:52:54 +02:00
|
|
|
};
|
2026-02-26 19:58:37 +01:00
|
|
|
#[cfg(feature = "pmoserver")]
|
2026-04-05 21:20:51 +02:00
|
|
|
use pmomediarenderer::MediaRendererRegistry;
|
2026-02-09 07:18:13 +01:00
|
|
|
#[cfg(feature = "pmoserver")]
|
2026-02-26 19:58:37 +01:00
|
|
|
use crate::stream::stream_handler;
|
2026-02-09 07:18:13 +01:00
|
|
|
|
|
|
|
|
/// Trait pour étendre pmoserver::Server avec les routes WebRenderer
|
|
|
|
|
#[cfg(feature = "pmoserver")]
|
|
|
|
|
#[async_trait]
|
|
|
|
|
pub trait WebRendererExt {
|
|
|
|
|
async fn register_web_renderer(
|
|
|
|
|
&mut self,
|
|
|
|
|
control_point: Arc<ControlPoint>,
|
2026-04-05 21:20:51 +02:00
|
|
|
) -> Result<(), MediaRendererError>;
|
2026-02-09 07:18:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(feature = "pmoserver")]
|
|
|
|
|
#[async_trait]
|
|
|
|
|
impl WebRendererExt for pmoserver::Server {
|
|
|
|
|
async fn register_web_renderer(
|
|
|
|
|
&mut self,
|
|
|
|
|
control_point: Arc<ControlPoint>,
|
2026-04-05 21:20:51 +02:00
|
|
|
) -> Result<(), MediaRendererError> {
|
|
|
|
|
let registry = Arc::new(MediaRendererRegistry::new(control_point));
|
2026-02-09 07:18:13 +01:00
|
|
|
|
2026-02-26 19:58:37 +01:00
|
|
|
// POST /api/webrenderer/register
|
|
|
|
|
self.add_post_handler_with_state(
|
|
|
|
|
"/api/webrenderer/register",
|
|
|
|
|
register_handler,
|
|
|
|
|
registry.clone(),
|
|
|
|
|
)
|
|
|
|
|
.await;
|
2026-02-09 07:18:13 +01:00
|
|
|
|
2026-04-05 10:52:54 +02:00
|
|
|
// GET /api/webrenderer/{id}/stream + DELETE /api/webrenderer/{id}
|
|
|
|
|
// POST /api/webrenderer/{id}/play -> tell player to start streaming
|
|
|
|
|
// POST /api/webrenderer/{id}/pause, /set_uri, /report
|
|
|
|
|
// GET /api/webrenderer/{id}/command, /position
|
2026-02-26 19:58:37 +01:00
|
|
|
let dynamic_router = Router::new()
|
|
|
|
|
.route("/{id}/stream", get(stream_handler))
|
|
|
|
|
.route("/{id}", delete(unregister_handler))
|
2026-04-05 10:52:54 +02:00
|
|
|
.route("/{id}/play", post(play_handler))
|
|
|
|
|
.route("/{id}/pause", post(pause_handler))
|
|
|
|
|
.route("/{id}/set_uri", post(set_uri_handler))
|
|
|
|
|
.route("/{id}/report", post(report_handler))
|
|
|
|
|
.route("/{id}/command", get(crate::register::command_handler))
|
|
|
|
|
.route("/{id}/position", post(position_update_handler))
|
2026-04-05 15:02:44 +02:00
|
|
|
.route("/{id}/nowplaying", get(nowplaying_handler))
|
|
|
|
|
.route("/{id}/state", get(state_handler))
|
2026-02-26 19:58:37 +01:00
|
|
|
.with_state(registry.clone());
|
|
|
|
|
self.add_router("/api/webrenderer", dynamic_router).await;
|
2026-02-09 07:18:13 +01:00
|
|
|
|
2026-02-26 19:58:37 +01:00
|
|
|
tracing::info!("WebRenderer server-side streaming endpoints registered");
|
|
|
|
|
tracing::info!(" POST /api/webrenderer/register");
|
|
|
|
|
tracing::info!(" GET /api/webrenderer/{{id}}/stream");
|
|
|
|
|
tracing::info!(" DELETE /api/webrenderer/{{id}}");
|
2026-04-05 15:02:44 +02:00
|
|
|
tracing::info!(" GET /api/webrenderer/{{id}}/nowplaying");
|
|
|
|
|
tracing::info!(" GET /api/webrenderer/{{id}}/state");
|
2026-02-09 07:18:13 +01:00
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(not(feature = "pmoserver"))]
|
|
|
|
|
pub trait WebRendererExt {}
|
|
|
|
|
|
|
|
|
|
#[cfg(not(feature = "pmoserver"))]
|
|
|
|
|
impl WebRendererExt for () {}
|