[#237] Dispose plugins from main process
This commit is contained in:
parent
26f732d541
commit
29d8c30c3e
@ -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();
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
@ -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,
|
||||
|
||||
8
electron/utils/disposable.ts
Normal file
8
electron/utils/disposable.ts
Normal 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"]();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user