github kikootwo/ReadMeABook v1.2.13

3 hours ago

🎉 Release v1.2.13

If you use "Auto-tag audio files with metadata" (on by default): M4B files with an embedded cover imported since v1.2.4 may have broken chapters. This release fixes tagging for new imports but doesn't repair books already in your library. To check a file, ffprobe -v error -select_streams d -show_entries stream=nb_frames -of csv=p=0 book.m4b should print the book's chapter count. To repair one, delete the book's audio file from the library, then import the original again with Manual Import, or request the book again once RMAB shows it as removed.

Cancelling a request now removes its download. A partly downloaded torrent is removed from your client right away, even on an indexer with a seed time, so a strict private tracker may count it. A finished download stays to seed until its seed time is met. Scripts that called DELETE /api/requests/:id should cancel with POST /api/requests/:id/cancel; the old route is gone.

Features:

  • ✅ Audible sub-categories such as Horror can be picked for a home section
    • #309
    • #499
    • the home page's Customize picker lists each category's sub-categories (such as Horror under Literature & Fiction) under their parent, with a filter. Categories already on your home page stay in the list, marked "Added".
    • the nightly refresh updates at most 30 categories per run, oldest first, so with more than 30 each one is refreshed every few nights
  • ✅ an admin setting hides other-language Audible editions from search, series and home rows
    • #259
    • #527
    • Thanks https://github.com/Eyji !
    • under the Audible region in Admin Settings > Library, off by default. It also applies to watched series, BookDate and shelf sync; books with no language listed are kept.
  • ✅ Apprise can send each request's notifications to the user who made it
    • #174
    • #547
    • in Config Key mode, put {user} in the Tag field (such as user-{user}) and list each user's URLs, such as a mailto:// address, under their tag in your Apprise config. Names become lowercase with - for spaces and punctuation, so Jane Doe is user-jane-doe, and names that come out the same share a tag.
    • events are chosen per backend: a second Apprise backend with the same Config Key and only Request Approved and Request Available tells each user about their own requests. A Tag without {user} is sent as before.
  • ✅ cancelling a request stops its download and removes what it fetched
    • #228
    • #554
    • Thanks https://github.com/ZillaGit104 !
    • a partial torrent or usenet download is removed unless another request still uses it; a finished download stays to seed, and the seeding cleanup removes it once its seed time is met (see the note at the top)
    • API tokens can cancel a request with POST /api/requests/:id/cancel
  • ✅ {primaryAuthor} path template variable for the first author
    • #501
    • Thanks https://github.com/Westuss !
    • the first entry of the author list (split on , ; &), so co-written and translated books share their first author's folder. {author} and existing templates are unchanged.
  • ✅ {seriesPart:00} and wider formats pad the series part in path templates
    • #250
    • #502
    • {seriesPart:00}, :000 and :0000 pad a numeric part or a range (1 becomes 01, 1-3 becomes 01-03) in folder and rename templates
  • ✅ admin Request Management can be filtered to audiobook or ebook requests
  • ✅ the admin Settings page keeps its tab in the address (?tab=)
    • #534
    • Thanks https://github.com/NichCodes !
    • a reload stays on the open tab, back and forward move between tabs, and a link such as /admin/settings?tab=paths opens that tab

