diff --git a/src/app/pages/client/ClientNonUIFeatures.tsx b/src/app/pages/client/ClientNonUIFeatures.tsx index 261cc00b4..1bb404c37 100644 --- a/src/app/pages/client/ClientNonUIFeatures.tsx +++ b/src/app/pages/client/ClientNonUIFeatures.tsx @@ -68,7 +68,7 @@ import { useReminders } from '../../hooks/useReminders'; import { getRoomRetentionMs, isExpired } from '../../utils/retention'; import { useTauriUpdateProgress, useTauriUpdater } from '../../hooks/useTauriUpdater'; import { isNetworkUpdateError } from '../../utils/updateErrors'; -import { invokeTauri, isTauri as isTauriApp } from '../../hooks/useTauri'; +import { invokeTauri, isTauri as isTauriApp, useTauriEvent } from '../../hooks/useTauri'; import { TauriDesktopFeatures } from '../../components/TauriDesktopFeatures'; import { KeyboardShortcutsDialog, useKeyboardShortcutsTrigger } from '../../features/shortcuts'; import { useRoomsListener } from '../../hooks/useRoomsListener'; @@ -965,6 +965,24 @@ function TauriUpdateFeature() { }); }, [status, setToast, installFromToast]); + // [cinny-desktop #6] Mirror a pending update into the tray ("Restart to + // update" + tooltip) so a dismissed toast isn't the only reminder. Kept while + // installing or after a failed attempt (the update is still pending); cleared + // once a check says we're current. + useEffect(() => { + if (!isTauri) return; + if (status.state === 'available') { + invokeTauri('set_tray_update_ready', { version: status.version }); + } else if (status.state === 'up-to-date') { + invokeTauri('set_tray_update_ready', { version: null }); + } + }, [isTauri, status]); + + useTauriEvent('lotus-tray-install-update', () => { + if (firedRef.current) dismissToast(`tauri-update-${firedRef.current}`); + installFromToast(); + }); + return null; }