From d3093809d6b3165ab5be6dbe90bc9fe76fdd8ba9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 23 Mar 2024 20:14:11 +0530 Subject: [PATCH] Inline more into preload --- desktop/src/api/system.ts | 18 ------- desktop/src/main.ts | 9 +++- desktop/src/main/ipc.ts | 23 ++++++++- desktop/src/preload.ts | 69 +++++++++++++++++---------- desktop/src/utils/events.ts | 8 ---- desktop/src/utils/ipcComms.ts | 34 ------------- web/packages/shared/electron/types.ts | 23 +++++---- 7 files changed, 89 insertions(+), 95 deletions(-) delete mode 100644 desktop/src/api/system.ts delete mode 100644 desktop/src/utils/events.ts diff --git a/desktop/src/api/system.ts b/desktop/src/api/system.ts deleted file mode 100644 index 422df34ae5..0000000000 --- a/desktop/src/api/system.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ipcRenderer } from "electron"; -import { AppUpdateInfo } from "../types"; - -export const registerUpdateEventListener = ( - showUpdateDialog: (updateInfo: AppUpdateInfo) => void, -) => { - ipcRenderer.removeAllListeners("show-update-dialog"); - ipcRenderer.on("show-update-dialog", (_, updateInfo: AppUpdateInfo) => { - showUpdateDialog(updateInfo); - }); -}; - -export const registerForegroundEventListener = (onForeground: () => void) => { - ipcRenderer.removeAllListeners("app-in-foreground"); - ipcRenderer.on("app-in-foreground", () => { - onForeground(); - }); -}; diff --git a/desktop/src/main.ts b/desktop/src/main.ts index 8a600b6030..ed840966ef 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -19,7 +19,7 @@ import { logErrorSentry, setupLogging } from "./main/log"; import { initWatcher } from "./services/chokidar"; import { addAllowOriginHeader } from "./utils/cors"; import { createWindow } from "./utils/createWindow"; -import { setupAppEventEmitter } from "./utils/events"; + import setupIpcComs from "./utils/ipcComms"; import { handleDockIconHideOnAutoLaunch, @@ -127,6 +127,13 @@ const deleteLegacyDiskCacheDirIfExists = async () => { } }; +function setupAppEventEmitter(mainWindow: BrowserWindow) { + // fire event when mainWindow is in foreground + mainWindow.on("focus", () => { + mainWindow.webContents.send("app-in-foreground"); + }); +} + const main = () => { setupLogging(isDev); diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index aa3841d2de..b40ce90778 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -7,7 +7,13 @@ */ import { ipcMain } from "electron/main"; -import { appVersion } from "../services/appUpdater"; +import { clearElectronStore } from "../api/electronStore"; +import { + appVersion, + muteUpdateNotification, + skipAppUpdate, + updateAndRestart, +} from "../services/appUpdater"; import { checkExistsAndCreateDir, fsExists } from "./fs"; import { openDirectory, openLogDirectory } from "./general"; import { logToDisk } from "./log"; @@ -45,4 +51,19 @@ export const attachIPCHandlers = () => { ipcMain.handle("checkExistsAndCreateDir", (_, dirPath) => checkExistsAndCreateDir(dirPath), ); + + ipcMain.on("clear-electron-store", (_) => { + clearElectronStore(); + }); + + ipcMain.on("update-and-restart", (_) => { + updateAndRestart(); + }); + ipcMain.on("skip-app-update", (_, version) => { + skipAppUpdate(version); + }); + + ipcMain.on("mute-update-notification", (_, version) => { + muteUpdateNotification(version); + }); }; diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index dad8b95c77..20b37bc23e 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -35,10 +35,6 @@ import { runFFmpegCmd } from "./api/ffmpeg"; import { getDirFiles } from "./api/fs"; import { convertToJPEG, generateImageThumbnail } from "./api/imageProcessor"; import { getEncryptionKey, setEncryptionKey } from "./api/safeStorage"; -import { - registerForegroundEventListener, - registerUpdateEventListener, -} from "./api/system"; import { getElectronFilesFromGoogleZip, getPendingUploads, @@ -100,6 +96,47 @@ const fsExists = (path: string): Promise => const checkExistsAndCreateDir = (dirPath: string): Promise => ipcRenderer.invoke("checkExistsAndCreateDir", dirPath); +/* preload: duplicated */ +interface AppUpdateInfo { + autoUpdatable: boolean; + version: string; +} + +const registerUpdateEventListener = ( + showUpdateDialog: (updateInfo: AppUpdateInfo) => void, +) => { + ipcRenderer.removeAllListeners("show-update-dialog"); + ipcRenderer.on("show-update-dialog", (_, updateInfo: AppUpdateInfo) => { + showUpdateDialog(updateInfo); + }); +}; + +const registerForegroundEventListener = (onForeground: () => void) => { + ipcRenderer.removeAllListeners("app-in-foreground"); + ipcRenderer.on("app-in-foreground", () => { + onForeground(); + }); +}; + +const clearElectronStore = () => { + ipcRenderer.send("clear-electron-store"); +}; + +// - App update + +const updateAndRestart = () => { + ipcRenderer.send("update-and-restart"); +}; + +const skipAppUpdate = (version: string) => { + ipcRenderer.send("skip-app-update", version); +}; + +const muteUpdateNotification = (version: string) => { + ipcRenderer.send("mute-update-notification", version); +}; + + // - FIXME below this /* preload: duplicated logError */ @@ -370,24 +407,6 @@ const selectDirectory = async (): Promise => { } }; -const clearElectronStore = () => { - ipcRenderer.send("clear-electron-store"); -}; - -// - App update - -const updateAndRestart = () => { - ipcRenderer.send("update-and-restart"); -}; - -const skipAppUpdate = (version: string) => { - ipcRenderer.send("skip-app-update", version); -}; - -const muteUpdateNotification = (version: string) => { - ipcRenderer.send("mute-update-notification", version); -}; - // - // These objects exposed here will become available to the JS code in our @@ -426,6 +445,8 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { // General appVersion, openDirectory, + registerForegroundEventListener, + clearElectronStore, // Logging openLogDirectory, @@ -435,6 +456,7 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { updateAndRestart, skipAppUpdate, muteUpdateNotification, + registerUpdateEventListener, // - FS fs: { @@ -450,7 +472,6 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { saveFileToDisk, selectDirectory, - clearElectronStore, readTextFile, showUploadFilesDialog, showUploadDirsDialog, @@ -470,11 +491,9 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { updateWatchMappingSyncedFiles, updateWatchMappingIgnoredFiles, convertToJPEG, - registerUpdateEventListener, runFFmpegCmd, generateImageThumbnail, - registerForegroundEventListener, moveFile, deleteFolder, rename, diff --git a/desktop/src/utils/events.ts b/desktop/src/utils/events.ts deleted file mode 100644 index 4c7ffe7d8e..0000000000 --- a/desktop/src/utils/events.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { BrowserWindow } from "electron"; - -export function setupAppEventEmitter(mainWindow: BrowserWindow) { - // fire event when mainWindow is in foreground - mainWindow.on("focus", () => { - mainWindow.webContents.send("app-in-foreground"); - }); -} diff --git a/desktop/src/utils/ipcComms.ts b/desktop/src/utils/ipcComms.ts index dcfe22056d..3f42244e86 100644 --- a/desktop/src/utils/ipcComms.ts +++ b/desktop/src/utils/ipcComms.ts @@ -9,7 +9,6 @@ import { Tray, } from "electron"; import path from "path"; -import { clearElectronStore } from "../api/electronStore"; import { attachIPCHandlers } from "../main/ipc"; import { muteUpdateNotification, @@ -88,43 +87,10 @@ export default function setupIpcComs( return safeStorage.decryptString(message); }); - ipcMain.on("clear-electron-store", () => { - clearElectronStore(); - }); - ipcMain.handle("convert-to-jpeg", (_, fileData, filename) => { return convertToJPEG(fileData, filename); }); - ipcMain.handle("open-log-dir", () => { - // [Note: Electron app paths] - // - // By default, these paths are at the following locations: - // - // * macOS: `~/Library/Application Support/ente` - // * Linux: `~/.config/ente` - // * Windows: `%APPDATA%`, e.g. `C:\Users\\AppData\Local\ente` - // * Windows: C:\Users\\AppData\Local\ - // - // https://www.electronjs.org/docs/latest/api/app - shell.openPath(app.getPath("logs")); - }); - - ipcMain.handle("open-dir", (_, dirPath) => { - shell.openPath(path.normalize(dirPath)); - }); - - ipcMain.on("update-and-restart", () => { - updateAndRestart(); - }); - ipcMain.on("skip-app-update", (_, version) => { - skipAppUpdate(version); - }); - - ipcMain.on("mute-update-notification", (_, version) => { - muteUpdateNotification(version); - }); - ipcMain.handle( "run-ffmpeg-cmd", (_, cmd, inputFilePath, outputFileName, dontTimeout) => { diff --git a/web/packages/shared/electron/types.ts b/web/packages/shared/electron/types.ts index 81a16d5937..b84922ea98 100644 --- a/web/packages/shared/electron/types.ts +++ b/web/packages/shared/electron/types.ts @@ -79,8 +79,22 @@ export interface ElectronAPIsType { }; /** TODO: AUDIT below this */ + // - General + registerForegroundEventListener: (onForeground: () => void) => void; + clearElectronStore: () => void; + + // - FS legacy checkExistsAndCreateDir: (dirPath: string) => Promise; + // - App update + updateAndRestart: () => void; + skipAppUpdate: (version: string) => void; + muteUpdateNotification: (version: string) => void; + + registerUpdateEventListener: ( + showUpdateDialog: (updateInfo: AppUpdateInfo) => void, + ) => void; + /** TODO: FIXME or migrate below this */ saveStreamToDisk: ( path: string, @@ -127,31 +141,24 @@ export interface ElectronAPIsType { removeFolder: (folderPath: string) => Promise, ) => void; isFolder: (dirPath: string) => Promise; - clearElectronStore: () => void; setEncryptionKey: (encryptionKey: string) => Promise; getEncryptionKey: () => Promise; convertToJPEG: ( fileData: Uint8Array, filename: string, ) => Promise; - registerUpdateEventListener: ( - showUpdateDialog: (updateInfo: AppUpdateInfo) => void, - ) => void; - updateAndRestart: () => void; - skipAppUpdate: (version: string) => void; runFFmpegCmd: ( cmd: string[], inputFile: File | ElectronFile, outputFileName: string, dontTimeout?: boolean, ) => Promise; - muteUpdateNotification: (version: string) => void; + generateImageThumbnail: ( inputFile: File | ElectronFile, maxDimension: number, maxSize: number, ) => Promise; - registerForegroundEventListener: (onForeground: () => void) => void; moveFile: (oldPath: string, newPath: string) => Promise; deleteFolder: (path: string) => Promise; deleteFile: (path: string) => Promise;