diff options
Diffstat (limited to 'src/ipcMain/extensions.ts')
| -rw-r--r-- | src/ipcMain/extensions.ts | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/src/ipcMain/extensions.ts b/src/ipcMain/extensions.ts deleted file mode 100644 index d8f8437..0000000 --- a/src/ipcMain/extensions.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2022 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. -*/ - -import { session } from "electron"; -import { unzip } from "fflate"; -import { constants as fsConstants } from "fs"; -import { access, mkdir, rm, writeFile } from "fs/promises"; -import { join } from "path"; - -import { DATA_DIR } from "./constants"; -import { crxToZip } from "./crxToZip"; -import { get } from "./simpleGet"; - -const extensionCacheDir = join(DATA_DIR, "ExtensionCache"); - -async function extract(data: Buffer, outDir: string) { - await mkdir(outDir, { recursive: true }); - return new Promise<void>((resolve, reject) => { - unzip(data, (err, files) => { - if (err) return void reject(err); - Promise.all(Object.keys(files).map(async f => { - // Signature stuff - // 'Cannot load extension with file or directory name - // _metadata. Filenames starting with "_" are reserved for use by the system.'; - if (f.startsWith("_metadata/")) return; - - if (f.endsWith("/")) return void mkdir(join(outDir, f), { recursive: true }); - - const pathElements = f.split("/"); - const name = pathElements.pop()!; - const directories = pathElements.join("/"); - const dir = join(outDir, directories); - - if (directories) { - await mkdir(dir, { recursive: true }); - } - - await writeFile(join(dir, name), files[f]); - })) - .then(() => resolve()) - .catch(err => { - rm(outDir, { recursive: true, force: true }); - reject(err); - }); - }); - }); -} - -export async function installExt(id: string) { - const extDir = join(extensionCacheDir, `${id}`); - - try { - await access(extDir, fsConstants.F_OK); - } catch (err) { - const url = id === "fmkadmapgofadopljbjfkapdkoienihi" - // React Devtools v4.25 - // v4.27 is broken in Electron, see https://github.com/facebook/react/issues/25843 - // Unfortunately, Google does not serve old versions, so this is the only way - ? "https://raw.githubusercontent.com/Vendicated/random-files/f6f550e4c58ac5f2012095a130406c2ab25b984d/fmkadmapgofadopljbjfkapdkoienihi.zip" - : `https://clients2.google.com/service/update2/crx?response=redirect&acceptformat=crx2,crx3&x=id%3D${id}%26uc&prodversion=32`; - const buf = await get(url, { - headers: { - "User-Agent": "Vencord (https://github.com/Vendicated/Vencord)" - } - }); - await extract(crxToZip(buf), extDir).catch(console.error); - } - - session.defaultSession.loadExtension(extDir); -} |
