Skip to content

v1.4.4 - Optimizes Sync, Adds Quick Add Bookmarklet, and Fixes CI - #210

Merged
fboucher merged 30 commits into
mainfrom
v-next
Sep 30, 2026
Merged

fboucher merged 30 commits into
mainfrom
v-next

Conversation

@fboucher

Copy link
Copy Markdown
Owner

This pull request significantly enhances the MAUI application's synchronization capabilities, introduces a new quick-add bookmarklet feature, and resolves a CI workflow issue.

MAUI Application Enhancements

  • Improved Synchronization Performance: Refactors the sync process to use delta-pull for posts, fetching only modified items since the last sync. This dramatically reduces data transfer and processing time.
    • Introduces batch saving and deletion of posts in the local data service for efficiency.
    • Implements concurrency limits for fetching full post details, optimizing network usage.
    • Adds progress throttling to provide smoother UI updates during synchronization.
    • Ensures sync operations run on a background thread to prevent UI blocking.
  • Quick Add Bookmarklet: Introduces a dedicated /quickadd page for rapidly adding new posts.
    • Provides a new bookmarklet in the Settings page, allowing users to quickly save articles directly from their browser.
    • Updates the ExtractPostDetailsAndSave method to return the full Post object, enabling detailed display immediately after extraction.

API Changes

  • Adds a new API endpoint /api/posts/ids to efficiently retrieve all post identifiers from the server. This endpoint is crucial for detecting deleted posts during delta synchronization without fetching full post data.
  • Modifies the ExtractPostDetailsAndSave endpoint to return the extracted Post object upon success.

CI/CD Updates

  • Re-enables the OpenCode Daily Triage workflow by uncommenting its daily schedule, addressing previous timeout and rate limit failures.

Version Updates

  • Bumps the application version to 1.4.4 across all relevant projects.

Tests

  • Adds comprehensive tests for the new /api/posts/ids API endpoint.
  • Includes new Bunit tests for the QuickAdd Blazor component, verifying its functionality and error handling.
  • Adds tests for batch post removal and pending sync flag preservation in the local data service.

Fixes #208, #209, #203, #207, #204, #205

