Skip to content

Add OPDS catalogs with feed caching and persistent import tracking - #25

Merged
Eoic merged 6 commits into
masterfrom
feature/opds-support
Sep 22, 2026
Merged

Eoic merged 6 commits into
masterfrom
feature/opds-support

Conversation

@Eoic

@Eoic Eoic commented Sep 22, 2026

Copy link
Copy Markdown
Member

Ticket

User-requested OPDS catalog support and book-details refinements.

Summary

Readers can browse OPDS catalogs, search and paginate through feeds, choose a book format, and import books through the backend relay. Catalogs remain usable without signing in, and successful imports stay linked to their library books across restarts.

  • Add OPDS 1/2 parsing, catalog and credential management, routed publication details, download progress, cancellation, retry, and mobile swipe actions.
  • Cache feeds and covers by account and catalog, show saved feeds during revalidation, and retain usable content when offline. Catalog, credential, and account changes invalidate the appropriate cached state.
  • Persist exact publication/acquisition-to-library mappings, offer Open book for existing imports, and update ownership after library deletion.
  • Unify catalog and library details: mobile app bars and sticky tabs, cover placeholders, buttons, metadata sections, compact progress, and aligned tab content. Refresh feedback stays inside the refresh button without shifting the list.
  • Refine sheets, pagination, navigation counts, and browser history; prevent duplicate web engine initialization after a terminal hot restart.

Testing

From app/:

  • flutter test --no-pub --reporter expanded: 1,371 passed, 19 skipped.
  • dart format --output=none --set-exit-if-changed .: 431 files checked, no changes.
  • flutter analyze --no-pub: no issues.
  • node --test test/web/flutter_bootstrap_test.cjs: 4 passed.
  • flutter build web --no-pub: passed.

Regression coverage includes account isolation, stale async operations, cache invalidation, persistent ownership, route history, mobile tab pinning, and stable list/grid positions during refresh.

UI evidence

Reviewed generated screenshots from test/opds/layout_test.dart for mobile and desktop layouts, dark/light/e-ink themes, and enlarged text. Captures are generated locally under app/build/catalog-review/ and are not committed.

Compatibility and migration

Requires the anonymous OPDS relay already on the server's default branch: PapyrusReader/server@bfc4fbc.

No database migration is required. Feed caching and import provenance are local and scoped to the active account/catalog. Existing library books without OPDS provenance are not matched by title or author.

Notes

Review docs/opds-support.md for supported acquisition methods, relay behavior, caching, and ownership matching. Unsupported acquisition methods remain visible in the format sheet but cannot be imported on the current device.

Checklist

  • The branch, commits, and pull request title follow the repository conventions.
  • The change is complete and limited to the ticket's scope.
  • Relevant tests have been added or updated.
  • Formatting, analysis, and tests pass.
  • Documentation, UI evidence, and migration notes are included where relevant.
  • No credentials, personal data, copyrighted fixtures, or unrelated generated files are included.
  • The branch is up to date with its target branch.

Copilot AI lite review requested due to automatic review settings September 22, 2026 22:10

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Eoic Eoic self-assigned this Sep 22, 2026
@Eoic
Eoic merged commit ffc8140 into master Sep 22, 2026
1 check passed
@Eoic
Eoic deleted the feature/opds-support branch September 22, 2026 22:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants