mirror of
https://github.com/screentinker/screentinker.git
synced 2026-08-16 23:33:10 -06:00
chore(release): v1.9.29-rc1
This commit is contained in:
parent
4e625abf50
commit
b15b17f5dd
36
CHANGELOG.md
36
CHANGELOG.md
|
|
@ -1,5 +1,41 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 1.9.29-rc1
|
||||||
|
|
||||||
|
**BrightSign port.** The player on BrightSign is the ordinary web player running in an
|
||||||
|
`roHtmlWidget` — that part already worked. This release adds the host around it, which covers what a
|
||||||
|
page cannot do for itself, and a per-group choice of synchronisation protocol.
|
||||||
|
|
||||||
|
Release candidate: cut for testing on alpha, not for production fleets.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **`brightsign/autorun.brs` — a supervised host, not a URL wrapper.** It owns the widget lifecycle,
|
||||||
|
because a page-initiated `location.reload()` does not reliably bring an `roHtmlWidget` back: a
|
||||||
|
deploy on 2026-07-28 reloaded every connected player and the BrightSign was the only one that never
|
||||||
|
returned. The page now posts `{type:"restart"}` and the host rebuilds the widget. It also retries
|
||||||
|
`load-error` with backoff, falls back to a local page, and runs a heartbeat watchdog that catches a
|
||||||
|
page which loaded fine and then wedged — the case `load-error` never reports.
|
||||||
|
- **`brightsign/st-bridge.js` — the page's half of that contract**, over `@brightsign/messageport`.
|
||||||
|
Registry-backed identity (the registry outlives `localStorage` on this platform),
|
||||||
|
restart-instead-of-reload, heartbeat, and sync-backend reporting. Every method degrades to a no-op
|
||||||
|
off-platform, so it is served to every player rather than gated on a user agent.
|
||||||
|
- **`brightsign/st-sync.js` — native SyncManager support.** Frame-accurate video sync between
|
||||||
|
BrightSign players via `setSyncParams` on the standard `<video>` element.
|
||||||
|
- **`server/lib/sync-backend.js` — whose protocol a group runs.** `auto` picks BrightSign's native
|
||||||
|
sync when every member is a BrightSign and ours otherwise. Native sync selected for a mixed group,
|
||||||
|
or for players on different subnets, downgrades and reports why: BrightWall is multicast and
|
||||||
|
cannot cross networks, and a half-synced group looks perfectly healthy on the dashboard while one
|
||||||
|
panel drifts alone.
|
||||||
|
- **Boot from internal flash.** A player will run `FLASH:/autorun.brs` with no card present at all,
|
||||||
|
confirmed on an XT245 whose microSD interface is physically dead. `StorageRoot()` probes for it and
|
||||||
|
falls back to `SD:`, so a failed card slot no longer ends a player's life.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- The web player restarts through a single `restartPlayer()` path instead of four separate
|
||||||
|
`location.reload()` call sites. Off BrightSign the behaviour is unchanged.
|
||||||
|
- Storage keys carry a per-output suffix so a dual-output player's two widgets, which share an origin
|
||||||
|
and one `localStorage`, cannot collapse into a single device row.
|
||||||
|
|
||||||
## 1.9.28
|
## 1.9.28
|
||||||
|
|
||||||
**Platform-wide QA sweep — 25 fixes.** Findings from an audit of the Android player, the browser and
|
**Platform-wide QA sweep — 25 fixes.** Findings from an audit of the Android player, the browser and
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ android {
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
// Env-overridable so device-owner reinstalls (which require an ever-increasing
|
// Env-overridable so device-owner reinstalls (which require an ever-increasing
|
||||||
// versionCode — downgrades are blocked) don't churn this file each build.
|
// versionCode — downgrades are blocked) don't churn this file each build.
|
||||||
versionCode = (System.getenv("VERSION_CODE") ?: findProperty("VERSION_CODE") as String? ?: "97").toInt()
|
versionCode = (System.getenv("VERSION_CODE") ?: findProperty("VERSION_CODE") as String? ?: "98").toInt()
|
||||||
versionName = System.getenv("VERSION_NAME") ?: findProperty("VERSION_NAME") as String? ?: "1.9.28"
|
versionName = System.getenv("VERSION_NAME") ?: findProperty("VERSION_NAME") as String? ?: "1.9.29-rc1"
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
openapi: 3.1.0
|
openapi: 3.1.0
|
||||||
info:
|
info:
|
||||||
title: ScreenTinker Public API
|
title: ScreenTinker Public API
|
||||||
version: 1.9.28
|
version: 1.9.29
|
||||||
description: |
|
description: |
|
||||||
Public, token-scoped REST API for ScreenTinker digital signage.
|
Public, token-scoped REST API for ScreenTinker digital signage.
|
||||||
|
|
||||||
|
|
|
||||||
4
server/package-lock.json
generated
4
server/package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "screentinker",
|
"name": "screentinker",
|
||||||
"version": "1.9.28",
|
"version": "1.9.29-rc1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "screentinker",
|
"name": "screentinker",
|
||||||
"version": "1.9.28",
|
"version": "1.9.29-rc1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@azure/msal-node": "^5.2.1",
|
"@azure/msal-node": "^5.2.1",
|
||||||
"archiver": "^7.0.1",
|
"archiver": "^7.0.1",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "screentinker",
|
"name": "screentinker",
|
||||||
"version": "1.9.28",
|
"version": "1.9.29-rc1",
|
||||||
"description": "ScreenTinker - Digital Signage Management Server",
|
"description": "ScreenTinker - Digital Signage Management Server",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets"
|
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets"
|
||||||
id="http://screentinker.com/player" version="1.9.28" viewmodes="maximized">
|
id="http://screentinker.com/player" version="1.9.29" viewmodes="maximized">
|
||||||
<tizen:application id="ScrnTinkr1.ScreenTinker" package="ScrnTinkr1" required_version="2.4"/>
|
<tizen:application id="ScrnTinkr1.ScreenTinker" package="ScrnTinkr1" required_version="2.4"/>
|
||||||
<tizen:profile name="tv"/>
|
<tizen:profile name="tv"/>
|
||||||
<name>ScreenTinker</name>
|
<name>ScreenTinker</name>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue