From 92c53ed3a54def06940b1218ca99170226a7431d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 4 Nov 2025 22:29:32 +0000 Subject: [PATCH] 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 --- pmoaudio-ext/src/sinks/flac_cache_sink.rs | 5 +---- pmoaudio/src/pipeline.rs | 9 +++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pmoaudio-ext/src/sinks/flac_cache_sink.rs b/pmoaudio-ext/src/sinks/flac_cache_sink.rs index 2d349d66..62be634e 100755 --- a/pmoaudio-ext/src/sinks/flac_cache_sink.rs +++ b/pmoaudio-ext/src/sinks/flac_cache_sink.rs @@ -653,10 +653,7 @@ impl AudioPipelineNode for FlacCacheSink { // Transférer le playlist_handle_pending à la logique si présent #[cfg(feature = "playlist")] if let Some(handle) = self.playlist_handle_pending.take() { - // FIXME: Node devrait exposer une méthode logic_mut() pour permettre - // la configuration post-construction. Pour l'instant, on ignore ce handle. - // L'utilisateur devra configurer la playlist avant construction. - let _ = handle; + self.inner.logic_mut().set_playlist_handle(handle); } Box::new(self.inner).run(stop_token).await diff --git a/pmoaudio/src/pipeline.rs b/pmoaudio/src/pipeline.rs index 5977b788..7cffac38 100755 --- a/pmoaudio/src/pipeline.rs +++ b/pmoaudio/src/pipeline.rs @@ -482,6 +482,15 @@ impl Node { pub fn logic(&self) -> &L { &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]