mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 00:26:29 +00:00
Follow-up to #591, prompted by the update-check notice showing a raw https:// URL as plain text instead of a clickable link. Made it general rather than a one-off fix, since future announcements may also want to link to docs. Added Announcement.LinkText/LinkURL (+ LinkURLFunc, the dynamic counterpart, for the update-check entry's per-release URL) alongside the existing Message/MessageFunc pair. Both frontends render it as a real <a> element now: the admin UI (innerHTML) escapes Message/LinkText/LinkURL via the existing escapeHtml() before composing the markup — previously Message went into innerHTML unescaped, which this incidentally hardens; the player (Preact/htm) templates an actual <a> rather than interpolating a string, since Preact escapes string children by default and a raw <a href=...> string would otherwise render as literal text, not a link. Rephrased the #419 admin-gate announcement to use the new field too (was a plain "See issue #419 for details." text mention). Bug found while wiring this up: UpdateCheckState never persisted the release URL, only the version — so after a restart, the announcement would show a correct message but a broken/empty link until the next live check completed (which can be up to a full interval away, since a fresh check is skipped when the persisted last-check is still recent). Fixed by adding UpdateCheckState.LastReleaseURL and threading it through Checker.persist/NewChecker's seeding path, with a test (TestNewChecker_SeedsFromPersistedState) that would have caught it. Also fixed two gocritic rangeValCopy findings in handlers_announcements.go (switched to index-based iteration) surfaced by the Announcement struct growing with the new fields. Refs #591