push-tyvkwvpzzkzs #73

Merged
eric merged 14 commits from push-tyvkwvpzzkzs into main 2026-01-31 23:03:43 +01:00

14 Commits

Author SHA1 Message Date
ecb8dc7e75 Bump version to 0.3.20 and enhance metadata handling for Arylic and LinkPlay renderers
Update version from 0.3.19 to 0.3.20

- Enhanced metadata handling in ArylicTcpRenderer and LinkPlayRenderer to use queue metadata for consistent duration protection
- Added shared queue functionality for HybridUpnpArylic to synchronize metadata between UPnP and Arylic backends
- Improved error logging and debug information for playback position fetching
- Updated version in Cargo.toml and version.txt
2026-01-31 23:03:05 +01:00
acfdf01dab Protéger les durées des streams contre la diminution et améliorer la récupération des métadonnées
Cette mise à jour protège les durées des streams continus contre la diminution, en s'assurant qu'une fois une chanson diffusée, sa durée ne peut jamais être réduite. Elle améliore également la récupération des métadonnées dans le rendu UPnP en utilisant les données de la queue plutôt que celles de GetPositionInfo, ce qui évite les métadonnées obsolètes. Des ajustements ont été apportés à la gestion des files d'attente interne et OpenHome pour intégrer ces nouvelles règles de protection des durées.
2026-01-31 22:30:45 +01:00
6bdd7ea905 Ajout de la détection des flux continus
Ajout d'une nouvelle propriété `is_continuous_stream` pour identifier les flux continus (radio, stream) plutôt que les fichiers avec durée fixe.

- Ajout de la propriété `is_continuous_stream` dans `TrackMetadata`
- Implémentation de la détection dans plusieurs fichiers : control_point.rs, media_server.rs, music_renderer/watcher.rs et openhome_client.rs
- Utilisation de la fonction `is_continuous_stream_url` pour déterminer si l'URI correspond à un flux continu
2026-01-31 21:39:07 +01:00
3c5a91e0ff Fix playback state handling and metadata caching
This commit addresses several issues related to playback state reporting and metadata handling:

1. In the backend (pmocontrol), the music renderer now correctly uses raw playback states instead of computed logical states for event emission, and fixes stream time calculation to only occur when the device is actually playing.

2. The frontend (CurrentTrack.vue) now logs additional debug information for duration and transport state to help trace playback issues.

3. The SSE event handling in useRenderers.ts has been enhanced with more detailed logging and uses deep copying to prevent shared state issues between renderers.

4. The OpenHome queue implementation now uses a Mutex for metadata caching and implements logic to prevent duration from decreasing for the same track, which helps stabilize metadata for streaming content.

These changes improve the reliability and accuracy of playback state and metadata display across all components.
2026-01-31 21:10:39 +01:00
38bd063109 Optimize OpenHome queue operations with caching
This commit introduces caching mechanisms for track IDs in OpenHome queues to reduce redundant SOAP calls. It adds a new `CurrentTrackIdCache` struct and integrates it into `OpenHomeQueue` to cache current track information with a 250ms TTL. The `queue_snapshot` method now uses cached track IDs instead of calling `read_all_tracks()` directly, and batched metadata reads are implemented. Cache invalidation is properly handled on write operations like `seek_id`, `stop`, `delete_all`, and `clear_queue`. The `read_all_tracks` function was removed from `openhome_client.rs` as it's now superseded by the caching logic. Additionally, the `Clone` derive was removed from `InternalQueue` and `MusicQueue` structs, and `trace` was added to the tracing imports in `openhome.rs`.
2026-01-31 17:21:29 +01:00
2b6462fdd9 Optimize OpenHome playlist operations with caching
This commit introduces caching mechanisms for OpenHome playlist operations to reduce redundant SOAP calls and improve performance. Key changes include:

- Added track IDs caching in OpenHomeQueue to avoid repeated id_array() calls
- Implemented cache invalidation for all playlist modification operations
- Added caching for source XML and source index in OhProductClient
- Updated playlist length, ID retrieval, and track ID fetching to use cached data
- Ensured cache is invalidated on write operations to maintain consistency

The caching strategy uses time-based expiration (1 second for track IDs, 10 minutes for sources) and employs mutex locking for thread safety.
2026-01-31 16:52:15 +01:00
fa489f458d Fix OpenHome polling regression
Corrected polling regression causing 2-3 second jumps in OpenHome renderer progress bar

