[#237] Dispose plugins from main process

This commit is contained in:
Louis 2023-10-02 20:46:34 +07:00 committed by Louis
parent 26f732d541
commit 29d8c30c3e
4 changed files with 32 additions and 30 deletions

View File

@ -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();

View File

@ -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,
};

View File

@ -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<string, any> = {};
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,

View File

@ -0,0 +1,8 @@
export function dispose(requiredModules: Record<string, any>) {
for (const key in requiredModules) {
const module = requiredModules[key];
if (typeof module["dispose"] === "function") {
module["dispose"]();
}
}
}