github new-usemame/Calibre-Web-NextGen v4.0.56

latest releases: v4.0.146, v4.0.145, v4.0.144...
23 days ago

v4.0.56 — OPDS overhaul + drag-and-drop book merge

Two coordinated improvements landed this release: a fix for anonymous OPDS clients getting English-only catalogs, the long-requested OPDS shelf-visibility filter, and a community contribution that adds drag-and-drop book merge with per-format conflict resolution.

docker pull ghcr.io/new-usemame/calibre-web-nextgen:v4.0.56
docker pull ghcr.io/new-usemame/calibre-web-nextgen:latest

Fixes (user-facing)

  • OPDS locale resolver for anonymous clients (closes #160, continuation of #121). Clients that don't send Accept-Language (Readest, KOReader, some Kobo readers) no longer get English-only catalogs. New precedence chain: ?lang=xx URL override → user.locale → Accept-Language → new operator-tunable OPDS Default Locale for Anonymous Clients admin setting → en. The new setting is scoped to /opds paths so it doesn't affect the web UI. Thanks @droM4X for the careful repro + four-quadrant test specification.

  • Per-user OPDS shelf visibility filter (closes #153, backport of CWA #1258 + #1259 + #1260). Mirrors the existing Kobo-sync shelf filter on OPDS. Toggle "Only expose selected shelves to OPDS" on your user profile, then per-shelf check "Expose this shelf in my OPDS feed". Magic shelves get the same treatment. 16 upstream regression tests imported and pass against the cherry-picked state. Thanks @jgoguen for the original CWA stack.

Features

  • Drag-and-drop book merge with per-format conflict resolution (PR #161, community contribution from @Amjad50). Drag one book cover onto another in the grid to merge their formats; the dragged book is the source (deleted after merge), the drop target is the keeper. When both books share a format, a modal surfaces per-format radios (Keep existing / Replace with source). Gated behind role_edit() server-side and client-side — view-only users never see the surface. Thanks @Amjad50.

Verification

Live-verified end-to-end on cwn-local Docker:

  • All four OPDS quadrants (anon-on/off × creds valid/invalid) return the correct HTTP status + catalog content
  • ?lang=de / ?lang=hu / ?lang=zzzz per-request overrides exercise the resolver
  • Hungarian / German / French rendering via Accept-Language verified
  • OPDS shelf exposure: 2 public shelves → flip opds_only_shelves_sync=1 → 0 shelves; insert exposure row → exactly one shelf surfaces
  • Drag-merge end-to-end with Playwright: single-conflict modal, two-conflict modal, replace-confirm flow, viewer-role blocked at endpoint (403)

CHANGES rows

See CHANGES-vs-upstream.md for the per-PR detail, including the conflict-resolution decisions for the OPDS shelf-filter backport (preserves allow_show_hidden from #64 and the series-outerjoin fix from #38).

Don't miss a new Calibre-Web-NextGen release

NewReleases is sending notifications on new releases.