- Fixed watcher loop timing to use fixed intervals instead of fixed pauses
- Eliminated redundant SOAP calls to playback_position() by implementing intelligent caching
- Restructured poll_and_emit_changes() to minimize lock contention
- Reduced unnecessary network calls and improved performance

This resolves the UI progress bar stuttering issue while maintaining correct playback state detection.
2026-01-31 16:13:52 +01:00
bf876e4de1 Fix reactivity and position tracking in music renderer
This commit addresses two main issues:

1. In the webapp, we ensure proper reactivity by explicitly reassigning the snapshot object when updating track information, which triggers Vue's reactivity system.

2. In the music renderer, we improve position tracking by:
   - Adding detailed tracing when position changes
   - Refactoring rel_time calculation to only apply to streams, preserving backend values for regular files
   - Enhancing logging in the OpenHome renderer to include elapsed time and formatted relative time

These changes improve the reliability of playback position tracking and ensure proper UI updates when track information changes.
2026-01-31 15:34:45 +01:00
5440e72afb Corriger les informations de position pour les flux continus
Cette modification corrige le calcul de la position et de la durée pour les flux continus (webradio) en ajustant la méthode `poll_and_emit_changes()` dans `pmocontrol`. Elle détecte maintenant les flux via `is_playing_a_stream()`, extrait la durée depuis les métadonnées DIDL, et calcule la position relative basée sur `track_start_time`. Les valeurs par défaut (zéro pour la position, none pour la durée) sont utilisées si aucune durée n'est disponible. Les fichiers modifiés incluent `musicrenderer.rs`, `CurrentTrack.vue` et `useRenderers.ts` pour assurer une gestion cohérente des données de position et de durée.
2026-01-31 14:26:49 +01:00
d98bc357b9 Ajout des règles LLM pour le projet PMOMusic
Ajout du fichier Rules_optimal.md contenant les règles strictes pour l'interaction avec l'LLM dans le projet PMOMusic. Ce fichier définit les interdictions, le workflow à suivre ainsi que les templates à utiliser pour les rapports et les tâches terminées.
2026-01-31 12:54:06 +01:00
90c8a6e562 Un peu de ménage pour retirer les répertoires target poussés par erreur. 2026-01-31 12:42:38 +01:00
91c147eafd Implementing the is_playing_a_stream method...
Fournir une gestion correcte de la barre de progression de lecture sur des flux continus...
2026-01-31 12:41:21 +01:00
c00b10a230 Ajout de l'indicateur visuel 'Web Radio' pour les flux continus
Implémentation complète de l'étape 2 : ajout d'un indicateur visuel "Web Radio" dans l'interface web pour signaler la lecture d'un flux continu. Cet indicateur s'affiche à côté de l'indicateur "Attachée à une playlist" dans le composant QueueViewer.

Changements principaux :
- Ajout du champ `is_stream` dans `FullRendererSnapshot` pour transmettre l'état du flux au frontend
- Intégration de l'indicateur visuel dans `QueueViewer.vue` avec l'icône Radio
- Gestion de l'événement `stream_state_changed` dans le composant `useRenderers.ts`
- Mise à jour des types TypeScript pour inclure le nouveau champ `is_stream`
- Refactorisation de `sse.rs` pour éliminer la duplication de code

Cette fonctionnalité permet aux utilisateurs de savoir rapidement si la lecture en cours est un flux continu (webradio) ou un fichier audio traditionnel.
2026-01-31 11:44:46 +01:00
ea5328450b Implémentation de la détection de flux continu et gestion de la barre de progression
Cette mise à jour implémente la détection des flux continus (radio, streaming) et améliore la gestion de la barre de progression pour ces flux. Les changements incluent : 
- Ajout d'une méthode predicat `is_playing_a_stream()` au niveau de `MusicRenderer`
- Développement d'une fonction utilitaire `is_continuous_stream_url()` pour analyser les headers HTTP
- Mise à jour des backends (UPnP, OpenHome, LinkPlay, ArylicTcp, Chromecast) pour détecter les flux continus
- Ajout d'un flag `continuous_stream` dans chaque backend
- Export du module de détection de flux
- Mise à jour de l'API REST et des événements SSE pour transmettre l'état du flux
- Correction de la gestion de la position de lecture pour les flux continus

Les flux continus sont maintenant correctement détectés via une analyse HTTP des headers, permettant une gestion appropriée de la barre de progression dans l'interface web.
2026-01-31 10:33:06 +01:00