Skip to content

feat: import books from watched device folders - #109

Merged
Eoic merged 2 commits into
developmentfrom
feature/watched-folders
Nov 1, 2026
Merged

Eoic merged 2 commits into
developmentfrom
feature/watched-folders

Conversation

@Eoic

@Eoic Eoic commented Nov 1, 2026 •

Copy link
Copy Markdown
Member

Issue and requirements

Closes #108. Implements the device-folder portion of FR-2_6. Documentation: PapyrusReader/docs#90.

Summary

Users can connect a folder from Library, preview its contents, and import local book copies while offline. Later scans add new files without replacing existing books or modifying their sources.

  • Add profile-local connections, recoverable import jobs, content-hash duplicate detection, deletion exclusions and explicit changed-file review.
  • Support native directory access and browser handles/fallbacks, lifecycle scans, local media recovery and normal account uploads.
  • Add Library folder management, compact setup/details/edit sheets, source-folder advanced filters and stable progress layouts.
  • Package web dependencies for offline reopening. Fix Apple build settings and Linux linker setup, and run folder tests in Windows/Linux packaging CI.

Testing

  • Clean checkout with the committed reader pin and no override: locked dependency resolution, analysis and 152 focused tests passed.
  • Previous workspace review: full client suite (2,018 passed, 19 skipped), client quality checks, Node/browser tests and offline-packaging tests passed.
  • All 76 folder tests passed in Ubuntu 24.04 x64. Web, Android, macOS, iOS simulator, unsigned iOS release and Linux release builds passed.
  • The complete local two-client sync harness passed, including offline folder import, restart, upload, deletion and account isolation.
  • Workflow lint, shell checks and patch whitespace checks passed.

The workspace platform builds and live harness used the existing local reader override. The clean-checkout tests above and CI validate the committed dependency.

UI evidence

Responsive widget tests cover folder tables, setup/details/edit sheets, source filters, stable status/progress geometry, large text and e-ink. From app/, generate review captures with:

flutter test test/folders/watched_folders_page_test.dart --dart-define=FOLDER_DESIGN_CAPTURE=true

Captures are written to ignored build/folder-review/ within the app directory. No generated captures are committed.

Compatibility and migration

No new server endpoint, replicated field or server migration. Folder state remains in a separate profile-local database and guest libraries stay local. Existing imports use their current behavior unless a caller opts into a preallocated book ID.

The live test database required the existing b9c0d1e2f345 migration. Apple dependency minimums now match the app's existing iOS 15/macOS 12 requirements. Debug simulator builds use the host architecture.

Notes

Windows native execution is pending CI. Physical picker, revoked-permission, bookmark, cloud-placeholder and removable-drive acceptance remain release checks in the documentation. Browser headless acceptance used real persisted handles with a substituted picker and does not establish OS-picker acceptance.

Checklist

  • Branch, commit and title follow repository conventions.
  • Changes are scoped to the feature and supporting build fixes.
  • Relevant tests are added or updated.
  • Local formatting, analysis and focused tests pass.
  • Documentation, UI validation instructions and migration notes are included.
  • No credentials, personal data, copyrighted fixtures or unrelated generated files are included.
  • Branch is up to date with development.

Refs #108. Add profile-local folder import recovery, native and browser access, Library management, and offline web packaging for FR-2_6.
Copilot AI balanced review requested due to automatic review settings November 1, 2026 01:14

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 insufficient remaining quota. Try requesting a review at a lower effort level.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-01T01:16:05.527604Z a8b09fe PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a8b09fe7e6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/lib/folders/watched_folders.dart Resolved
Refs #108. Keep transient folder selections eligible for scheduled scans until file stability checks finish. Cover recent and unknown timestamps, future dates, and files changing during reads.
@Eoic
Eoic enabled auto-merge November 1, 2026 01:31
@Eoic
Eoic merged commit ab3653b into development Nov 1, 2026
7 checks passed
@Eoic
Eoic deleted the feature/watched-folders branch November 1, 2026 01:40
@EARL146

EARL146 commented Nov 1, 2026

Copy link
Copy Markdown

feat: import books from watched device folders feature was successfully merged into the development branch.

  • Merge commit: ab3653b
  • 7 CI checks: Passed
  • Auto-merge: Successful
  • Feature branch: Deleted
  • Documentation PR: Merged

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.

Implement offline-first watched device folders (FR-2_6)

3 participants