feat(book-requests): add per-indexer seed goals

Add configurable seed ratio and seed time goals to request indexers, supporting both static goals and tracker-advertised ratio/seed-time limits via torznab attributes. Enforce indexer-specific seed policy during request fulfillment and display active seed targets in the request seed panel.

Closes #1360
This commit is contained in:
neon
2026-09-13 17:40:13 +00:00
parent 8f1215d331
commit 3bb33b615c
35 changed files with 19912 additions and 51 deletions
+31
View File
@@ -86,6 +86,24 @@ Two health facts are shown per row, and they answer different questions:
refuse every search, and the badge counts consecutive failures so one blip reads differently
from a source that has been broken for a week.
### Per-indexer seed goals
Torrent sources can set a manual seed ratio and total seed time. Each manual field is independent.
Leaving one blank means inheritance; zero and negative values are not special modes. **Apply tracker
seed goals** controls only whether a valid goal reported by Torznab or a torrent plugin fills a
blank manual field. Turning it off does not disable manual values and does not request unlimited
seeding.
For ratio, BookOrbit uses the manual source value, then the tracker value when tracker fallback is
enabled, then omits the value so the download client uses its own default. Seed time follows the
same order: manual source value, tracker value when tracker fallback is enabled, then the download
client's default.
The policy is read when a new grab attempt starts, so a saved edit applies even when BookOrbit is
reusing recently inspected torrent bytes. It applies only to releases selected from that configured
source. A pasted magnet or uploaded torrent file has no indexer policy. Changes do not reconfigure
torrents already in a client.
## Download clients
Settings > System > Requests > Download clients. qBittorrent, Transmission and Deluge accept
@@ -119,6 +137,19 @@ to copying it and the book uses space twice while the original keeps seeding.
BookOrbit never stops a seed on its own. Removing a client-managed download is an explicit action
with its own confirmation, and removing one that is still working also fails the request.
qBittorrent accepts a per-torrent ratio and total seeding-time limit through fields documented
since Web API 2.8.1. When both exist, its own stop rules can act when either limit is reached; the
pair is not an AND condition and does not guarantee both tracker minimums. Deluge accepts the ratio
with stop-at-ratio enabled and removal disabled.
Transmission accepts the ratio in a best-effort call after adding the torrent; its idle-time option
is not used as total seed time. A failure in that Transmission policy update leaves the tracked
torrent in place and is logged as a warning.
Client-wide ratio, time, idle, and completion settings still apply. qBittorrent and Deluge can
adopt a duplicate torrent without replacing its existing limits; Transmission attempts to apply
an explicit ratio to an adopted torrent. BookOrbit does not delete and re-add an adopted torrent,
reconcile limits across clients, or run a background seed stopper.
## Automation
Settings > System > Requests > Automation. Everything here is off or unset by default.