Fix update notifications and clear update cache

Handle hotfix upgrade messaging and clear stale update state after applying updates.

- UpdateController: when notifying admins for hotfixes, pass the current app version as the "to" version so notifications read e.g. "v1.1.3 has been updated" instead of showing a commit SHA.
- NotificationService: adjust system upgrade message to show a simple "has been updated" message when fromVersion equals toVersion (hotfix/file updates) and standard "upgraded from X to Y" otherwise; factor migration label formatting.
- UpdateService: clear cached update-check state after a successful update (add clearUpdateCache method) so the UI no longer shows a stale "update available" card. Keep latest_available_version unchanged to avoid view inconsistencies before migrations run.
This commit is contained in:
Hosteroid
2026-02-11 18:52:38 +02:00
parent 67d3fb36b3
commit a7c2ac2e2b
3 changed files with 33 additions and 2 deletions

View File

@@ -243,6 +243,9 @@ class UpdateService
? ($this->settingModel->getValue('latest_available_version') ?: $this->settingModel->getAppVersion())
: ($this->settingModel->getValue('latest_remote_sha') ? substr($this->settingModel->getValue('latest_remote_sha'), 0, 7) : 'latest');
// Clear cached update state so the UI no longer shows a stale "update available" card
$this->clearUpdateCache();
$this->logger->endOperation('Application Update', [
'success' => true,
'files_updated' => $filesUpdated,
@@ -386,6 +389,24 @@ class UpdateService
// Private: Cache methods
// ========================================================================
/**
* Clear all cached update-check state so the UI no longer shows stale "update available" info.
* Called after a successful update is applied.
*/
private function clearUpdateCache(): void
{
$this->settingModel->setValue('last_update_check', null);
$this->settingModel->setValue('commits_behind_count', '0');
$this->settingModel->setValue('latest_remote_sha', '');
$this->settingModel->setValue('latest_release_notes', '');
$this->settingModel->setValue('latest_release_url', '');
$this->settingModel->setValue('latest_release_published_at', '');
// Note: latest_available_version is kept — it's used by the view to compare
// against current_version. After migrations bump app_version, the comparison
// will no longer show an update. Clearing it could cause issues if migrations
// haven't run yet and the user reloads the page.
}
private function isCacheValid(string $lastCheckTimestamp): bool
{
$lastCheck = strtotime($lastCheckTimestamp);