Ajoute un media server à l'application PMOMusic

This commit is contained in:
2025-10-17 09:01:24 +02:00
parent d657ea2315
commit f9dc2ecb12
8 changed files with 1165 additions and 26 deletions

View File

@@ -1,15 +1,9 @@
use pmoupnp::{
ssdp::SsdpServer,
upnp_api::UpnpApiExt,
UpnpServer,
};
use pmomediarenderer::MEDIA_RENDERER;
use pmoserver::{
logs::LoggingOptions,
ServerBuilder
};
use pmoapp::{Webapp, WebAppExt};
use pmoapp::{WebAppExt, Webapp};
use pmocovers::CoverCacheExt;
use pmomediarenderer::MEDIA_RENDERER;
use pmomediaserver::{MEDIA_SERVER, MediaServerExt};
use pmoserver::{ServerBuilder, logs::LoggingOptions};
use pmoupnp::{UpnpServer, ssdp::SsdpServer, upnp_api::UpnpApiExt};
use tracing::info;
#[tokio::main]
@@ -20,17 +14,13 @@ async fn main() {
// Initialiser le logging et enregistrer les routes de logs
server.init_logging().await;
info!("📡 Registering the cover cache...");
let cache = server.init_cover_cache_configured()
.await
.expect("Cannot initialise the image cache");
info!("✅ Cover cache ready at {}",
cache.cache_dir(),
);
let cache = server
.init_cover_cache_configured()
.await
.expect("Cannot initialise the image cache");
info!("✅ Cover cache ready at {}", cache.cache_dir(),);
// Routes de base
server
@@ -39,7 +29,6 @@ async fn main() {
})
.await;
// Ajouter la webapp via le trait WebAppExt
info!("📡 Registering Web application...");
server.add_webapp_with_redirect::<Webapp>("/app").await;
@@ -48,23 +37,58 @@ async fn main() {
server.register_upnp_api().await;
info!("📡 Registering MediaRenderer...");
let renderer_instance = server.register_device(MEDIA_RENDERER.clone())
let renderer_instance = server
.register_device(MEDIA_RENDERER.clone())
.await
.expect("Failed to register MediaRenderer routes");
info!("✅ MediaRenderer ready at {}{}",
info!(
"✅ MediaRenderer ready at {}{}",
renderer_instance.base_url(),
renderer_instance.description_route()
);
// TODO: Enregistrer les sources musicales
// Exemple d'utilisation du MediaServerExt:
//
// use std::sync::Arc;
//
// info!("📡 Registering music sources...");
//
// // Exemple: Enregistrer une source Qobuz
// // let qobuz = Arc::new(QobuzSource::new(credentials));
// // server.register_music_source(qobuz).await;
//
// // Exemple: Enregistrer une source Radio Paradise
// // let radio = Arc::new(RadioParadiseSource::new());
// // server.register_music_source(radio).await;
//
// // Lister toutes les sources enregistrées
// let sources = server.list_music_sources().await;
// info!("✅ {} music source(s) registered", sources.len());
// for source in sources {
// info!(" - {} ({})", source.name(), source.id());
// }
info!("📡 Registering MediaServer...");
let server_instance = server
.register_device(MEDIA_SERVER.clone())
.await
.expect("Failed to register MediaServer routes");
info!(
"✅ MediaServer ready at {}{}",
server_instance.base_url(),
server_instance.description_route()
);
// Créer et démarrer le serveur SSDP
info!("📡 Starting SSDP discovery...");
let mut ssdp_server = SsdpServer::new();
ssdp_server.start().expect("Failed to start SSDP server");
// Créer et enregistrer le device SSDP pour le MediaRenderer
let ssdp_device = renderer_instance
.to_ssdp_device("PMOMusic", "1.0");
let ssdp_device = renderer_instance.to_ssdp_device("PMOMusic", "1.0");
ssdp_server.add_device(ssdp_device);
info!("✅ SSDP announcements sent for MediaRenderer");