diff --git a/src/api/system.ts b/src/api/system.ts index 2267ac522..df6fde4b5 100644 --- a/src/api/system.ts +++ b/src/api/system.ts @@ -9,3 +9,13 @@ export const showOnTray = (content: string) => { export const reloadWindow = () => { ipcRenderer.send('reload-window'); }; + +export const registerUpdateEventListener = (showUpdateDialog: () => void) => { + ipcRenderer.on('show-update-dialog', () => { + showUpdateDialog(); + }); +}; + +export const updateAndRestart = () => { + ipcRenderer.send('update-and-restart'); +}; diff --git a/src/preload.ts b/src/preload.ts index 86f36c27c..83a92636b 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -1,4 +1,10 @@ -import { reloadWindow, sendNotification, showOnTray } from './api/system'; +import { + registerUpdateEventListener, + reloadWindow, + sendNotification, + showOnTray, + updateAndRestart, +} from './api/system'; import { showUploadDirsDialog, showUploadFilesDialog, @@ -82,4 +88,6 @@ windowObject['ElectronAPIs'] = { logToDisk, convertHEIC, openLogDirectory, + registerUpdateEventListener, + updateAndRestart, }; diff --git a/src/services/appUpdater.ts b/src/services/appUpdater.ts index d4fb8fb16..bb17d45bf 100644 --- a/src/services/appUpdater.ts +++ b/src/services/appUpdater.ts @@ -1,4 +1,4 @@ -import { BrowserWindow, dialog, Tray } from 'electron'; +import { BrowserWindow, Tray } from 'electron'; import { autoUpdater } from 'electron-updater'; import log from 'electron-log'; import { setIsAppQuitting, setIsUpdateAvailable } from '../main'; @@ -12,27 +12,34 @@ class AppUpdater { async checkForUpdate(tray: Tray, mainWindow: BrowserWindow) { await autoUpdater.checkForUpdatesAndNotify(); autoUpdater.on('update-downloaded', () => { - showUpdateDialog(); + showUpdateDialog(mainWindow); setIsUpdateAvailable(true); tray.setContextMenu(buildContextMenu(mainWindow)); }); } + + updateAndRestart = () => { + setIsAppQuitting(true); + autoUpdater.quitAndInstall(); + }; } export default new AppUpdater(); -export const showUpdateDialog = (): void => { - dialog - .showMessageBox({ - type: 'info', - title: 'Install update', - message: 'Restart to update to the latest version of ente', - buttons: ['Later', 'Restart now'], - }) - .then((buttonIndex) => { - if (buttonIndex.response === 1) { - setIsAppQuitting(true); - autoUpdater.quitAndInstall(); - } - }); +export const showUpdateDialog = (mainWindow: BrowserWindow): void => { + mainWindow.webContents.send('show-update-dialog'); + + // dialog + // .showMessageBox({ + // type: 'info', + // title: 'Install update', + // message: 'Restart to update to the latest version of ente', + // buttons: ['Later', 'Restart now'], + // }) + // .then((buttonIndex) => { + // if (buttonIndex.response === 1) { + // setIsAppQuitting(true); + // autoUpdater.quitAndInstall(); + // } + // }); }; diff --git a/src/utils/ipcComms.ts b/src/utils/ipcComms.ts index 9e137ed5e..c48d7ff03 100644 --- a/src/utils/ipcComms.ts +++ b/src/utils/ipcComms.ts @@ -15,6 +15,7 @@ import chokidar from 'chokidar'; import path from 'path'; import { getDirFilePaths } from '../services/fs'; import { convertHEIC } from '../services/heicConvertor'; +import appUpdater from '../services/appUpdater'; export default function setupIpcComs( tray: Tray, @@ -106,4 +107,8 @@ export default function setupIpcComs( ipcMain.handle('open-log-dir', () => { shell.openPath(app.getPath('logs')); }); + + ipcMain.handle('update-and-restart', () => { + appUpdater.updateAndRestart(); + }); } diff --git a/src/utils/menu.ts b/src/utils/menu.ts index d53499981..8658eff85 100644 --- a/src/utils/menu.ts +++ b/src/utils/menu.ts @@ -25,11 +25,11 @@ export function buildContextMenu( paused, } = args; const contextMenu = Menu.buildFromTemplate([ - ...(isUpdateAvailable() + ...(!isUpdateAvailable() ? [ { label: 'Update available', - click: () => showUpdateDialog(), + click: () => showUpdateDialog(mainWindow), }, ] : []),