feature: calibre content server connector - #123
Open
benjitobz wants to merge 3 commits into
Open
Conversation
benjitobz
force-pushed
the
feature/calibre-content-server-connector
branch
from
September 3, 2026 23:11
4d47c8e to
dcfa11d
Compare
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
force-pushed
the
feature/calibre-content-server-connector
branch
from
September 5, 2026 00:21
dcfa11d to
ba8175a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
Added a book in Chaptarr and let it download; on import it was pushed into the calibre content server.
Deleting the book in Chaptarr removed the corresponding record from the content server.
Deleting the pushed book file in Chaptarr likewise removed it from the content server.
With Allow Edits & Deletes disabled, the record was left in place on the content server instead of being removed.
Deleting the book directly in calibre did not remove it from Chaptarr — the book remained tracked, as documented.
The Re-push action on the book page sent the book back into the content server after it had been removed there.
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)