diff --git a/src/extensions/main-api/index.ts b/src/extensions/main-api/index.ts index c341b994ac..9f39a4c781 100644 --- a/src/extensions/main-api/index.ts +++ b/src/extensions/main-api/index.ts @@ -6,6 +6,7 @@ import * as Catalog from "./catalog"; import * as Navigation from "./navigation"; import * as K8sApi from "./k8s-api"; +import * as Power from "./power"; import { IpcMain as Ipc } from "../ipc/ipc-main"; import { LensMainExtension as LensExtension } from "../lens-main-extension"; @@ -15,4 +16,5 @@ export { K8sApi, Ipc, LensExtension, + Power, }; diff --git a/src/extensions/main-api/power.ts b/src/extensions/main-api/power.ts new file mode 100644 index 0000000000..671308798a --- /dev/null +++ b/src/extensions/main-api/power.ts @@ -0,0 +1,51 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { powerMonitor } from "electron"; +import type { Disposer } from "../../common/utils/disposer"; + +/** + * Event listener for system power events + */ +export type PowerEventListener = () => void; + +/** + * Adds event listener to system suspend events + * @param listener function which will be called on system suspend + * @returns function to remove event listener + */ +export const onSuspend = (listener: PowerEventListener): Disposer => { + powerMonitor.on("suspend", listener); + + return () => { + powerMonitor.off("suspend", listener); + }; +}; + +/** + * Adds event listener to system resume event + * @param listener function which will be called on system resume + * @returns function to remove event listener + */ +export const onResume = (listener: PowerEventListener): Disposer => { + powerMonitor.on("resume", listener); + + return () => { + powerMonitor.off("resume", listener); + }; +}; + +/** + * Adds event listener to the event which is emitted when + * the system is about to reboot or shut down + * @param listener function which will be called on system shutdown + * @returns function to remove event listener + */ +export const onShutdown = (listener: PowerEventListener): Disposer => { + powerMonitor.on("shutdown", listener); + + return () => { + powerMonitor.off("shutdown", listener); + }; +};