v0.16.0
Calibre library import, Settings reorganisation, stalled download detection, and image proxy hardening.
Added
- Calibre library import (#63) — import books, authors, and editions from an existing Calibre
metadata.dbvia Settings → Calibre → Library import. Incremental and idempotent; progress bar with live stats. - Calibre Settings tab — Calibre settings extracted from the General tab into a dedicated tab. Eliminates the duplicate
library_pathfield; single shared path at the top used by both write integration and library import. Adds "Test paths" button for drop-folder mode (validatesmetadata.dbreadable, drop folder writable). - Stalled download detection (#142) — background job detects qBittorrent
stalledDLtorrents and Transmission stopped-with-error states. Automatically marks failed, blocklists the release, and triggers a re-search.
Fixed
- calibredb error messages (#160) — "no such file or directory" now includes the path and explains the binary must be accessible inside the Bindery container, not just on the Docker host.
- Image proxy cache (#138) — sharded cache directories, LRU eviction, and atomic writes prevent corruption on large libraries.
- Calibre import when write mode is off — library import no longer incorrectly gated behind the write-mode toggle.
- Calibre crash recovery — pod restarts between
CreateandSetCalibreIDno longer produce duplicate book rows. - Author sync duplicate constraint — UNIQUE constraint on
books.foreign_idduring concurrent author syncs treated as benign skip. - TOCTOU-safe file copy — importer uses
os.Rootfor directory copy/hardlink to prevent symlink traversal.
Upgrade notes
- Schema: migration
018_calibre_sync.sqladds tables for Calibre library import. Drop-in binary or image replacement is safe.