From ccaad66b1b502689d2ba5ccbcf1662248b2d78a8 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 31 Mar 2023 01:21:06 +0200 Subject: [PATCH] Add basic Vencord injection --- src/main/index.ts | 2 ++ src/main/ipc.ts | 7 +++++++ src/main/vencord.ts | 22 ++++++++++++++++++++++ src/preload/index.ts | 19 ++++++++++++++++++- src/shared/IpcEvents.ts | 1 + 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/main/ipc.ts create mode 100644 src/main/vencord.ts create mode 100644 src/shared/IpcEvents.ts diff --git a/src/main/index.ts b/src/main/index.ts index 6422646..0b2f58d 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -2,6 +2,8 @@ import { app, BrowserWindow } from 'electron'; import { createMainWindow } from "./mainWindow"; import { createSplashWindow } from "./splash"; +import "./ipc"; + function createWindows() { const mainWindow = createMainWindow(); const splash = createSplashWindow(); diff --git a/src/main/ipc.ts b/src/main/ipc.ts new file mode 100644 index 0000000..2bb32ba --- /dev/null +++ b/src/main/ipc.ts @@ -0,0 +1,7 @@ +import { ipcMain } from "electron"; +import { GET_VENCORD } from "../shared/IpcEvents"; +import { fetchVencord } from "./vencord"; + +ipcMain.on(GET_VENCORD, async e => { + e.returnValue = await fetchVencord(); +}); diff --git a/src/main/vencord.ts b/src/main/vencord.ts new file mode 100644 index 0000000..4a5672e --- /dev/null +++ b/src/main/vencord.ts @@ -0,0 +1,22 @@ +const BASE_URL = "https://github.com/Vendicated/Vencord/releases/download/devbuild/"; + +let VencordScripts: Record<"js" | "css", string>; + +async function get(url: string) { + const res = await fetch(url); + if (!res.ok) throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`); + + return res.text(); +} + +export async function fetchVencord() { + if (!VencordScripts) { + const [js, css] = await Promise.all([ + get(BASE_URL + "/browser.js"), + get(BASE_URL + "/browser.css") + ]); + VencordScripts = { js, css }; + } + + return VencordScripts; +} diff --git a/src/preload/index.ts b/src/preload/index.ts index eab5960..97dcbf6 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1 +1,18 @@ -console.log("banana"); +import { ipcRenderer, webFrame } from "electron"; +import { GET_VENCORD } from "../shared/IpcEvents"; + +const { js, css } = ipcRenderer.sendSync(GET_VENCORD); + +webFrame.executeJavaScript(js); + +const style = document.createElement("style"); +style.id = "vencord-css-core"; +style.textContent = css; + +if (document.readyState === "complete") { + document.documentElement.appendChild(style); +} else { + document.addEventListener("DOMContentLoaded", () => document.documentElement.appendChild(style), { + once: true + }); +} diff --git a/src/shared/IpcEvents.ts b/src/shared/IpcEvents.ts new file mode 100644 index 0000000..fc0ff82 --- /dev/null +++ b/src/shared/IpcEvents.ts @@ -0,0 +1 @@ +export const GET_VENCORD = "VCDGetVencord";