🔧 refactor(base_url): centraliser gestion des URLs absolues via middleware

- Ajout d'un BaseUrl layer dans pmoserver pour gérer les URLs absolues (LAN/WAN)
- Renommage de `covers_absolute_url_for` → ` covers_relative_route`, stocker les routes relatives
- Mise à jour des appels UPnP vers `covers_absolute_url_for_upnp` (fallback PMO_SERVER_URL)
- Correction des tâches de fond pour stocker les routes, pas l'URL complète
- Suppression du feature gate `simd` inutilisé dans pmoaudio/src/lib.rs
This commit is contained in:
2026-04-04 10:14:18 +02:00
parent ff699d220f
commit 718c0d2aed
12 changed files with 294 additions and 68 deletions

View File

@@ -323,37 +323,42 @@ impl AudioSegment {
/// Convertit l'AudioChunk vers F32 si c'est un chunk audio
pub fn to_f32_chunk(&self) -> Option<AudioChunk> {
self.as_chunk().map(|chunk| chunk.to_f32())
self.as_chunk()
.map(|chunk: &Arc<AudioChunk>| chunk.to_f32())
}
/// Convertit l'AudioChunk vers I32 si c'est un chunk audio
pub fn to_i32_chunk(&self) -> Option<AudioChunk> {
self.as_chunk().map(|chunk| chunk.to_i32())
self.as_chunk()
.map(|chunk: &Arc<AudioChunk>| chunk.to_i32())
}
/// Récupère le sample rate du chunk audio
pub fn sample_rate(&self) -> Option<u32> {
self.as_chunk().map(|chunk| chunk.sample_rate())
self.as_chunk()
.map(|chunk: &Arc<AudioChunk>| chunk.sample_rate())
}
/// Récupère le nombre de frames du chunk audio
pub fn frame_count(&self) -> Option<usize> {
self.as_chunk().map(|chunk| chunk.len())
self.as_chunk().map(|chunk: &Arc<AudioChunk>| chunk.len())
}
/// Récupère le gain en dB du chunk audio
pub fn gain_db(&self) -> Option<f64> {
self.as_chunk().map(|chunk| chunk.gain_db())
self.as_chunk()
.map(|chunk: &Arc<AudioChunk>| chunk.gain_db())
}
/// Récupère le type du chunk audio (nom du type: "i32", "f32", etc.)
pub fn chunk_type_name(&self) -> Option<&'static str> {
self.as_chunk().map(|chunk| chunk.type_name())
self.as_chunk()
.map(|chunk: &Arc<AudioChunk>| chunk.type_name())
}
/// Crée un nouveau segment avec le gain modifié (si c'est un chunk audio)
pub fn with_gain_db(&self, gain_db: f64) -> Option<Arc<Self>> {
self.as_chunk().map(|chunk| {
self.as_chunk().map(|chunk: &Arc<AudioChunk>| {
let new_chunk = chunk.set_gain_db(gain_db);
Arc::new(Self {
order: self.order,
@@ -365,7 +370,7 @@ impl AudioSegment {
/// Crée un nouveau segment avec le gain ajusté (relatif, si c'est un chunk audio)
pub fn adjust_gain_db(&self, delta_db: f64) -> Option<Arc<Self>> {
self.as_chunk().map(|chunk| {
self.as_chunk().map(|chunk: &Arc<AudioChunk>| {
let new_gain = chunk.gain_db() + delta_db;
let new_chunk = chunk.set_gain_db(new_gain);
Arc::new(Self {

View File

@@ -77,7 +77,6 @@ async fn main() {
- **Backpressure** : Channels bounded avec `try_send` pour éviter les blocages
- **RwLock** : Pour partage concurrent du compteur [`TimerNode`]
"#]
#[cfg(feature = "simd")]
// use std::simd::*; // Not actually used in this file, modules import their own simd
mod audio_chunk;