feat: Add logic_mut() to Node and fix playlist registration in FlacCacheSink

- Add Node::logic_mut() method to allow post-construction configuration
  of node logic before run() is called
- Fix FlacCacheSink to properly transfer playlist_handle_pending to
  the inner logic using logic_mut()
- Resolves FIXME at flac_cache_sink.rs:656 about missing logic_mut()

This enables the playlist registration mechanism to work correctly:
1. User calls register_playlist() on FlacCacheSink
2. Handle is stored in playlist_handle_pending
3. During run(), handle is transferred to FlacCacheSinkLogic
4. Tracks are automatically added to playlist after caching
This commit is contained in:
Claude
2025-11-04 22:29:32 +00:00
parent 5d88d3a25e
commit 92c53ed3a5
2 changed files with 10 additions and 4 deletions

View File

@@ -653,10 +653,7 @@ impl AudioPipelineNode for FlacCacheSink {
// Transférer le playlist_handle_pending à la logique si présent // Transférer le playlist_handle_pending à la logique si présent
#[cfg(feature = "playlist")] #[cfg(feature = "playlist")]
if let Some(handle) = self.playlist_handle_pending.take() { if let Some(handle) = self.playlist_handle_pending.take() {
// FIXME: Node devrait exposer une méthode logic_mut() pour permettre self.inner.logic_mut().set_playlist_handle(handle);
// la configuration post-construction. Pour l'instant, on ignore ce handle.
// L'utilisateur devra configurer la playlist avant construction.
let _ = handle;
} }
Box::new(self.inner).run(stop_token).await Box::new(self.inner).run(stop_token).await

View File

@@ -482,6 +482,15 @@ impl<L: NodeLogic> Node<L> {
pub fn logic(&self) -> &L { pub fn logic(&self) -> &L {
&self.logic &self.logic
} }
/// Retourne une référence mutable vers la logique métier du nœud
///
/// Permet de configurer la logique après construction mais avant run().
/// Utile pour définir des options qui ne peuvent pas être connues
/// au moment de la construction du nœud.
pub fn logic_mut(&mut self) -> &mut L {
&mut self.logic
}
} }
#[async_trait::async_trait] #[async_trait::async_trait]