Fixes:

  • ✅ deleting an audiobook request removes only that request's audio, not everything in the book folder

    • #526
    • #551
    • the book's ebook, your own files and any subfolders stay, and the admin's toast lists what was kept. The cover and system leftovers (.DS_Store, @eaDir, metadata.json and the like) go only when nothing else is left, and then the folder goes too.
    • a delivered ebook request of the same book now stays when its audiobook request is deleted, and is linked again when the book is requested and imported again
  • ✅ deleting an ebook request removes only the ebook file that request placed

    • #497
    • #532
    • your own ebook in the same folder is never touched, and a request that never downloaded anything removes nothing
    • ebook requests imported before this version keep their files when deleted; the delete message says so, and you can remove the file by hand
  • ✅ metadata tagging keeps the chapters of M4B files with an embedded cover

    • #511
    • #529
    • #524
    • these files are tagged as before. If a file's chapter table would still change, it is imported untagged with its original chapters, and the import log says so.
    • books already imported with broken chapters aren't repaired (see the note at the top)
  • ✅ an intro no longer shifts embedded "Chapter N" chapter names in a merged book

    • #509
    • #531
    • Thanks https://github.com/mvanhorn !
    • files tagged "Intro", "Chapter 1", "Chapter 2" keep those names. Sets whose tags restart at "Chapter 1" on each disc keep position numbering as before.
  • ✅ automatic search skips Audible DRM releases (.aa, .aax, .aaxc)

    • #528
    • Thanks https://github.com/NichCodes !
    • a release is skipped when its title marks the file itself as DRM, unless it also names a playable format. Interactive search still lists them.
  • ✅ a failed indexer search is reported instead of reading as "No torrents found"

    • #522
    • #543
    • the request message says how many indexer searches failed (No torrents/nzbs found (2 of 5 indexer searches failed; see System Logs)), and each failed automatic search is in System Logs. Interactive search shows a notice with the error above the results, or in place of "No results found" when every search failed.
    • results from the searches that worked are used as before
  • ✅ Prowlarr download links work when Prowlarr is behind a reverse proxy that rewrites the Host header

    • #298
    • #548
    • Prowlarr builds its links from the Host it received, so they named an address RMAB couldn't reach: interactive picks were refused and automatic grabs failed with "Failed to add torrent to qBittorrent". Those links are now fetched from your configured Prowlarr URL, and retrying a failed download does the same.
  • ✅ qBittorrent: a finished download left in the incomplete folder is imported after 30 seconds, not about 5 minutes

    • #520
    • #523
    • a slowdown since v1.2.12, seen when qBittorrent can't move a finished download to RMAB's download directory. The log now has a warning that names both folders and says to check that qBittorrent can write to that directory.
  • ✅ with Audiobookshelf, a downloaded request becomes available even when Audiobookshelf matched the book to a different ASIN

    • #284
    • #495
    • the request is linked to the Audiobookshelf item that holds the folder RMAB delivered, and it keeps the book you asked for. Plex still matches by ASIN.
    • a library scan and a recently-added check that match the same request at once send one notification, not two
  • ✅ a user can no longer search or pick a release for a request an admin denied

    • #552
    • admins still can
  • ✅ a deleted user's shelves and watched lists stop creating requests

    • #504
    • #521
    • their Goodreads and Hardcover shelves and watched series and authors no longer sync, and the nightly ebook backfill no longer adds ebooks for them. Their shelves, watches and existing requests are kept.
  • ✅ a multi-file request download closes its files when cancelled, and fails instead of stalling on a file it can't read

    • #490
    • #498
    • a slow download no longer makes the server hold most of the zip in memory
  • ✅ a single-file request download reads the file only as fast as the client takes it

    • #500
    • #533
    • Thanks https://github.com/pintu544 !
    • a browser or download manager that pauses or reads slowly no longer makes the server read the whole file into memory, the same as the multi-file zip above
  • ✅ a home section keeps its books when a nightly refresh fetches none

    • #535
    • Thanks https://github.com/topgunffx1 !
    • one night of Audible storefront errors could leave a section showing "No audiobooks yet" until a later good night. A category section whose storefront page fails now falls back to Audible's catalog (bestsellers first), so its order can differ a little until the next good refresh.
  • ✅ Goodreads shelves say Goodreads no longer serves shelf RSS feeds, instead of failing quietly

    • #514
    • #538
    • adding a Goodreads shelf says so, and every saved Goodreads shelf shows a notice that it has stopped syncing. The sync logs one warning per run instead of an error per shelf.
    • saved shelves are kept in case Goodreads brings the feeds back. Hardcover lists are unchanged.
  • ✅ BookDate's OpenAI model list shows current GPT models

    • #530
    • Thanks https://github.com/DG-za !
    • GPT-4 and later chat models are listed; audio, realtime, transcribe, TTS, search, codex and pro variants are left out
  • ✅ a FlareSolverr or Anna's Archive URL ending in a slash no longer doubles the slash

    • #536
    • Thanks https://github.com/NichCodes !
    • http://flaresolverr:8191/ now reaches /v1, not //v1, for ebook downloads and the connection test. Saved settings are unchanged.
  • ✅ the bundled PostgreSQL shuts down cleanly when the container stops, restarts or updates

    • #541
    • Thanks https://github.com/drwho725 !
    • the next start no longer runs crash recovery ("database system was not properly shut down"). A normal stop takes 1 to 2 seconds, inside Docker's default 10, so the new image is all you need; the example compose files also set stop_grace_period: 90s for slow storage.
    • the first start after this update still recovers once, since the previous version did that stop
  • ✅ modals dim the page behind them instead of covering it in solid black

    • #539
    • #544
    • the admin request actions menu's outline is faint as intended, too
  • ✅ toasts have a solid background in dark mode, so the page no longer shows through the message

  • ✅ follow-redirects 1.16.2 clears a Dependabot alert; RMAB never sets the option the advisory covers, so it wasn't affected

    Upgrade:

    docker pull ghcr.io/kikootwo/readmeabook:latest
    docker compose down
    docker compose up -d

