mirror of
https://github.com/bookorbit/bookorbit.git
synced 2026-11-03 00:11:37 -06:00
33952322f2
* feat(settings): add SABnzbd download client Support API-key authentication, NZB uploads, queue monitoring, reconciliation, and completed-download imports through SABnzbd. Expose the client in request settings and validate its required category and credentials. Ref #1312 * feat(settings): add Prowlarr indexer management Manage synchronized torrent and Usenet sources through a shared Prowlarr connection. Ref #1312 * fix(settings): correct SABnzbd adoption and managed search retries Address four defects found in review of the Prowlarr and SABnzbd work. SABnzbd keeps a failed job in its history until somebody clears it, and BookOrbit removes a client download only on an explicit action. Because the client key is a stable digest, re-grabbing the same release adopted that dead history entry, never uploaded the NZB, and failed instantly and forever. Adopt only an entry that is not already failed; a queue entry still wins, so a fresh upload reports correctly. The category-expansion retry reused the title-and-author query, making it strictly narrower on text than the title-only attempt that had just returned nothing. A release matching only a title-only search with expanded categories was therefore unreachable. Drop the author there so each rung of the ladder is genuinely broader than the last. Changing the download client type through the create form's select bypassed the picker's handler, so a username typed for qBittorrent was still sent when SABnzbd was chosen. The server stores it, the API-key form hides it, and it can no longer be edited away. Watch the credential kind instead, so both controls clear it. Finally, a swallowed managed-release refresh failure left nothing behind at all; give it its own fail log while still reporting the original refusal to the caller. * fix(requests): cast managed search health flags to boolean The bulk search-health update bound each case branch as an untyped parameter, so Postgres could not resolve it against the boolean column. Cast every branch explicitly and assert the cast in the repository test. * fix(requests): close review gaps in Prowlarr and SABnzbd support Inventory the eight indexer-manager routes so the authorization matrix probes them, resolve a managed indexer without reading its manager's whole source list, keep an unreadable credential out of the test-failed mapping, translate manager error codes, and show per-source search health. Documents Prowlarr connections in docs/BOOK_REQUESTS.md. * i18n(client): keep the retired sources empty-state key Dropping bodyOneWay from en.json forced pruning it from five Crowdin target catalogs, which the localization policy check rejects outright. Leave the now-unused key in place; nothing validates unreferenced English source keys, so Crowdin can retire it on its own schedule. * db: regenerate the SABnzbd and Prowlarr migration onto main Rebasing collided with main's own 0091 and 0092, which left this branch's two migrations on disk with no journal entry referencing them. Drop both and regenerate a single migration on main's lineage; the three affected tables are schema-identical to the pre-rebase snapshot.
55 lines
1.5 KiB
JSON
55 lines
1.5 KiB
JSON
{
|
|
"totalRoutes": 606,
|
|
"byPermission": {
|
|
"(none)": 259,
|
|
"Permission.ManageMetadataConfig": 34,
|
|
"Permission.EmailSend": 30,
|
|
"Permission.LibraryEditMetadata": 35,
|
|
"Permission.BookDockAccess": 17,
|
|
"Permission.ManageAppSettings": 57,
|
|
"Permission.ManageLibraries": 22,
|
|
"Permission.ManageUsers": 13,
|
|
"Permission.ManageEmail": 8,
|
|
"Permission.KoboSync": 7,
|
|
"Permission.NotificationAccess": 6,
|
|
"Permission.DemoRestricted": 6,
|
|
"Permission.KoreaderSync": 8,
|
|
"Permission.OpdsAccess": 4,
|
|
"Permission.ViewAuditLog": 1,
|
|
"Permission.ViewUserActivity": 6,
|
|
"Permission.LibraryDeleteBooks": 14,
|
|
"Permission.LibraryDownload": 4,
|
|
"Permission.LibraryUpload": 2,
|
|
"Permission.ManageBookDock": 3,
|
|
"Permission.ManageIcons": 1,
|
|
"Permission.HardcoverSync": 1,
|
|
"Permission.ReadwiseSync": 1,
|
|
"Permission.StorygraphSync": 1,
|
|
"Permission.BookRequestAccess": 25,
|
|
"Permission.ManageBookRequests": 20,
|
|
"Permission.BookRequestSelfFulfill": 11,
|
|
"Permission.PodcastManageFeeds": 16,
|
|
"Permission.PodcastManageRetention": 1,
|
|
"Permission.PodcastEditMetadata": 5,
|
|
"Permission.PodcastPurge": 5,
|
|
"Permission.PodcastDownload": 4
|
|
},
|
|
"byLibraryAccess": {
|
|
"'viewer'": 9,
|
|
"'editor'": 15,
|
|
"'owner'": 4
|
|
},
|
|
"routeChunks": [
|
|
"routes-01.json",
|
|
"routes-02.json",
|
|
"routes-03.json",
|
|
"routes-04.json",
|
|
"routes-05.json",
|
|
"routes-06.json",
|
|
"routes-07.json",
|
|
"routes-08.json",
|
|
"routes-09.json",
|
|
"routes-10.json"
|
|
]
|
|
}
|