Skip to content

feature: calibre content server connector - #123

Open
benjitobz wants to merge 3 commits into
Chaptarr:developfrom
benjitobz:feature/calibre-content-server-connector
Open

feature: calibre content server connector#123
benjitobz wants to merge 3 commits into
Chaptarr:developfrom
benjitobz:feature/calibre-content-server-connector

Conversation

@benjitobz

Copy link
Copy Markdown

Description

Adds a Calibre Content Server notification connection that mirrors ebooks from Chaptarr to an external calibre content server. It's deliberately a one-way mirror: Chaptarr pushes books and its own deletions outward, but changes made on the content server are never pulled back, and a book deleted there may be pushed again later. The settings help text states this explicitly, since that asymmetry is the main thing a user needs to understand.

Fixes # — n/a (feature)

Database Migration

NO. Connection settings live in the notification definition's existing JSON settings blob; no schema change.

How was this tested?

Docker (linux/amd64) on an Ubuntu server host, image built with Dockerfile.build. The mirror target was a separate calibre Docker container running its content server, configured as a connection in Chaptarr.

Scenarios ran against the live setup:

  1. Import → push
    Added a book in Chaptarr and let it download; on import it was pushed into the calibre content server.
  2. Book delete → mirrored
    Deleting the book in Chaptarr removed the corresponding record from the content server.
  3. File delete → mirrored
    Deleting the pushed book file in Chaptarr likewise removed it from the content server.
  4. Deletes gated
    With Allow Edits & Deletes disabled, the record was left in place on the content server instead of being removed.
  5. One-way mirror confirmed
    Deleting the book directly in calibre did not remove it from Chaptarr — the book remained tracked, as documented.
  6. Re-push re-adds
    The Re-push action on the book page sent the book back into the content server after it had been removed there.
  7. Re-push is idempotent
    Running Re-push again on a book already present did not create a duplicate record — the existing record was matched and updated.

Screenshots (UI changes only)

image image

@benjitobz
benjitobz force-pushed the feature/calibre-content-server-connector branch from 4d47c8e to dcfa11d Compare September 3, 2026 23:11
Mirror books to a second Calibre content server: push on import, optionally on
library scan pickups, and reflect Chaptarr's own edits and deletions.

The connection is one-way. Deleting a book on the content server is not read
back, and the server that backs a Chaptarr root folder is refused outright,
because Chaptarr manages that library directly and would duplicate into it.
A book the connections missed had no way back short of re-importing it. Add a
resend action on the book page and over a selection in the book editor, driven
by one command that takes a list, so a stale id in a selection cannot abort the
rest of the batch.
Never match empty normalized title forms and require exact normalized
equality before deleting mirror records, replace upgraded formats in place
instead of deleting the whole record, dedupe pushes when both import events
fire for one file, probe write permissions without creating records, only
queue edit re-pushes when a subscribed connector exists and push metadata
only on those, apply tag filtering to library-file notifications, and report
re-push results accurately.
@benjitobz
benjitobz force-pushed the feature/calibre-content-server-connector branch from dcfa11d to ba8175a Compare September 5, 2026 00:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant