diff --git a/src/api/system.ts b/src/api/system.ts index 2267ac522..783c5a18a 100644 --- a/src/api/system.ts +++ b/src/api/system.ts @@ -9,3 +9,14 @@ export const showOnTray = (content: string) => { export const reloadWindow = () => { ipcRenderer.send('reload-window'); }; + +export const registerUpdateEventListener = (showUpdateDialog: () => void) => { + ipcRenderer.removeAllListeners('show-update-dialog'); + 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..dca252b64 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,20 @@ 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'); }; diff --git a/src/utils/ipcComms.ts b/src/utils/ipcComms.ts index 9e137ed5e..482b6ff83 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.on('update-and-restart', () => { + appUpdater.updateAndRestart(); + }); } diff --git a/src/utils/menu.ts b/src/utils/menu.ts index d53499981..3c7fd12fb 100644 --- a/src/utils/menu.ts +++ b/src/utils/menu.ts @@ -29,7 +29,7 @@ export function buildContextMenu( ? [ { label: 'Update available', - click: () => showUpdateDialog(), + click: () => showUpdateDialog(mainWindow), }, ] : []), diff --git a/ui b/ui index 6e4e040d5..15f1d5da3 160000 --- a/ui +++ b/ui @@ -1 +1 @@ -Subproject commit 6e4e040d548fe83dd62111727e7686690fa8e630 +Subproject commit 15f1d5da3f673b91edf9d27328c642fd71c8bfc2