fboucher-os and others added 30 commits August 8, 2026 08:34
…or (issue #92) (#183)

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>
… in blob storage (#185)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>
…d remove ILocalHtmlCache (#186)

* feat: implement async background post content extraction to save HTML in blob storage

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache
…on (#187)

* feat: configure protected Azure Function Parser API and key propagation

* bump: version to 1.4.0

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>
# Conflicts:
#	src/NoteBookmark.BlazorApp.Tests/Tests/PostsTests.cs
#	src/NoteBookmark.BlazorApp/Program.cs
#	src/NoteBookmark.SharedUI/Components/Pages/Posts.razor
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…controls (#192)

* chore: bump version to 1.4.2

* feat: show detailed sync progress messages and progress bar on Posts page

* feat: add back button and text size slider at both top and bottom of reader page
Co-authored-by: fboucher-os <fboucheros+github@gmail.com>
* feat: add MAUI storage tab for offline posts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: refine MAUI storage controls

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: highlight storage actions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… workflow (#204) (#205)

* v1.4.3 - Enhances MAUI sync, local storage, and reader (#202)

* fix(#173): use Id ?? RowKey for checking and opening offline post HTML (#179)

* feat(#176): add sync progress bar and status updates for downloading offline post text (#180)

* should have done that long ago

* fix: resolve Android MAUI app crash when opening URLs (issue #177) (#181)

* feat: add up/down reordering for categories and notes in summary editor (issue #92) (#183)

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>

* feat: add text size slider and fix text wrapping on offline reader page (issue #178) (#182)

* bumb version

* feat: implement async background post content extraction to save HTML in blob storage (#185)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache (#186)

* feat: implement async background post content extraction to save HTML in blob storage

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache

* feat: configure protected Azure Function Parser API and key propagation (#187)

* feat: configure protected Azure Function Parser API and key propagation

* bump: version to 1.4.0

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* update missing env variable

* fix

* chore: bump version to 1.4.1

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(#190): update actions/cache to v5 for Node.js 24 compatibility in OpenCode triage workflow (#191)

* Update version to 1.4.2, add sync progress tracking, and reader page controls (#192)

* chore: bump version to 1.4.2

* feat: show detailed sync progress messages and progress bar on Posts page

* feat: add back button and text size slider at both top and bottom of reader page

* ci: include version in android apk filename (#193)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* Fix document sync stuck and improve sync progress and offline fallback (fixes #196) (#199)

* fix: constrain reader text size slider and add step buttons (fixes #195) (#198)

* feat: Add markdown saving for reading notes and bump version to 1.4.3

* feat: add MAUI storage tab (#200)

* feat: add MAUI storage tab for offline posts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: refine MAUI storage controls

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: highlight storage actions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: bump application version to 1.4.3 (#201)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(ci): prevent timeout and rate limits in opencode daily triage (#204)

---------

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…let (#203) (#207)

* v1.4.3 - Enhances MAUI sync, local storage, and reader (#202)

* fix(#173): use Id ?? RowKey for checking and opening offline post HTML (#179)

* feat(#176): add sync progress bar and status updates for downloading offline post text (#180)

* should have done that long ago

* fix: resolve Android MAUI app crash when opening URLs (issue #177) (#181)

* feat: add up/down reordering for categories and notes in summary editor (issue #92) (#183)

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>

* feat: add text size slider and fix text wrapping on offline reader page (issue #178) (#182)

* bumb version

* feat: implement async background post content extraction to save HTML in blob storage (#185)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache (#186)

* feat: implement async background post content extraction to save HTML in blob storage

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache

* feat: configure protected Azure Function Parser API and key propagation (#187)

* feat: configure protected Azure Function Parser API and key propagation

* bump: version to 1.4.0

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* update missing env variable

* fix

* chore: bump version to 1.4.1

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(#190): update actions/cache to v5 for Node.js 24 compatibility in OpenCode triage workflow (#191)

* Update version to 1.4.2, add sync progress tracking, and reader page controls (#192)

* chore: bump version to 1.4.2

* feat: show detailed sync progress messages and progress bar on Posts page

* feat: add back button and text size slider at both top and bottom of reader page

* ci: include version in android apk filename (#193)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* Fix document sync stuck and improve sync progress and offline fallback (fixes #196) (#199)

* fix: constrain reader text size slider and add step buttons (fixes #195) (#198)

* feat: Add markdown saving for reading notes and bump version to 1.4.3

* feat: add MAUI storage tab (#200)

* feat: add MAUI storage tab for offline posts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: refine MAUI storage controls

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: highlight storage actions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: bump application version to 1.4.3 (#201)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fixes CI timeout and rate limits in triage workflow (#206)

* fix(#173): use Id ?? RowKey for checking and opening offline post HTML (#179)

* feat(#176): add sync progress bar and status updates for downloading offline post text (#180)

* should have done that long ago

* fix: resolve Android MAUI app crash when opening URLs (issue #177) (#181)

* feat: add up/down reordering for categories and notes in summary editor (issue #92) (#183)

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>

* feat: add text size slider and fix text wrapping on offline reader page (issue #178) (#182)

* bumb version

* feat: implement async background post content extraction to save HTML in blob storage (#185)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache (#186)

* feat: implement async background post content extraction to save HTML in blob storage

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache

* feat: configure protected Azure Function Parser API and key propagation (#187)

* feat: configure protected Azure Function Parser API and key propagation

* bump: version to 1.4.0

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* update missing env variable

* fix

* chore: bump version to 1.4.1

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(#190): update actions/cache to v5 for Node.js 24 compatibility in OpenCode triage workflow (#191)

* Update version to 1.4.2, add sync progress tracking, and reader page controls (#192)

* chore: bump version to 1.4.2

* feat: show detailed sync progress messages and progress bar on Posts page

* feat: add back button and text size slider at both top and bottom of reader page

* ci: include version in android apk filename (#193)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* Fix document sync stuck and improve sync progress and offline fallback (fixes #196) (#199)

* fix: constrain reader text size slider and add step buttons (fixes #195) (#198)

* feat: Add markdown saving for reading notes and bump version to 1.4.3

* feat: add MAUI storage tab (#200)

* feat: add MAUI storage tab for offline posts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: refine MAUI storage controls

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: highlight storage actions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: bump application version to 1.4.3 (#201)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(ci): fix timeout and rate limit failures in OpenCode Daily Triage workflow (#204) (#205)

* v1.4.3 - Enhances MAUI sync, local storage, and reader (#202)

* fix(#173): use Id ?? RowKey for checking and opening offline post HTML (#179)

* feat(#176): add sync progress bar and status updates for downloading offline post text (#180)

* should have done that long ago

* fix: resolve Android MAUI app crash when opening URLs (issue #177) (#181)

* feat: add up/down reordering for categories and notes in summary editor (issue #92) (#183)

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>

* feat: add text size slider and fix text wrapping on offline reader page (issue #178) (#182)

* bumb version

* feat: implement async background post content extraction to save HTML in blob storage (#185)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache (#186)

* feat: implement async background post content extraction to save HTML in blob storage

* feat: improve sync html download, always display read post button, and remove ILocalHtmlCache

* feat: configure protected Azure Function Parser API and key propagation (#187)

* feat: configure protected Azure Function Parser API and key propagation

* bump: version to 1.4.0

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* update missing env variable

* fix

* chore: bump version to 1.4.1

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(#190): update actions/cache to v5 for Node.js 24 compatibility in OpenCode triage workflow (#191)

* Update version to 1.4.2, add sync progress tracking, and reader page controls (#192)

* chore: bump version to 1.4.2

* feat: show detailed sync progress messages and progress bar on Posts page

* feat: add back button and text size slider at both top and bottom of reader page

* ci: include version in android apk filename (#193)

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>

* Fix document sync stuck and improve sync progress and offline fallback (fixes #196) (#199)

* fix: constrain reader text size slider and add step buttons (fixes #195) (#198)

* feat: Add markdown saving for reading notes and bump version to 1.4.3

* feat: add MAUI storage tab (#200)

* feat: add MAUI storage tab for offline posts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: refine MAUI storage controls

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: highlight storage actions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: bump application version to 1.4.3 (#201)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(ci): prevent timeout and rate limits in opencode daily triage (#204)

---------

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: fboucher-os <fboucheros+github@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(ui): add browser bookmarklet support for saving URLs (#203)

* feat(ui): add dedicated quickadd popup and MinimalLayout for bookmarklet (#203)

---------

Co-authored-by: Frank Boucher <2404846+fboucher@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Speed up MAUI sync: delta pull, batched saves, off-UI-thread (#208)

- Pull only posts modified since the last sync; detect server deletions
  with a new lightweight GET api/posts/ids endpoint (falls back to the
  full list on first sync or on servers without the endpoint).
- Save pulled posts in one SQLite transaction and remove deleted posts
  in one batch.
- Fetch full details for unread posts with at most 5 concurrent requests.
- Run sync on the thread pool and throttle progress events to ~250 ms.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kq68qA7Jv7puAF3Kc6GSFY

* Restore CRLF line endings in LocalDataService and PostNoteClient

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kq68qA7Jv7puAF3Kc6GSFY

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve conflicts from squash-merged v1.4.3 content on main by keeping
v-next's versions; main's src tree was identical to v-next at 9d76219.
Keeps main's disabled schedule in opencode-triage.yml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Code Coverage

Package Line Rate Branch Rate Health
NoteBookmark.AIServices 97% 64% ✔
NoteBookmark.Api 89% 80% ✔
NoteBookmark.BlazorApp 4% 10% ❌
NoteBookmark.Domain 93% 76% ✔
NoteBookmark.ServiceDefaults 96% 75% ✔
NoteBookmark.SharedUI 26% 33% ❌
Summary 58% (1164 / 2008) 50% (341 / 677) ❌

@fboucher
fboucher merged commit edc088a into main Sep 30, 2026
2 checks passed
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.

synchronization is very long

2 participants