From f838a4eab5cbd569503348aa14c36ca0058b343f Mon Sep 17 00:00:00 2001 From: Iku-turso Date: Wed, 13 Apr 2022 14:42:11 +0300 Subject: [PATCH] Make quit triggered by auto update manifest as hard quit instead of just soft quit Soft quit is the stand-by quit where only the renderer quits. Hard quit is the full quit of also main. Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso --- .../electron-app/auto-updater.injectable.ts | 14 +++++++++++++ .../when-application-will-quit.injectable.ts | 20 ++++++++++++++++++- ...setup-closing-of-application.injectable.ts | 10 ++-------- 3 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 src/main/electron-app/auto-updater.injectable.ts diff --git a/src/main/electron-app/auto-updater.injectable.ts b/src/main/electron-app/auto-updater.injectable.ts new file mode 100644 index 0000000000..24bb560e1f --- /dev/null +++ b/src/main/electron-app/auto-updater.injectable.ts @@ -0,0 +1,14 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { autoUpdater } from "electron"; + +const autoUpdaterInjectable = getInjectable({ + id: "auto-updater", + instantiate: () => autoUpdater, + causesSideEffects: true, +}); + +export default autoUpdaterInjectable; diff --git a/src/main/electron-app/when-application-will-quit.injectable.ts b/src/main/electron-app/when-application-will-quit.injectable.ts index 7bba7e67a5..48f9451859 100644 --- a/src/main/electron-app/when-application-will-quit.injectable.ts +++ b/src/main/electron-app/when-application-will-quit.injectable.ts @@ -4,9 +4,12 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import electronAppInjectable from "./electron-app.injectable"; +import isIntegrationTestingInjectable from "../../common/vars/is-integration-testing.injectable"; +import autoUpdaterInjectable from "./auto-updater.injectable"; interface CallbackArgs { cancel: () => void; + shouldOnlySoftQuit: boolean; } const whenApplicationWillQuitInjectable = getInjectable({ @@ -15,10 +18,25 @@ const whenApplicationWillQuitInjectable = getInjectable({ instantiate: (di) => { const app = di.inject(electronAppInjectable); + const isIntegrationTesting = di.inject(isIntegrationTestingInjectable); + const autoUpdater = di.inject(autoUpdaterInjectable); + + let isAutoUpdating = false; + return (callback: (args: CallbackArgs) => void) => { + autoUpdater.on("before-quit-for-update", () => { + isAutoUpdating = true; + }); + app.on("will-quit", (event) => { + const shouldHardQuit = isIntegrationTesting || isAutoUpdating; + callback({ - cancel: () => { event.preventDefault(); }, + cancel: () => { + event.preventDefault(); + }, + + shouldOnlySoftQuit: !shouldHardQuit, }); }); }; diff --git a/src/main/start-main-application/before-application-is-ready/implementations/setup-closing-of-application.injectable.ts b/src/main/start-main-application/before-application-is-ready/implementations/setup-closing-of-application.injectable.ts index 15588f79e3..7e646507d7 100644 --- a/src/main/start-main-application/before-application-is-ready/implementations/setup-closing-of-application.injectable.ts +++ b/src/main/start-main-application/before-application-is-ready/implementations/setup-closing-of-application.injectable.ts @@ -8,7 +8,6 @@ import { beforeApplicationSoftQuitInjectionToken } from "../../before-applicatio import { runManyFor } from "../../run-many-for"; import whenApplicationWillQuitInjectable from "../../../electron-app/when-application-will-quit.injectable"; import { beforeApplicationHardQuitInjectionToken } from "../../before-application-hard-quit/before-application-hard-quit-injection-token"; -import isIntegrationTestingInjectable from "../../../../common/vars/is-integration-testing.injectable"; const setupClosingOfApplicationInjectable = getInjectable({ id: "setup-closing-of-application", @@ -28,17 +27,12 @@ const setupClosingOfApplicationInjectable = getInjectable({ beforeApplicationHardQuitInjectionToken, ); - const isIntegrationTesting = di.inject(isIntegrationTestingInjectable); - return { run: () => { - whenApplicationWillQuit(async ({ cancel: cancelNativeQuit }) => { + whenApplicationWillQuit(async ({ cancel: cancelNativeQuit, shouldOnlySoftQuit }) => { await runRunnablesBeforeApplicationSoftQuit(); - // &&!autoUpdateIsRunning) { - const shouldDoOnlySoftQuit = !isIntegrationTesting; - - if (shouldDoOnlySoftQuit) { + if (shouldOnlySoftQuit) { cancelNativeQuit(); } else { await runRunnablesBeforeApplicationHardQuit();