github drallgood/audiobookshelf-hardcover-sync v3.5.0
Release v3.5.0

latest releases: v4.0.0, v3.6.0
3 months ago

🐳 Docker Image

Pull the Docker image:

docker pull ghcr.io/drallgood/audiobookshelf-hardcover-sync:v3.5.0

Or use the latest tag for the most recent release:

docker pull ghcr.io/drallgood/audiobookshelf-hardcover-sync:latest

🔍 Image Details

Changelog

[v3.5.0] - 2026-07-30

Added

  • ASIN Lookup via Book Mappings: ASIN matching now also searches edition book_mappings platform entries (Audible, Amazon) in addition to the direct edition.asin field. Uses _eq operator for performance and respects the configured Audnexus region for locale suffix stripping (:us, :uk, etc.). The GraphQL search query and all five edition response parsers were extended to extract and fall back to book_mappings ASINs.

Fixed

  • Reread Detection After Restart: Fixed handleInProgressBook silently skipping reread creation when a user relistens to a finished audiobook. Two root causes addressed (#156):
    • State written before Hardcover mutation: Sync state was updated with current progress before the Hardcover API call, causing permanent "no change" skipping if the subsequent read creation was skipped. State is now only persisted after a successful Hardcover mutation.
    • Broken reread detection via stale startedAt: Audiobookshelf does not reset startedAt when a finished book is restarted — the media progress retains the original first-read date. The previous detection logic relied on progressLooksReset (fails at >90% progress) and absStartedAfterLatestFinished (always false with stale startedAt), causing all rereads to be silently dropped. The redundant detection gate has been removed; the existing logic at the read-status selection layer already correctly identifies rereads by checking for finished-only read history with active ABS progress.
  • Duplicate Reads on New Books: Fixed Hardcover auto-creating blank read rows as a side effect of status changes. The create path now inserts the read first, then sets the book status to IN_PROGRESS. Previously the status was set first, which triggered Hardcover to auto-create a blank row — the subsequent sync couldn't find it (edition mismatch), creating a duplicate. Also removed the second-chance fetch from the create path and retained the cross-run idempotency guard to prevent duplicates from state mismatches.
  • Hardcover API Compatibility: Removed unsupported reading_format_id field from UpdateUserBookRead GraphQL mutation and added reading_format_id to DatesReadInput, fixing Hardcover API rejections. Added force resync for stalled progress_seconds entries that were missing from in-progress reads.
  • Edition Update on Mismatch: User book edition is now updated when the matched Hardcover edition differs from the existing user book edition, keeping edition links accurate across syncs.
  • OIDC Callback Fallback: Fixed OIDC callback to fall back by provider type when the provider name doesn't match the configured provider, improving compatibility with identity providers that use variant naming.

Don't miss a new audiobookshelf-hardcover-sync release

NewReleases is sending notifications on new releases.