Files
pmomusic/PMOMusic/src/main.rs

95 lines
3.1 KiB
Rust
Raw Normal View History

use pmoapp::{WebAppExt, Webapp};
2025-10-07 08:33:06 +02:00
use pmocovers::CoverCacheExt;
use pmomediarenderer::MEDIA_RENDERER;
2025-10-17 09:20:12 +02:00
use pmomediaserver::{MEDIA_SERVER, sources::SourcesExt, MediaServerExt, sources_api_router};
use pmoserver::{ServerBuilder, logs::LoggingOptions};
use pmoupnp::{UpnpServer, ssdp::SsdpServer, upnp_api::UpnpApiExt};
2025-10-01 20:49:50 +02:00
use tracing::info;
#[tokio::main]
async fn main() {
2025-10-10 11:50:27 +02:00
// Créer le serveur - le trait UpnpServer étend automatiquement Server
let mut server = ServerBuilder::new_configured().build();
2025-10-06 20:24:04 +02:00
// Initialiser le logging et enregistrer les routes de logs
2025-10-13 11:35:07 +02:00
server.init_logging().await;
2025-10-06 20:24:04 +02:00
2025-10-07 08:33:06 +02:00
info!("📡 Registering the cover cache...");
let cache = server
.init_cover_cache_configured()
.await
.expect("Cannot initialise the image cache");
2025-10-07 08:33:06 +02:00
info!("✅ Cover cache ready at {}", cache.cache_dir(),);
2025-10-07 08:33:06 +02:00
// Routes de base
server
.add_route("/info", || async {
serde_json::json!({"version": "1.0.0"})
})
.await;
2025-10-06 20:24:04 +02:00
// Ajouter la webapp via le trait WebAppExt
info!("📡 Registering Web application...");
server.add_webapp_with_redirect::<Webapp>("/app").await;
2025-10-10 11:50:27 +02:00
// Enregistrer l'API d'introspection UPnP
server.register_upnp_api().await;
2025-10-17 09:20:12 +02:00
// Enregistrer l'API de gestion des sources musicales
info!("📡 Registering Sources API...");
server.add_router("/api", sources_api_router()).await;
2025-10-06 20:24:04 +02:00
info!("📡 Registering MediaRenderer...");
let renderer_instance = server
.register_device(MEDIA_RENDERER.clone())
.await
.expect("Failed to register MediaRenderer routes");
info!(
"✅ MediaRenderer ready at {}{}",
renderer_instance.base_url(),
renderer_instance.description_route()
);
2025-10-17 09:20:12 +02:00
// Enregistrer les sources musicales
info!("📡 Registering music sources...");
// Enregistrer Qobuz depuis la configuration
if let Err(e) = server.register_qobuz_from_config().await {
tracing::warn!("Failed to register Qobuz: {}", e);
}
// 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");
2025-10-06 20:24:04 +02:00
// Créer et enregistrer le device SSDP pour le MediaRenderer
let ssdp_device = renderer_instance.to_ssdp_device("PMOMusic", "1.0");
ssdp_server.add_device(ssdp_device);
info!("✅ SSDP announcements sent for MediaRenderer");
2025-10-01 20:49:50 +02:00
server.start().await;
server.wait().await;
}