What's Changed

  • fix: a multi-file request download streams as it is read and closes its files when cancelled by @kikootwo in #498
  • fix: a deleted user's shelves and watched lists stop creating requests by @kikootwo in #521
  • fix: a finished qBittorrent download left in the incomplete folder waits 30 s, not about 5 minutes by @kikootwo in #523
  • feat: Audible sub-categories such as Horror can be picked for a home section by @kikootwo in #499
  • fix: a downloaded request links to the Audiobookshelf item that holds its folder, even when the ASIN differs by @kikootwo in #495
  • fix: an M4B whose chapters tagging would break is imported untagged, with its chapters by @kikootwo in #524
  • feat: {primaryAuthor} path template variable for the first author by @kikootwo in #501
  • feat: an admin setting hides other-language Audible editions from search, series and home rows by @kikootwo in #527
  • feat: {seriesPart:00} and wider formats pad the series part in path templates by @kikootwo in #502
  • fix: automatic search skips Audible DRM releases (.aa, .aax, .aaxc) by @kikootwo in #528
  • fix: an intro no longer shifts embedded "Chapter N" chapter names in a merged book by @kikootwo in #531
  • fix: BookDate's OpenAI model list shows current GPT models by @kikootwo in #530
  • fix: an M4B with a cover keeps every chapter when it is tagged or merged by @kikootwo in #529
  • fix: a single-file download reads the file only as fast as the client reads it by @kikootwo in #533
  • fix: a home section keeps its books when a nightly refresh fetches none, and category refresh falls back to the catalog API by @kikootwo in #535
  • fix: a FlareSolverr or Anna's Archive URL with a trailing slash no longer doubles the slash by @kikootwo in #536
  • feat: the admin Settings page keeps its tab in the address (?tab=) by @kikootwo in #534
  • fix: an ebook request delete removes only the ebook file that request placed by @kikootwo in #532
  • feat: admin Request Management can be filtered to audiobook or ebook requests by @kikootwo in #537
  • fix: Goodreads shelves say the shelf RSS feeds are gone instead of failing quietly by @kikootwo in #538
  • fix: the bundled PostgreSQL shuts down cleanly when the container stops by @kikootwo in #541
  • fix: a failed indexer search is reported, not shown as "No torrents found" by @kikootwo in #543
  • fix: modals dim the page behind them instead of covering it in black by @kikootwo in #544
  • chore(deps): bump the npm-minor-patch group with 3 updates by @dependabot[bot] in #516
  • feat: Apprise can send each request's notifications to the user who made it by @kikootwo in #547
  • fix: Prowlarr download links work when Prowlarr is behind a reverse proxy by @kikootwo in #548
  • fix: toasts are solid in dark mode, so the page doesn't show through by @kikootwo in #549
  • fix: a denied request stays denied, and RMAB records requests completed without approval by @kikootwo in #552
  • fix: an audiobook request delete removes only the files that request placed by @kikootwo in #551
  • chore(deps): bump follow-redirects to 1.16.2 by @kikootwo in #553
  • fix: cancelling a request stops its download and removes what it fetched by @kikootwo in #554
  • chore: release v1.2.13 by @kikootwo in #555

Full Changelog: v1.2.12...v1.2.13

Don't miss a new ReadMeABook release

NewReleases is sending notifications on new releases.