-
version-0.4.15
StableAll checks were successfulRelease / create-release (push) Successful in 9sreleased this
2026-09-10 21:23:20 +02:00 | 129 commits to main since this release-
Implement progressive media serving with HTTP Range header support (206)
-
Add conditional serving based on item state and download failure handling
-
Integrate progressive flux sharing
-
Enable conditional compilation for media routing and content type resolution
-
Refactor playlist loading to use batch resolution and a persistence layer for metadata
-
Implement batch metadata retrieval and playlist listing with slicing logic to reduce API calls for favorite containers
-
Introduce sliding Time-To-Live (TTL) refresh logic for cache entries
-
Optimize data fetching routines for improved error tolerance and asynchronous efficiency
-
Enhance transaction handling with offloading mechanisms and timing measurements
-
Add test coverage for progressive streaming behavior
-
Update cache configuration settings
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
version-0.4.14
StableAll checks were successfulRelease / create-release (push) Successful in 9sreleased this
2026-09-10 16:47:02 +02:00 | 135 commits to main since this release-
Migrated all cache primary keys to
permanent_idacross data models, APIs, and database schemas (asset,playlist_track,permanent_id_map). -
Introduced centralized
CacheRegistryfor thread-safe global cache management, replacing instance-specific singletons. -
Implemented lazy loading, prefetching, and deferred write/flush mechanisms with configurable cadence and guaranteed shutdown flushing.
-
Added
ExternalResolvertrait and Qobuz integration for permanent ID resolution, including alias handling, fallback logic, and dual metadata separation. -
Optimized playlist persistence with atomic batch operations (
push_set), optional TTL support, and elimination of N+1 read queries. -
Enhanced ingestion lifecycle with
IngestHandle/IngestState, collection deletion logic, auto-identity invariants, and robust cache failure handling. -
Migrated audio streaming functionality to the new
pmostreamingcrate, including dependency pruning and updated tracing targets. -
Implemented architecture-specific SIMD DSP for gain application across 16/24/32-bit formats, ensuring robust saturation and clamping.
-
Added multiroom sink support with pipeline offsets and audio chunk manipulation utilities.
-
Refactored
ResamplingNodefor dynamic channel sizing and added network proxy logic for URL handling. -
Enforced deadlock prevention, proper EOF signaling, and graceful async failure handling across file sources and the pipeline.
-
Implemented CRC-8 frame header validation and refined playlist source metadata retrieval/track boundary emission.
-
Unified media serving under a single
/media/catch-all route with token-based routing for image format/size variants. -
Extended HTTP server with file routing, REST API endpoints, and native file serving capabilities.
-
Introduced foundational event system with explicit
SubscriptionGuardlifecycle management and structured error prefixes. -
Standardized error handling across audio pipeline, cache operations, and server components using typed error types (
pmocache::Result). -
Restructured crate dependencies, moving tests/internal modules to local scope and applying
pub(crate)visibility restrictions. -
Updated
pmoaudio-extwith feature gating, deprecated mechanism removal, and core runtime dependency cleanup. -
Added comprehensive benchmarking suite for cache access patterns and expanded unit/integration test coverage.
-
Automated Dockerfile crate synchronization and bumped version to 0.4.13.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
version-0.4.13
StableAll checks were successfulRelease / create-release (push) Successful in 8sreleased this
2026-09-05 07:35:55 +02:00 | 175 commits to main since this release- Added script to auto-generate Dockerfile
COPYstatements fromCargo.tomlworkspace members - Updated release tooling to execute the automation script during builds
- Synchronized version across
version.txtandPMOMusic/Cargo.toml
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Added script to auto-generate Dockerfile
-
version-0.4.12
StableAll checks were successfulRelease / create-release (push) Successful in 10sreleased this
2026-09-05 00:11:09 +02:00 | 177 commits to main since this release-
Migrate all database access to async
pmodbbackend, replacing synchronousrusqliteacrosspmocache,pmoaudiocache,pmocovers,pmosource,pmoplaylist, andpmoqobuz. -
Introduce unified
PmoDbabstraction with connection pooling, serialized writes, read-only pools, closure-based transactions, and optional non-blocking logging. -
Migrate logging from dedicated threads/environment variables to
tracing-based non-blocking access logging. -
Implement delta-based persistence via content hashing, enabling targeted DB operations (track add/remove, metadata-only upsert, PK swap) and skipping reconciliation when track content is unchanged.
-
Introduce
pmoeventcrate: thread-safe, hierarchical pub/sub event bus with broadcast subscriptions. -
Replace flat subscription map with trie-based topic matching supporting
*and**wildcards for efficient pattern matching and removal. -
Add structured lifecycle events (new, download, eviction, serving) with LRU/TTL eviction support and local in-memory revision tracking for playlist mutations.
-
Implement per-playlist TTL with background eviction and dual SQLite connections with WAL persistence.
-
Add targeted cache invalidation methods (
invalidate_album,invalidate_track,invalidate_album_tracks,invalidate_playlist) and clarify TTL semantics (sliding vs. fixed). -
Introduce
PlaylistHandleas a unified wrapper for albums/playlists, replacing direct data usage with lightweight handles to avoid unnecessary track materialization. -
Enable deferred/lazy track loading: separate metadata-only and track-loading paths, returning
L:<hash>PKs fetched only on first HTTP access. -
Add
PlaylistMetadataAPI for lightweight metadata retrieval without track iteration; exposeReadHandle::new()for directArc<Playlist>cursor creation without ID re-lookup. -
Implement batched playlist head creation (
create_light_playlists_batch) reducing SQLite writes to a single transaction. -
Unify album/playlist materialization via single
materialize_objectalgorithm: one Qobuz API call returns handle immediately, filling remaining tracks in background with duplicate prevention. -
Short-circuit materialization when playlist already cached with matching/newer version; refresh TTLs on cache hits for sliding expiration.
-
Unify artist/album caching into single
artist_catalogentry via/artist/get?extra=albums. -
Centralize cache manager access in
QobuzClientviacm()helper (OnceCell-backed); migrate source to client-layer cache management, removing dead code and direct cache access. -
Remove redundant
album,album_tracks, andplaylistcache collections; optimize batch cache access with bulk SQL operations. -
Separate head writing from index updates: unconditionally write playlist/album heads and
object_metaon resync; update index only when content changes. -
Fix regression where only manually opened favorites appeared and resolve playlist loss for large playlists via improved versioning/existence checks.
-
Replace live Qobuz API calls with cached handles/display-only heads (zero tracks, sliding TTL) for
/favorites/playlistsand grid/search endpoints. -
Return
PlaylistHandles fromget_favorite_albums; fetch metadata asynchronously on demand; distinguish album/playlist handles viais_album(). -
Update webapp dependencies (
vite,vite-plugin-pwa,vue-tsc); addallowScriptsconfig for esbuild/fsevents. -
Add Syncthing
.stignorerules to excludenode_modules,dist,.git,.jj, andtarget/to prevent I/O contention duringnpm install.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
version-0.4.11
StableAll checks were successfulRelease / create-release (push) Successful in 9sreleased this
2026-09-03 01:11:20 +02:00 | 207 commits to main since this release- Implement batch operations for metadata and playlist retrieval using single transactions and
IN-clause queries. - Add batch retrieval and update operations (
retrieve_batch) for albums, tracks, and artists. - Replace per-item database and cache lookups with batch processing to reduce SQL round-trips.
- Improve performance on network filesystems.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Implement batch operations for metadata and playlist retrieval using single transactions and
-
version-0.4.8
StableAll checks were successfulRelease / create-release (push) Successful in 9sreleased this
2026-09-01 22:49:44 +02:00 | 220 commits to main since this releaseQobuz Caching & Persistence
- Migrated
QobuzCacheto a persistent SQLite backend storing JSON payloads with configurable, per-collection TTLs and automatic expiration purging (every 6 hours). - Implemented dual expiration regime: sliding expiration for media metadata, fixed expiration for playlists, searches, and stream URLs.
- Introduced
CacheEntrywrapper with payload data and metadata, supporting optional bundle version parameters for proactive invalidation during bundle rotations. - Added thread-safe bundle version tracking to enforce strict agent interaction rules, propagate response timestamps, and prevent redundant network requests via enriched entity persistence.
Favorites System
- Replaced legacy cache module with an async
FavoriteStorebacked by SQLite for persistent ID storage. - Extended
FavoriteKindenum with aPlaylistvariant; added client methods to fetch, filter by owner ID, and cache playlist favorites. - Unified favorite verification via centralized
is_favorite(kind, id)method. - Added background synchronization (120s TTL) to maintain local indexes without blocking reads.
API & Client Improvements
-
Implemented generic pagination with a reusable
paginatemethod andPaginatedResponse<T>structure, automatically iterating until exhaustion or incomplete retrieval. -
Updated API struct to use
RwLock<AudioFormat>for thread-safe access; refactored client state sharing viaArc. -
Wired cache through mandatory client configuration with dedicated storage directory settings.
-
Added CLI example for exporting favorite albums.
-
Bumped project version from 0.4.6 to 0.4.8 across metadata files and workflow scripts.
-
Enhanced Makefile release loop and improved JSON parsing robustness to prevent downstream failures during tag processing.
-
Added internal documentation outlining cache architecture, development workflow, collection definitions, API behavior, and test requirements.
-
Updated
.gitignoreto preserve new source directories; removed obsolete prompt file and applied minor formatting adjustments.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Migrated
-
version-0.4.7
StableAll checks were successfulRelease / create-release (push) Successful in 9sreleased this
2026-09-01 06:43:42 +02:00 | 231 commits to main since this release-
Enhanced Makefile release loop to query remote Git tags for automatic patch number resolution
-
Added validation that terminates the build if version conflicts persist
-
Introduced
RELEASE=x.y.zenvironment variable to override automatic versioning -
Improved JSON parsing reliability with optional chaining and null-safe fallbacks
-
Added explicit validation for empty tag references to prevent script failures
-
Updated project metadata to v0.4.7 (previously v0.4.6)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
released this
2026-01-16 21:16:03 +01:00 | 521 commits to main since this releaseCette modification refactorise l'architecture pour que chaque
MusicRenderergère son propre thread de surveillance (watcher), au lieu de déléguer le polling auControlPointcentralisé.- Ajout d'un module
watcher.rsavecWatchStrategy,WatchedStateet fonctions helper - Implémentation de
start_watching()etstop_watching()dansMusicRenderer - 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.rsavec suppression des appels manuelsstart/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)
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
- Ajout d'un module
-
released this
2026-01-04 00:10:22 +01:00 | 569 commits to main since this releaseIl s'agit d'un refactoring complet de PMO Control afin d'avoir une couche générique parfaite au-dessus des différentes implémentations des backends:
- UPNP
- OpenHome
- Arylic
- LinkPlay
- Chromecast
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-01-04 00:06:46 +01:00 | 575 commits to main since this releaseDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)