diff --git a/electron/core/plugins/data-plugin/module.ts b/electron/core/plugins/data-plugin/module.ts index 00faa5f63..3f01fa7be 100644 --- a/electron/core/plugins/data-plugin/module.ts +++ b/electron/core/plugins/data-plugin/module.ts @@ -184,6 +184,7 @@ function deleteDownloadModel(modelId: string) { const stmt = db.prepare("DELETE FROM models WHERE id = ?"); stmt.run(modelId); stmt.finalize(); + res(modelId); }); db.close(); @@ -352,7 +353,7 @@ function deleteConversation(id: any) { ); deleteMessages.run(id); deleteMessages.finalize(); - res([]); + res(id); }); db.close(); diff --git a/electron/core/plugins/inference-plugin/module.js b/electron/core/plugins/inference-plugin/module.js index ea392c31e..44205277b 100644 --- a/electron/core/plugins/inference-plugin/module.js +++ b/electron/core/plugins/inference-plugin/module.js @@ -5,14 +5,6 @@ const fs = require("fs"); let subprocess = null; -process.on("exit", () => { - // Perform cleanup tasks here - console.log("kill subprocess on exit"); - if (subprocess) { - subprocess.kill(); - } -}); - async function initModel(product) { // fileName fallback if (!product.fileName) { @@ -79,7 +71,7 @@ async function initModel(product) { }); } -function killSubprocess() { +function dispose() { if (subprocess) { subprocess.kill(); subprocess = null; @@ -91,5 +83,5 @@ function killSubprocess() { module.exports = { initModel, - killSubprocess, + dispose, }; diff --git a/electron/main.ts b/electron/main.ts index e02596559..b4c1eab5a 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -4,15 +4,15 @@ import { resolve, join, extname } from "path"; import { rmdir, unlink, createWriteStream } from "fs"; import { init } from "./core/plugin-manager/pluginMgr"; import { setupMenu } from "./utils/menu"; +import { dispose } from "./utils/disposable"; -import isDev = require("electron-is-dev"); -// @ts-ignore -import request = require("request"); -// @ts-ignore -import progress = require("request-progress"); +const isDev = require("electron-is-dev"); +const request = require("request"); +const progress = require("request-progress"); const { autoUpdater } = require("electron-updater"); const Store = require("electron-store"); +const requiredModules: Record = {}; let mainWindow: BrowserWindow | undefined = undefined; app @@ -32,6 +32,7 @@ app }); app.on("window-all-closed", () => { + dispose(requiredModules); app.quit(); }); @@ -106,22 +107,22 @@ function handleIPCs() { ipcMain.handle( "invokePluginFunc", async (_event, modulePath, method, ...args) => { - const module = join(app.getPath("userData"), "plugins", modulePath); - return await import(/* webpackIgnore: true */ module) - .then((plugin) => { - if (typeof plugin[method] === "function") { - return plugin[method](...args); - } else { - console.log(plugin[method]); - console.error(`Function "${method}" does not exist in the module.`); - } - }) - .then((res) => { - return res; - }) - .catch((err) => console.log(err)); + const module = require(/* webpackIgnore: true */ join( + app.getPath("userData"), + "plugins", + modulePath + )); + requiredModules[modulePath] = module; + + if (typeof module[method] === "function") { + return module[method](...args); + } else { + console.log(module[method]); + console.error(`Function "${method}" does not exist in the module.`); + } } ); + ipcMain.handle("basePlugins", async (_event) => { const basePluginPath = join( __dirname, diff --git a/electron/utils/disposable.ts b/electron/utils/disposable.ts new file mode 100644 index 000000000..462f7e3e5 --- /dev/null +++ b/electron/utils/disposable.ts @@ -0,0 +1,8 @@ +export function dispose(requiredModules: Record) { + for (const key in requiredModules) { + const module = requiredModules[key]; + if (typeof module["dispose"] === "function") { + module["dispose"](); + } + } +}