initial custom plugin loading
This commit is contained in:
parent
62194674eb
commit
79b35d5797
5 changed files with 38 additions and 5 deletions
|
@ -76,7 +76,7 @@ await Promise.all([
|
||||||
outfile: "dist/renderer.js",
|
outfile: "dist/renderer.js",
|
||||||
format: "iife",
|
format: "iife",
|
||||||
target: ["esnext"],
|
target: ["esnext"],
|
||||||
footer: { js: "//# sourceURL=VencordRenderer\n" + sourceMapFooter("renderer") },
|
footer: { js: "Vencord.Plugins.loadExternalPlugins();\n//# sourceURL=VencordRenderer\n" + sourceMapFooter("renderer") },
|
||||||
globalName: "Vencord",
|
globalName: "Vencord",
|
||||||
sourcemap,
|
sourcemap,
|
||||||
plugins: [
|
plugins: [
|
||||||
|
@ -110,7 +110,7 @@ await Promise.all([
|
||||||
outfile: "dist/vencordDesktopRenderer.js",
|
outfile: "dist/vencordDesktopRenderer.js",
|
||||||
format: "iife",
|
format: "iife",
|
||||||
target: ["esnext"],
|
target: ["esnext"],
|
||||||
footer: { js: "//# sourceURL=VencordDesktopRenderer\n" + sourceMapFooter("vencordDesktopRenderer") },
|
footer: { js: "Vencord.Plugins.loadExternalPlugins();\n//# sourceURL=VencordDesktopRenderer\n" + sourceMapFooter("vencordDesktopRenderer") },
|
||||||
globalName: "Vencord",
|
globalName: "Vencord",
|
||||||
sourcemap,
|
sourcemap,
|
||||||
plugins: [
|
plugins: [
|
||||||
|
|
|
@ -22,13 +22,13 @@ import { debounce } from "@utils/debounce";
|
||||||
import IpcEvents from "@utils/IpcEvents";
|
import IpcEvents from "@utils/IpcEvents";
|
||||||
import { Queue } from "@utils/Queue";
|
import { Queue } from "@utils/Queue";
|
||||||
import { BrowserWindow, ipcMain, shell } from "electron";
|
import { BrowserWindow, ipcMain, shell } from "electron";
|
||||||
import { mkdirSync, readFileSync, watch } from "fs";
|
import { mkdirSync, readdirSync, readFileSync, watch } from "fs";
|
||||||
import { open, readFile, writeFile } from "fs/promises";
|
import { open, readFile, writeFile } from "fs/promises";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
|
|
||||||
import monacoHtml from "~fileContent/../components/monacoWin.html;base64";
|
import monacoHtml from "~fileContent/../components/monacoWin.html;base64";
|
||||||
|
|
||||||
import { ALLOWED_PROTOCOLS, QUICKCSS_PATH, SETTINGS_DIR, SETTINGS_FILE } from "./utils/constants";
|
import { ALLOWED_PROTOCOLS, PLUGINS_DIR, QUICKCSS_PATH, SETTINGS_DIR, SETTINGS_FILE } from "./utils/constants";
|
||||||
|
|
||||||
mkdirSync(SETTINGS_DIR, { recursive: true });
|
mkdirSync(SETTINGS_DIR, { recursive: true });
|
||||||
|
|
||||||
|
@ -105,3 +105,15 @@ ipcMain.handle(IpcEvents.OPEN_MONACO_EDITOR, async () => {
|
||||||
});
|
});
|
||||||
await win.loadURL(`data:text/html;base64,${monacoHtml}`);
|
await win.loadURL(`data:text/html;base64,${monacoHtml}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ipcMain.on(IpcEvents.GET_PLUGINS, e => {
|
||||||
|
try {
|
||||||
|
const files = readdirSync(PLUGINS_DIR).filter(f => f.endsWith(".js"));
|
||||||
|
console.log(files);
|
||||||
|
|
||||||
|
e.returnValue = files.map(f => [f, readFileSync(join(PLUGINS_DIR, f), "utf-8")]);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
e.returnValue = [];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -25,6 +25,7 @@ export const DATA_DIR = process.env.VENCORD_USER_DATA_DIR ?? (
|
||||||
: join(app.getPath("userData"), "..", "Vencord")
|
: join(app.getPath("userData"), "..", "Vencord")
|
||||||
);
|
);
|
||||||
export const SETTINGS_DIR = join(DATA_DIR, "settings");
|
export const SETTINGS_DIR = join(DATA_DIR, "settings");
|
||||||
|
export const PLUGINS_DIR = join(DATA_DIR, "plugins");
|
||||||
export const QUICKCSS_PATH = join(SETTINGS_DIR, "quickCss.css");
|
export const QUICKCSS_PATH = join(SETTINGS_DIR, "quickCss.css");
|
||||||
export const SETTINGS_FILE = join(SETTINGS_DIR, "settings.json");
|
export const SETTINGS_FILE = join(SETTINGS_DIR, "settings.json");
|
||||||
export const ALLOWED_PROTOCOLS = [
|
export const ALLOWED_PROTOCOLS = [
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
import { registerCommand, unregisterCommand } from "@api/Commands";
|
import { registerCommand, unregisterCommand } from "@api/Commands";
|
||||||
import { Settings } from "@api/settings";
|
import { Settings } from "@api/settings";
|
||||||
|
import IpcEvents from "@utils/IpcEvents";
|
||||||
import Logger from "@utils/Logger";
|
import Logger from "@utils/Logger";
|
||||||
import { Patch, Plugin } from "@utils/types";
|
import { Patch, Plugin } from "@utils/types";
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ for (const p of pluginsValues) if (settings[p.name]?.enabled) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const p of pluginsValues) {
|
function initPlugin(p: Plugin) {
|
||||||
if (p.settings) {
|
if (p.settings) {
|
||||||
p.settings.pluginName = p.name;
|
p.settings.pluginName = p.name;
|
||||||
p.options ??= {};
|
p.options ??= {};
|
||||||
|
@ -82,6 +83,9 @@ for (const p of pluginsValues) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (const p of pluginsValues) {
|
||||||
|
initPlugin(p);
|
||||||
|
}
|
||||||
|
|
||||||
export const startAllPlugins = traceFunction("startAllPlugins", function startAllPlugins() {
|
export const startAllPlugins = traceFunction("startAllPlugins", function startAllPlugins() {
|
||||||
for (const name in Plugins)
|
for (const name in Plugins)
|
||||||
|
@ -172,3 +176,18 @@ export const stopPlugin = traceFunction("stopPlugin", function stopPlugin(p: Plu
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}, p => `stopPlugin ${p.name}`);
|
}, p => `stopPlugin ${p.name}`);
|
||||||
|
|
||||||
|
export function loadExternalPlugins() {
|
||||||
|
for (const [name, src] of VencordNative.ipc.sendSync(IpcEvents.GET_PLUGINS)) {
|
||||||
|
try {
|
||||||
|
const p = Function(src)().default;
|
||||||
|
if (!p.name || Object.prototype.hasOwnProperty.call(Plugins, p.name))
|
||||||
|
throw new Error("Invalid plugin or name conflicts with existing plugin");
|
||||||
|
|
||||||
|
Plugins[p.name] = p;
|
||||||
|
initPlugin(p);
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(`Failed to load plugin ${name}`, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -43,4 +43,5 @@ export default strEnum({
|
||||||
UPDATE: "VencordUpdate",
|
UPDATE: "VencordUpdate",
|
||||||
BUILD: "VencordBuild",
|
BUILD: "VencordBuild",
|
||||||
OPEN_MONACO_EDITOR: "VencordOpenMonacoEditor",
|
OPEN_MONACO_EDITOR: "VencordOpenMonacoEditor",
|
||||||
|
GET_PLUGINS: "VencordGetPlugins",
|
||||||
} as const);
|
} as const);
|
||||||
|
|
Loading…
Reference in a new issue