• version-0.4.10 c3c9e0338a

    version-0.4.10
    All checks were successful
    Release / create-release (push) Successful in 9s
    Stable

    eric released this | 210 commits to main since this release

    • Incremental Playlist Fills: Added bounded track passes that return unresolved items, enabling incremental resolution before background batch processing. Active fills are tracked to prevent concurrent duplicate resolutions. Writer flushing now conditionally preserves data for interrupted or incremental completions.

    • Source Caching Infrastructure: Introduced a POST endpoint to trigger object caching per source. Added cache_item method to the source interface with a default stub and CacheStatus return type. Gated the with_cache example behind the cache feature flag.

    • API Circuit Breaker: Enforces exponential backoff (30-second base, 300-second maximum) for consecutive failures. Opens after three network errors or HTTP 403/429 responses, short-circuiting subsequent requests with a CircuitOpen error. Includes a background task polling the bundle version every five minutes.

    • WAL-Mode Concurrency: Replaced the single shared database connection with dedicated read and write connections. Write operations use a dedicated writer; reads use a dedicated reader (writer reused for in-memory databases). All cache and favorite store modules updated to this model.

    • Batch Cache Writes: Replaced per-item cache writes with batch transactions to reduce I/O overhead.

    • Qobuz Track Caching: Implemented eager caching, lazy bounded registration, and batch playlist processing. Standardized metadata and URI references across the Qobuz source implementation.

    • Staleness Tracking: Added SHA-256 fingerprinting to favorite synchronization for conditional staleness tracking. Updated storage methods and sync warmup logic accordingly.

    • Optimized Restart Flow: Refactored async favorites warming to check SQLite before initiating network calls on restarts.

    • Enhanced Logging: Introduced an optional non-blocking debug logging module recording API and database call timings. Added explicit read/write operation distinction in logs.

    • Playlist Cache Kind: Introduced UserPlaylist as a distinct FavoriteKind to differentiate full user playlists (owned + followed) from favorited-only lists. Replaced direct get_user_playlists() calls with cache-aware get_user_playlists_cached(). Favorites sync now refreshes both playlist indices together.

    • Code Cleanup: Refactored replace_favorites_with_hash for efficiency. Adjusted internal visibility, consolidated timing metrics, and standardized source interface defaults.

    Downloads