From b2ed9b20a53ab6de389b2ebe4f5d7d3e7f30357b Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Tue, 23 Jul 2024 06:56:27 +1000 Subject: [PATCH] feat: check for updates --- src/components/settings/SettingsFooter.tsx | 15 +++--- src/electron/main.js | 55 +++++++++++++--------- src/types.ts | 5 -- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/components/settings/SettingsFooter.tsx b/src/components/settings/SettingsFooter.tsx index d8ba315c5..3edf7e4b8 100644 --- a/src/components/settings/SettingsFooter.tsx +++ b/src/components/settings/SettingsFooter.tsx @@ -8,13 +8,13 @@ import { ipcRenderer } from 'electron'; import { type FC, useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { BUTTON_CLASS_NAME } from '../../styles/gitify'; -import { AutoUpdaterCheck, IconColor, Size } from '../../types'; +import { IconColor, Size } from '../../types'; import { getAppVersion, quitApp } from '../../utils/comms'; import { openGitifyReleaseNotes } from '../../utils/links'; export const SettingsFooter: FC = () => { const [appVersion, setAppVersion] = useState(null); - const [newVersionAvailable, setNewVersionAvailable] = useState(false); + const [isUpdateAvailable, setIsUpdateAvailable] = useState(false); const navigate = useNavigate(); useEffect(() => { @@ -29,12 +29,9 @@ export const SettingsFooter: FC = () => { }, []); useEffect(() => { - ipcRenderer.on( - 'gitify:auto-updater', - (_, version: AutoUpdaterCheck, _info: string) => { - setNewVersionAvailable(version === AutoUpdaterCheck.UPDATE_AVAILABLE); - }, - ); + ipcRenderer.on('gitify:auto-updater', (_, isUpdateAvailable: boolean) => { + setIsUpdateAvailable(isUpdateAvailable); + }); }, []); return ( @@ -47,7 +44,7 @@ export const SettingsFooter: FC = () => { > Gitify {appVersion} - {newVersionAvailable ? ( + {isUpdateAvailable ? ( diff --git a/src/electron/main.js b/src/electron/main.js index 5b642c8bc..1c4cd25f5 100644 --- a/src/electron/main.js +++ b/src/electron/main.js @@ -36,20 +36,37 @@ const browserWindowOpts = { }, }; +let isUpdateAvailable = false; +let isUpdateDownloaded = false; + const contextMenu = Menu.buildFromTemplate([ { - role: 'reload', + label: 'Check for updates', + click: () => { + checkForUpdates(); + }, }, { - role: 'toggleDevTools', + label: 'An update is available', + enabled: false, + visible: isUpdateAvailable, }, - { type: 'separator' }, { - label: 'Check for updates', + label: 'Restart to update', + visible: isUpdateDownloaded, click: () => { - checkForUpdates(); + autoUpdater.quitAndInstall(); }, }, + { type: 'separator' }, + + { + role: 'reload', + }, + { + role: 'toggleDevTools', + }, + { type: 'separator' }, { label: 'Quit', click: () => { @@ -105,29 +122,21 @@ app.whenReady().then(async () => { checkForUpdates(); setInterval(checkForUpdates, 24 * 60 * 60 * 1000); // 24 hours - autoUpdater.on('update-available', (info) => { - log.info('Auto Updater: New update available', info); - mb.window.webContents.send( - 'gitify:auto-updater', - 'UPDATE_AVAILABLE', - info, - ); + autoUpdater.on('update-available', () => { + log.info('Auto Updater: New update available'); + isUpdateAvailable = true; + mb.window.webContents.send('gitify:auto-updater', isUpdateAvailable); }); - autoUpdater.on('update-not-available', (info) => { + autoUpdater.on('update-not-available', () => { log.info('Auto Updater: Already on the latest version'); - mb.window.webContents.send( - 'gitify:auto-updater', - 'UPDATE_NOT_AVAILABLE', - info, - ); + isUpdateAvailable = false; + mb.window.webContents.send('gitify:auto-updater', isUpdateAvailable); }); - autoUpdater.on('update-downloaded', (_info) => { - log.info('Auto Updater: Update downloaded; will install in 5 seconds'); - setTimeout(() => { - autoUpdater.quitAndInstall(); - }, 5000); + autoUpdater.on('update-downloaded', () => { + log.info('Auto Updater: Update downloaded'); + isUpdateDownloaded = true; }); }); diff --git a/src/types.ts b/src/types.ts index 058b83b66..a51c648e5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -105,11 +105,6 @@ export enum Theme { DARK = 'DARK', } -export enum AutoUpdaterCheck { - UPDATE_AVAILABLE = 'UPDATE_AVAILABLE', - UPDATE_NOT_AVAILABLE = 'UPDATE_NOT_AVAILABLE', -} - export enum OpenPreference { FOREGROUND = 'FOREGROUND', BACKGROUND = 'FOREGROUND',