Skip to content

feat: in-app "Update available" view with release notes and installer download#18

Merged
TobbenTM merged 4 commits into
mainfrom
update-view-release-notes
Jun 29, 2026
Merged

feat: in-app "Update available" view with release notes and installer download#18
TobbenTM merged 4 commits into
mainfrom
update-view-release-notes

Conversation

@TobbenTM

Copy link
Copy Markdown
Member

Adds an in-app update flow to the moonbase_licensing JUCE module: when a validated license's released-version claim (p:rel) outranks the running app, an "Update available" screen shows the release's plain-text notes (scrollable) and downloads the new installer for the current platform via the backend inventory endpoints (authenticated with the license token), with progress and reveal-in-file-browser. It auto-presents on plugin open (config.autoPresentUpdate), is also reachable from an "Update available" badge in the license view, and "Skip this update" is remembered across restarts via a small JSON state file (ActivationState). Two header-only SDK pieces back it: a tolerant semver comparator (version.hpp) and an inventory_client (inventory.hpp). It also adds unit tests (semver, inventory, controller), visual snapshots, docs, and a double-click-"Active" escape hatch that reveals the license folder; the native sample is bumped to 0.0.1 so the flow is easy to exercise.

… download

Add an update flow to the moonbase_licensing JUCE module. When a validated
license reports a newer released version than the running app (the p:rel
claim), the module shows an "Update available" screen with the release's
plain-text notes and downloads the new installer for the current platform
in-app, with progress.

- SDK: header-only semver compare (version.hpp) and an inventory_client
  (inventory.hpp) that calls /api/customer/inventory with a LicenseToken.
- Controller: Screen::UpdateAvailable, async notes fetch + DownloadTask,
  auto-present on open (config.autoPresentUpdate), and persisted "Skip this
  update" via a JSON state file (ActivationState).
- View: UpdateAvailableView (scrollable plain-text notes), an "Update
  available" badge in the license view, and a double-click-Active escape
  hatch that reveals the license folder.
- Tests: semver, inventory, controller, and visual snapshots. Docs updated.
@argos-ci

argos-ci Bot commented Jun 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) 👍 Changes approved 6 added Jun 29, 2026, 9:47 AM

TobbenTM added 3 commits June 29, 2026 11:18
Parse downloadsNeedsUser / downloadsNeedsOwnership from the product response and
derive moonbase::can_download(license, info): a full (non-trial) license owns the
product and can download; a trial cannot download from an owners-only product
(the default). When the license isn't entitled, the update screen swaps the
Download button for an "Unlock full version" CTA plus a short note, so trial
users get a conversion prompt instead of a 403. Adds unit tests, a gated visual
snapshot, and docs.
@TobbenTM TobbenTM merged commit 7aee6e6 into main Jun 29, 2026
11 checks passed
github-actions Bot pushed a commit that referenced this pull request Jun 29, 2026
# [3.3.0](v3.2.0...v3.3.0) (2026-06-29)

### Features

* in-app "Update available" view with release notes and installer download ([#18](#18)) ([7aee6e6](7aee6e6))
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 3.3.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant