Warning screen, smarter license re-validation, version reporting
Warning screen - New reusable WarningPage (word-wrapped message, ENTER acknowledges and continues to the screen you were about to enter). - First use: pressing Play while the selected audio is still downloading. Dynamic Audio requires every file; a fixed track requires its own file. License re-validation - No longer re-verifies on every Home render. Checks now run only when the email/license key is entered or changed, on the manual option, at startup when already due, and hourly while valid. - Invalid + unchanged credentials are never re-checked (persisted pair). - Valid re-checks at most once per hour, anchored on a DB timestamp so an overdue check runs immediately after a power cycle. - New system_kv keys track the checked pair, outcome, and last-check time. - Added a System Settings row "Manually Validate License Key OK|Invalid" (OK green, Invalid red, label white) that runs a check immediately. Portal / local integration - License validation request now sends the app version as `appVersion`. - The entered license key is mirrored to ~/.local/radiantwave/license.txt. Misc - "Please connect to WiFi" only shows when no WiFi is joined AND the internet is unreachable (fixes the NetworkManager-missing and Ethernet cases). - Added unit tests for the audio-download warning, license scheduling policy, license request shape, and the new settings-menu entry.
This commit is contained in:
@@ -106,9 +106,17 @@ struct LicenseResult {
|
||||
// A 2xx response means the license is valid and the subscription is active.
|
||||
// When `systemName` is non-empty it is sent as the additive `systemName` field
|
||||
// (the Kiosk is the only writer); the response's `systemNameStatus` is advisory.
|
||||
// The request also carries the app's version as `appVersion` so the portal can
|
||||
// eventually gate accounts on an out-of-date build.
|
||||
LicenseResult validateLicense(const std::string& key, const std::string& email,
|
||||
const std::string& systemName = "");
|
||||
|
||||
// Builds the JSON body for POST /license. `appVersion` is omitted when empty.
|
||||
// Exposed so the request shape can be unit-tested without the network.
|
||||
std::string buildLicenseRequestJson(const std::string& key, const std::string& email,
|
||||
const std::string& systemName,
|
||||
const std::string& appVersion);
|
||||
|
||||
// ─── PUT /licenses/{key}/system-name ───────────────────────────────────
|
||||
|
||||
// Result of a System Name PUT. `status` is the HTTP status (0 on transport
|
||||
|
||||
Reference in New Issue
Block a user