-
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
-