- Bump crate and file versions from `v0.3.29` to v\[correction: actually 0\.3\.33] (see Cargo.toml & version.txt)
- Extend cover URL transformation logic to queue items in `pmoserver_ext.rs`—now transforms album art for both current track *and* queue items
- Add debug logging to cover URL transformation steps (local route, instance match & proxy)
- Minor cleanup: remove redundant `clone()` in base_url usage
- Bump version to v0.3.32 (Cargo.toml, Cargo.lock &version.txt)
- Add detailed debug logging in ChromecastRenderer::playback_state()– tracks apps, media entries & player state
- Implement proper handling of PlaybackState::NoMedia to support auto advancing after track ends (Chromecast-specific behavior)
- Reorganize imports in musicrenderer.rs for clarity
- Minor cleanup: remove unused import, fix formatting
- Ajout d'une méthode de travail structurée pour éviter le 'vibe programming'
- Version bump à 0.3.30
- Correction de chrono dans pmocontrol Cargo.toml (suppression d'optional)
- Dans MusicRenderer : utilisation de dc:date pour calibrer track_start_time sur la diffusion réelle des flux continus
- Ajout d'une fonction parse_rfc3339_to_system_time
- Dans pmoradiofrance : remplacement de la durée dynamique (temps restant) par une durée fixe calculée à partir des bornes start_time/end_time, et ajout de start_time dans les métadonnées DIDL via dc:date
- Correction du calcul de l'élément 'now playing' dans PullResponse pour utiliser les bornes temporelles exactes
- Mise à jour de version.txt
- Move protocol badge styles to global pmocontrol.css
- Extract .section-title, .icon-btn, and scrollbar utilities into pmocontrol.css
- Add --color-primary-rgb variable for rgba() usage
- Deprecate duplicate .protocol-* and @keyframes spin definitions across components
- Update version to 0.3.29
- Increment package and version.txt to v0.3.28
- Update pmocache schema version from 1 to 2
- Add warning and source_version invalidation when Qobuz playlist track registration is incomplete
- Update Cargo.toml and version.txt to v0.3.27
- Rename Step 3 to Step 4 in control_point.rs for clarity
- Add UI notification on renderer state transition (PlaybackState::Transitioning)
- Update version to 0.3.26 in Cargo.toml and version.txt
- Add custom registry 'pmo' to .cargo/config.toml
- Remove .cargo/ from .gitignore to allow registry config tracking
Add infinite scroll functionality to MediaBrowser component using IntersectionObserver, introduce BrowseState and pagination support (offset/limit) in API and backend, update version to 0.3.24
This commit adds support for AAC audio decoding via the fdk-aac library, including:
- New AAC decoder module (ADTS streaming)
- Integration into the autodetection system
- Support for AAC in transcoding
- Updated version to 0.3.23
- Added necessary dependencies in Cargo.toml and Cargo.lock
- Added tests for AAC decoding
Cette mise à jour permet une reconnexion stable du renderer Web après un reload de page, en conservant l'état audio (URI, volume, lecture en cours).
- Ajout d'un identifiant d'instance stable (UUID) dans le navigateur pour retrouver le même renderer UPnP
- Implémentation d'un mécanisme de synchronisation d'état (StateSync) lors des reconnexions
- Mise à jour du système de sender partagé (SharedSender) pour permettre le remplacement des connexions WebSocket
- Correction des handlers UPnP pour utiliser le nouveau type SharedSender
- Amélioration de la gestion des erreurs d'autoplay dans le moteur audio
- Mise à jour du numéro de version vers 0.3.21
Ajout de la fonctionnalité WebRenderer permettant à chaque navigateur connecté de devenir un MediaRenderer UPnP privé.
- Création du crate pmowebrenderer avec l'architecture complète
- Implémentation des handlers SOAP → WebSocket pour les services AVTransport, RenderingControl et ConnectionManager
- Intégration avec le ControlPoint pour l'enregistrement dynamique des renderers
- Gestion des sessions avec timeout et cleanup automatique
- Support des commandes de transport (play, pause, stop, seek) et du contrôle du volume
- Mise à jour des dépendances dans Cargo.toml et Cargo.lock
- Documentation de l'architecture dans Blackboard/Architecture/webrenderer.md
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
Update version from 0.3.18 to 0.3.19 in Cargo.toml, package-lock.json, and version.txt.
Also update the API endpoint in pmoparadise/src/client.rs from `/get_block` to `/play` and remove the `peer` property from several dependencies in package-lock.json.
Additionally, update the ARCHITECTURE.md documentation to reflect the change in API endpoint.
Version bump from 0.3.17 to 0.3.18
- Updated version in Cargo.toml and version.txt
- Removed unused LiveResponse import in pmoradiofrance
- Added tracing info for stream proxyfication
- Improved Media::best_hifi_stream logic to prioritize AAC over MP3 and never use HLS streams
- Updated comments to reflect new stream priority logic
Correction du bug d'update des covers dans l'interface web
- Création du composable useCoverImage.ts pour centraliser la logique de chargement d'images
- Refactorisation des composants CurrentTrack, MediaItem, QueueItem, RendererCard et ContainerItem pour utiliser le nouveau composable
- Implémentation d'un retry automatique avec backoff exponentiel
- Ajout de cache busting pour forcer le rechargement des images
- Amélioration de la gestion d'état robuste avec détection du cache
Fichiers créés et modifiés :
- pmoapp/webapp/src/composables/useCoverImage.ts
- pmoapp/webapp/src/components/pmocontrol/CurrentTrack.vue
- pmoapp/webapp/src/components/pmocontrol/MediaItem.vue
- pmoapp/webapp/src/components/pmocontrol/QueueItem.vue
- pmoapp/webapp/src/components/pmocontrol/RendererCard.vue
- pmoapp/webapp/src/components/pmocontrol/ContainerItem.vue
- Blackboard/Report/bug_update_cover_webui.md
- Blackboard/Rules.md
- PMOMusic/Cargo.toml
- Cargo.lock
- version.txt
This commit resolves merge conflicts in Cargo.lock, Cargo.toml, and version.txt, updating the version numbers to 0.3.15. It also cleans up unused imports and simplifies the RadioFranceState structure by removing the Arc<RadioFranceStatefulClient> and related initialization logic in pmoserver_impl.rs, and removes the metadata refresh logic from api_rest.rs.
This commit adds the pmoradiofrance module to the build, updates the version to 0.3.14, and enhances the music renderer to fetch track duration from DIDL metadata when the renderer doesn't provide it directly. It also improves metadata caching for Radio France, including dynamic duration calculation and better station name handling.
Cette mise à jour implémente un système de cache de métadonnées avec gestion des TTL pour les données Radio France. Le cache gère les mises à jour automatiques via des tâches de rafraîchissement, et les clients interrogent uniquement le cache pour obtenir des données à jour. Le streaming est amélioré avec une gestion correcte des connexions et des tâches de rafraîchissement qui s'arrêtent automatiquement à la déconnexion du client. Les versions des packages PMOMusic et pmomediaserver sont mises à jour à 0.3.13.
Bump version from 0.3.11 to 0.3.12
- Update Cargo.toml and version.txt to 0.3.12
- Refactor Radio France source registration to share Arc with API
- Enhance API routes to start/stop metadata refresh on stream access
- Add cleanup logic for stream disconnection
- Improve logging for metadata refresh operations
- Update Radio France source methods to be public for external access
Fix the bug where cached images were not displaying in the webapp due to synchronous load events. Added checkImageComplete() function to detect already loaded images from cache and updated all affected components (CurrentTrack, QueueItem, MediaItem, RendererCard) to properly handle cached image loading.
Update version number from 0.3.9 to 0.3.10 in Cargo.toml and version.txt files.
Also, enhance image loading handling in multiple Vue components (ContainerItem, CurrentTrack, MediaItem, QueueItem, ServerDrawer) by:
- Adding ref and watch for tracking image loading states
- Implementing proper load and error handlers
- Using v-show to control image visibility based on loading state
- Adding image state tracking for each item in ServerDrawer
- Improving placeholder display logic
### Modifications principales
- Les métadonnées sont maintenant visibles par défaut à l'ouverture de l'overlay
- Ajout d'une barre de progression interactive dans le panneau des métadonnées (support souris et tactile)
- Style glassmorphism appliqué à l'overlay (fond transparent 35%, blur 30px, bordure subtile)
- Panneau réduit à 70% de largeur pour un look plus élégant
- Fermeture ergonomique sur mobile via swipe down (seuil 100px) avec feedback visuel
- Bouton X conservé pour desktop
- Blocage du pull-to-refresh Android
### Corrections supplémentaires
- Support tactile de la barre de progression principale (hors overlay)
- Utilisation de `100dvh` au lieu de `100vh` pour compatibilité avec les barres de navigation mobiles
- Corrections TypeScript pour les événements tactiles
Fix backend mutex poisoned panic when stopping playback on OpenHome renderer
This commit addresses a panic that occurred when stopping playback on OpenHome renderers, which was caused by:
1. Mutex poisoning from unhandled panics in backend operations
2. A regression revealed after initial fixes, where inconsistent renderer state caused index out of bounds errors
Changes include:
- Added defensive error handling for mutex operations to prevent poisoning
- Implemented bounds-checking for current_index in sync_queue to handle inconsistent renderer states
- Removed redundant clear_queue calls that were causing additional failures
- Improved error tolerance in queue operations
The fix ensures that the backend mutex remains healthy and that inconsistent renderer states are handled gracefully rather than causing panics.
Le transfert de la queue de lecture entre renderers était corrompu car le binding de playlist était réinitialisé, effaçant les items transférés. Correction en transférant directement le binding sans déclencher de rafraîchissement, préservant ainsi le current_index et la position de lecture.
- Fichiers modifiés : pmocontrol/src/control_point.rs
- Version mise à jour : 0.3.7
Correction du bug où l'URL de la cover générée par pmoqobuz était relative au lieu d'être absolue, comme pour le flux audio. Ajout de la conversion de l'URL de la cover en URL absolue dans la fonction adapt_playlist_items_to_qobuz. Version mise à jour de 0.3.5 à 0.3.6.
Cette modification refactorise l'architecture pour que chaque `MusicRenderer` gère son propre thread de surveillance (watcher), au lieu de déléguer le polling au `ControlPoint` centralisé.
- Ajout d'un module `watcher.rs` avec `WatchStrategy`, `WatchedState` et fonctions helper
- Implémentation de `start_watching()` et `stop_watching()` dans `MusicRenderer`
- Centralisation de la gestion du watcher dans le constructeur et les méthodes `has_been_seen_now()`/`mark_as_offline()`
- Suppression du polling central (~140 lignes) dans `control_point.rs`
- Simplification du `registry.rs` avec suppression des appels manuels `start/stop_watching()`
- Correction du bug dans `refresh_device_presence()` pour le traitement offline→online
- Préparation pour le support futur des notifications push (OpenHome, Chromecast)
L'architecture est maintenant plus robuste avec une meilleure encapsulation, cohérence des événements et une gestion automatique du watcher.
Mise à jour de la version dans Cargo.toml et version.txt vers 0.3.3
- Suppression de l'étape d'extraction de version dans le workflow build-push.yaml
- Amélioration de la cible Makefile sync-version pour utiliser un fichier de dépendance
- Ajout de messages de documentation lors du push avec jj
Mise à jour de la version dans PMOMusic/Cargo.toml de 0.3.1 à 0.3.2.
Ajout du fichier version.txt contenant la version 0.3.2.
Mise à jour du Makefile pour synchroniser automatiquement version.txt depuis PMOMusic/Cargo.toml lors de la mise à jour de la version.
Ajout de la cible sync-version dans le Makefile pour permettre une synchronisation manuelle du fichier version.txt.
Mise à jour de la version de PMOMusic de 0.1.0 à 0.3.1
- Correction de l'indentation dans le fichier de workflow
- Ajout d'une étape pour extraire la version depuis Cargo.toml
- Ajout d'une cible Makefile pour incrémenter automatiquement le numéro de version patch
- Ajout de cibles Makefile pour gérer les commits avec jj (jeff) : bump-version, jjnew, jjpush, jjfetch
- Suppression du fichier version.txt inutile