aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar André Oliveira <37463445+SpecialAro@users.noreply.github.com>2022-06-03 19:56:48 -0500
committerLibravatar Vijay A <vraravam@users.noreply.github.com>2022-06-03 19:56:48 -0500
commite14df85e39a27944fdc4d5aecf084a68d7fd00c2 (patch)
treeda474d4dabb98026354dc1ab75c90ff6da1ab3ef /src
parent6.0.0-nightly.52 [skip ci] (diff)
downloadferdium-app-e14df85e39a27944fdc4d5aecf084a68d7fd00c2.tar.gz
ferdium-app-e14df85e39a27944fdc4d5aecf084a68d7fd00c2.tar.zst
ferdium-app-e14df85e39a27944fdc4d5aecf084a68d7fd00c2.zip
Enable AutoUpdates from in-app with self-sign certificates on macOS (#213)
Co-authored-by: Alphrag <alphrag@pm.me>
Diffstat (limited to 'src')
-rw-r--r--src/electron/ipc-api/autoUpdate.ts13
-rw-r--r--src/index.ts17
2 files changed, 23 insertions, 7 deletions
diff --git a/src/electron/ipc-api/autoUpdate.ts b/src/electron/ipc-api/autoUpdate.ts
index d20a413b3..fb91d3515 100644
--- a/src/electron/ipc-api/autoUpdate.ts
+++ b/src/electron/ipc-api/autoUpdate.ts
@@ -1,6 +1,7 @@
1import { app, ipcMain, BrowserWindow } from 'electron'; 1import { ipcMain, BrowserWindow } from 'electron';
2import { autoUpdater } from 'electron-updater'; 2import { autoUpdater } from 'electron-updater';
3import { isMac, isWindows } from '../../environment'; 3import { isMac, isWindows } from '../../environment';
4import { appEvents } from '../..';
4 5
5const debug = require('../../preload-safe-debug')('Ferdium:ipcApi:autoUpdate'); 6const debug = require('../../preload-safe-debug')('Ferdium:ipcApi:autoUpdate');
6 7
@@ -24,11 +25,13 @@ export default (params: { mainWindow: BrowserWindow; settings: any }) => {
24 autoUpdater.checkForUpdates(); 25 autoUpdater.checkForUpdates();
25 } else if (args.action === 'install') { 26 } else if (args.action === 'install') {
26 debug('installing update'); 27 debug('installing update');
27 app.removeAllListeners('window-all-closed'); 28
28 params.mainWindow.removeAllListeners('close'); 29 appEvents.emit('install-update');
30
31 const openedWindows = BrowserWindow.getAllWindows();
32 for (const window of openedWindows) window.close();
33
29 autoUpdater.quitAndInstall(); 34 autoUpdater.quitAndInstall();
30 // TODO: based on https://github.com/electron-userland/electron-builder/issues/6058#issuecomment-1130344017 (not yet tested since we don't have signed builds yet for macos)
31 app.exit();
32 } 35 }
33 } catch (error) { 36 } catch (error) {
34 event.sender.send('autoUpdate', { error }); 37 event.sender.send('autoUpdate', { error });
diff --git a/src/index.ts b/src/index.ts
index 59a90a3cb..fad6b9b69 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -15,6 +15,7 @@ import { join } from 'path';
15import windowStateKeeper from 'electron-window-state'; 15import windowStateKeeper from 'electron-window-state';
16import minimist from 'minimist'; 16import minimist from 'minimist';
17import ms from 'ms'; 17import ms from 'ms';
18import { EventEmitter } from 'events';
18import { enableWebContents, initializeRemote } from './electron-util'; 19import { enableWebContents, initializeRemote } from './electron-util';
19import { enforceMacOSAppLocation } from './enforce-macos-app-location'; 20import { enforceMacOSAppLocation } from './enforce-macos-app-location';
20 21
@@ -56,6 +57,9 @@ app.userAgentFallback = userAgent();
56// be closed automatically when the JavaScript object is garbage collected. 57// be closed automatically when the JavaScript object is garbage collected.
57let mainWindow: BrowserWindow | undefined; 58let mainWindow: BrowserWindow | undefined;
58let willQuitApp = false; 59let willQuitApp = false;
60let overrideAppQuitForUpdate = false;
61
62export const appEvents = new EventEmitter();
59 63
60// Register methods to be called once the window has been loaded. 64// Register methods to be called once the window has been loaded.
61let onDidLoadFns: any[] | null = []; 65let onDidLoadFns: any[] | null = [];
@@ -320,7 +324,8 @@ const createWindow = () => {
320 debug('Window: hide'); 324 debug('Window: hide');
321 mainWindow?.hide(); 325 mainWindow?.hide();
322 } 326 }
323 } else { 327 } else if (!overrideAppQuitForUpdate) {
328 debug('Quitting the app');
324 dbus.stop(); 329 dbus.stop();
325 app.quit(); 330 app.quit();
326 } 331 }
@@ -653,12 +658,20 @@ app.on('window-all-closed', () => {
653 ) 658 )
654 ) { 659 ) {
655 debug('Window: all windows closed, quit app'); 660 debug('Window: all windows closed, quit app');
656 app.quit(); 661 if (!overrideAppQuitForUpdate) {
662 // TODO: based on https://github.com/electron-userland/electron-builder/issues/6058#issuecomment-1130344017 (not yet tested since we don't have signed builds yet for macos)
663 app.quit();
664 }
657 } else { 665 } else {
658 debug("Window: don't quit app"); 666 debug("Window: don't quit app");
659 } 667 }
660}); 668});
661 669
670appEvents.on('install-update', () => {
671 willQuitApp = true;
672 overrideAppQuitForUpdate = true;
673});
674
662app.on('before-quit', event => { 675app.on('before-quit', event => {
663 const yesButtonIndex = 0; 676 const yesButtonIndex = 0;
664 let selection = yesButtonIndex; 677 let selection = yesButtonIndex;