Repository navigation
Find on LibriVox: admins add a LibriVox recording to a books library - #292
Merged
Merged
Conversation
The server's L6-1 routes (GET /admin/librivox/search and /work, POST
/admin/librivox/fetch) and GET /admin/bridge/jobs/{id} get hand-mirrored
types, client methods and hooks, so the player can search LibriVox works
and add a recording through the Bridge's librivox.fetch. A fetch has no
book path, so it is followed by its job id and polled while open
(librivoxJobPollInterval). The refusal codes metadata_off, in_library and
not_book_library join the known codes.
Part of LibriVox L6 (L6-2).
An admin opens it from a books library's menu (beside sort and layout), searches the community metadata's LibriVox works, opens one to see its recordings and adds one to a books library; the server's Bridge downloads it, and each recording row follows its fetch (step, sections, why it stopped, Cancel) until the book is in the library, then offers Open. The page and the menu need an admin, the Bridge online with the librivox feature and community metadata on (librivoxAccess); anyone else, an older server or Bridge, gets a sentence and no request. Strings in all six locales. Part of LibriVox L6 (L6-2).
The gate, the wire, the hooks, how a fetch is followed by its id and the page's layout, so the player stays in step with the console's Library > LibriVox. Part of LibriVox L6 (L6-2).
The page's suites mock the hooks, so nothing held what they send: the reads ask nothing without the page's gate or the server's flag, an Add seeds the job's read and asks the works again on success and refusal, the job read polls while open and stops after a 404 or in the background, a refused cancel reads the job again, and the library lists reached are that library's only. Part of LibriVox L6 (L6-2).
…does The player's generate and read-along strings name it "the Bridge" in every locale; the new page said "your Bridge". Also tests the second ask for the work a moment after a fetch is done. Part of LibriVox L6 (L6-2).
The Books mode wrapped BooksControls in a second row identical to the one it already draws, only to put the admin menu beside sort and layout. The controls now take children and stay the one row. Part of LibriVox L6 (L6-2).
The page carried second copies of what the Bridge status already has: a cancel hook for the same route, the rule for sane progress counts, the waiting, stopping, count and cancel-failed strings (Portuguese had drifted between the two), and a weaker check of the LibriVox page link than the About card's librivoxUrl, which also lower-cases a scheme iOS refuses. storeJob now puts a job about no book at its own read, through storeAnswer, so a poll in flight cannot land over a Cancel's answer, and useCancelBridgeJob serves both. invalidateLibraryLists builds its keys from qk instead of spelling them again. The hooks' allowed parameter was true at every call: the page's gate is its mount, and the conventions now say so. Add's loading reads the mutation, the rule for offering Add again moves to the tested model (offersAdd), the status look and the closed page read from lookups, and the unused search limit and progress type go. Part of LibriVox L6 (L6-2).
BROWSE_PATHS listed Find shows but not its sibling, so opening Find on LibriVox from a library's menu read as leaving the browse section and cleared the scroll memory: going back up to a folder started at the top. Part of LibriVox L6 (L6-2).
The job read is never retried and polls only from an answer, so a first
GET /admin/bridge/jobs/{id} that timed out or answered 500 left its row
on Waiting for the Bridge with no status, Cancel or Add until the work
was reopened. Such a read is now asked again every 60 s; a 404 (the job
is gone) and a refusal (400, 401, 403) still are not.
Part of LibriVox L6 (L6-2).
A finished fetch read the library's books, people and series again but not its folder listings nor the connection's recently added, so Home's rail and a mounted Folders mode missed the new book until the app was resumed. The seriesList key also gets its memberships comment back. Part of LibriVox L6 (L6-2).
A row took the work's open job on every render. While the work asked again had not answered (or that ask failed), it still named the job before, so after an Add the row snapped back from the new job to the failed one: Couldn't add it, with Add again, while the new fetch ran. The work's job is now taken only when the work comes to name another. Part of LibriVox L6 (L6-2).
A search read again that failed (the foreground refresh reads every list again, with no retry) emptied the results, which unmounted the open work and dropped the fetch each of its rows follows. It now keeps what it shows, as the work panel already did. With no network a held read stays pending, so the page's skeleton and the search and work spinners never ended. They follow the offline rule now: OfflineState before the skeleton or spinner, and no Retry that cannot work. The link button also loses a padding class its variant already sets. Part of LibriVox L6 (L6-2).
The entry now states the rules the page follows: a failed first job read is asked again, the page is a browse page, a read with no network is OfflineState, a failed re-read keeps what it shows, the work's job is taken only when the work names another, and a finished fetch reads the folders and recently added too. Part of LibriVox L6 (L6-2).
KodeStar
added a commit
to KodeStar/audiosilo-docs
that referenced
this pull request
Nov 13, 2026
…ots (#303) Docs for LibriVox L6 (v2.7.0 row 14): Add from LibriVox in the console and the player, run by the Bridge. - New User Guide page `admin/librivox` ("Add free books from LibriVox"): what is needed (admin, community metadata on, a paired Bridge with the library mapped writable), console and player steps, what lands on disk, the book arriving matched, cancel and resume, failure reasons, Clear community matches. - New Developer Docs page `bridge/librivox`: the gate, the three `/admin/librivox` routes, the `librivox.fetch` job (params, progress, result, failure codes), the identity rule (a `book_matches` row from the fold, never a first-recording fallback), archive.org-only fetching, placement, staging and resume, `.audiosilo/librivox.json`. - Updated: features, running a Bridge, Bridge jobs, console tour, books, browsing, FAQ, API reference and index, Bridge pairing/jobs, configuration, attachments, scanner, data model, web UI, notifications, player library/routes/state, the cross-repo contract, the documentation mapping table. Also adds `audible.sync` and `audible.import` where two kind lists had missed them. - Screenshots: `admin/librivox.png` and `web-player/find-librivox.png`, captured from the real UI with live community metadata. Pairs with KodeStar/audiosilo-server#378, KodeStar/audiosilo-bridge#68, KodeStar/audiosilo-frontend#292.
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.
LibriVox L6-2 (v2.7.0 row 14, LIBRIVOX-PLAN.md "L6"), the player side of Add from LibriVox.
What:
/find-librivox?connection=&library=, a Library-tab page beside Find shows.librivox.fetchBridge job. The row follows the job by id (steps, sections, park and failure reasons), offers Cancel, then "In your library" with Open. Library lists are re-read when a book lands.librivoxAccess: admin + thebridgeflag +bridge.featureshaslibrivox+metadata. Older servers and non-admins never see the menu, and a pasted URL sends no request. Offline state follows the app's offline rule./admin/librivoxroutes,GET /admin/bridge/jobs/{id}, error codesmetadata_off,in_library,not_book_library. Additive; no change for older servers.Tests: gating, client shapes and error codes, hooks against a fake client (polling, Add, Cancel), the page's states (RNTL), the menu, the route tree.
Reviews: /simplify + /code-review high (Fable 5.2) on the whole branch, fixes applied.
Verified live (web export under the server's /web CSP, server + paired Bridge from the paired branches, live meta, Chrome at 1440 and 390 px): menu opens the page; Johnny Crow's Garden added and followed to "In your library", Open lands on the book, the book shows in Books mode; Cancel mid-download on a 23-section project leaves no staging folder and offers Add again; a listener, metadata off and a stopped Bridge all hide the menu and send no admin request; no console errors or CSP violations on the page.
Needs a device run: the native "..." dropdown, the library Select popover (only shown with two or more books libraries, so not seen live), the LibriVox link on iOS and Android.
Pairs with KodeStar/audiosilo-server#378 (routes, job, fold, console) and KodeStar/audiosilo-bridge#68 (librivox.fetch).