From 6cf2e0c2a52e6eea01856232f927c1486aed0756 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 18 Jul 2024 04:34:09 +0200 Subject: [PATCH 01/12] [WIP] package vencord as asar --- .github/workflows/build.yml | 25 +++++++++++++++++++++---- pnpm-lock.yaml | 20 ++++++++++++++++++++ scripts/build/build.mjs | 37 +++++++++++++++++++++++++++---------- scripts/build/buildWeb.mjs | 32 +++++++++++++++++--------------- src/main/updater/common.ts | 9 +++------ src/main/updater/http.ts | 34 ++++++++++++++++++++-------------- 6 files changed, 108 insertions(+), 49 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ba22b123..0b8ab30a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,9 +40,26 @@ jobs: - name: Generate plugin list run: pnpm generatePluginJson dist/plugins.json dist/plugin-readmes.json - - name: Clean up obsolete files + - name: Collect files to be released run: | - rm -rf dist/*-unpacked dist/monaco Vencord.user.css vencordDesktopRenderer.css vencordDesktopRenderer.css.map + cd dist + mkdir release + + cp browser/browser.* release + cp Vencord.user.{js,js.LEGAL.txt} release + + # copy the plugin data jsons, the extension zips and the desktop/vesktop asars + cp *.{json,zip,asar} release + + # legacy un-asared files + # FIXME: remove at some point + cp desktop/* release + for file in vesktop/*; do + filename=$(basename "$file") + cp "$file" "release/vencordDesktop${filename^}" + done + + rm release/package.json - name: Get some values needed for the release id: release_values @@ -52,7 +69,7 @@ jobs: - name: Upload DevBuild as release if: github.repository == 'Vendicated/Vencord' run: | - gh release upload devbuild --clobber dist/* + gh release upload devbuild --clobber dist/release/* gh release edit devbuild --title "DevBuild $RELEASE_TAG" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -69,7 +86,7 @@ jobs: GLOBIGNORE=.git:.gitignore:README.md:LICENSE rm -rf * - cp -r ../dist/* . + cp -r ../dist/release/* . git add -A git commit -m "Builds for https://github.com/$GITHUB_REPOSITORY/commit/$GITHUB_SHA" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19295325..321fbacd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,6 +16,9 @@ importers: .: dependencies: + '@electron/asar': + specifier: ^3.2.10 + version: 3.2.10 '@sapphi-red/web-noise-suppressor': specifier: 0.3.3 version: 0.3.3 @@ -210,6 +213,11 @@ packages: peerDependencies: postcss-selector-parser: ^6.0.10 + '@electron/asar@3.2.10': + resolution: {integrity: sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==} + engines: {node: '>=10.12.0'} + hasBin: true + '@esbuild-kit/cjs-loader@2.4.2': resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} @@ -778,6 +786,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + component-emitter@1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} @@ -2553,6 +2565,12 @@ snapshots: dependencies: postcss-selector-parser: 6.0.12 + '@electron/asar@3.2.10': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + '@esbuild-kit/cjs-loader@2.4.2': dependencies: '@esbuild-kit/core-utils': 3.1.0 @@ -3129,6 +3147,8 @@ snapshots: commander@2.20.3: {} + commander@5.1.0: {} + component-emitter@1.3.0: {} concat-map@0.0.1: {} diff --git a/scripts/build/build.mjs b/scripts/build/build.mjs index 817c2cec..bce5e4ee 100755 --- a/scripts/build/build.mjs +++ b/scripts/build/build.mjs @@ -17,8 +17,9 @@ * along with this program. If not, see . */ +import { createPackage } from "@electron/asar"; import esbuild from "esbuild"; -import { readdir } from "fs/promises"; +import { readdir, writeFile } from "fs/promises"; import { join } from "path"; import { BUILD_TIMESTAMP, commonOpts, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, resolvePluginName, VERSION, watch } from "./common.mjs"; @@ -107,7 +108,7 @@ await Promise.all([ esbuild.build({ ...nodeCommonOpts, entryPoints: ["src/main/index.ts"], - outfile: "dist/patcher.js", + outfile: "dist/desktop/patcher.js", footer: { js: "//# sourceURL=VencordPatcher\n" + sourceMapFooter("patcher") }, sourcemap, define: { @@ -123,7 +124,7 @@ await Promise.all([ esbuild.build({ ...commonOpts, entryPoints: ["src/Vencord.ts"], - outfile: "dist/renderer.js", + outfile: "dist/desktop/renderer.js", format: "iife", target: ["esnext"], footer: { js: "//# sourceURL=VencordRenderer\n" + sourceMapFooter("renderer") }, @@ -142,7 +143,7 @@ await Promise.all([ esbuild.build({ ...nodeCommonOpts, entryPoints: ["src/preload.ts"], - outfile: "dist/preload.js", + outfile: "dist/desktop/preload.js", footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("preload") }, sourcemap, define: { @@ -156,8 +157,8 @@ await Promise.all([ esbuild.build({ ...nodeCommonOpts, entryPoints: ["src/main/index.ts"], - outfile: "dist/vencordDesktopMain.js", - footer: { js: "//# sourceURL=VencordDesktopMain\n" + sourceMapFooter("vencordDesktopMain") }, + outfile: "dist/vesktop/main.js", + footer: { js: "//# sourceURL=VencordMain\n" + sourceMapFooter("main") }, sourcemap, define: { ...defines, @@ -172,10 +173,10 @@ await Promise.all([ esbuild.build({ ...commonOpts, entryPoints: ["src/Vencord.ts"], - outfile: "dist/vencordDesktopRenderer.js", + outfile: "dist/vesktop/renderer.js", format: "iife", target: ["esnext"], - footer: { js: "//# sourceURL=VencordDesktopRenderer\n" + sourceMapFooter("vencordDesktopRenderer") }, + footer: { js: "//# sourceURL=VencordRenderer\n" + sourceMapFooter("renderer") }, globalName: "Vencord", sourcemap, plugins: [ @@ -191,8 +192,8 @@ await Promise.all([ esbuild.build({ ...nodeCommonOpts, entryPoints: ["src/preload.ts"], - outfile: "dist/vencordDesktopPreload.js", - footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("vencordDesktopPreload") }, + outfile: "dist/vesktop/preload.js", + footer: { js: "//# sourceURL=VencordPreload\n" + sourceMapFooter("preload") }, sourcemap, define: { ...defines, @@ -207,3 +208,19 @@ await Promise.all([ if (!commonOpts.watch) process.exitCode = 1; }); + +await Promise.all([ + writeFile("dist/desktop/package.json", JSON.stringify({ + name: "vencord", + main: "patcher.js" + })), + writeFile("dist/vesktop/package.json", JSON.stringify({ + name: "vencord", + main: "main.js" + })) +]); + +await Promise.all([ + createPackage("dist/desktop", "dist/desktop.asar"), + createPackage("dist/vesktop", "dist/vesktop.asar") +]); diff --git a/scripts/build/buildWeb.mjs b/scripts/build/buildWeb.mjs index bc15ccce..76a62d9c 100644 --- a/scripts/build/buildWeb.mjs +++ b/scripts/build/buildWeb.mjs @@ -73,26 +73,26 @@ await Promise.all( minify: true, format: "iife", outbase: "node_modules/monaco-editor/esm/", - outdir: "dist/monaco" + outdir: "dist/browser/monaco" }), esbuild.build({ entryPoints: ["browser/monaco.ts"], bundle: true, minify: true, format: "iife", - outfile: "dist/monaco/index.js", + outfile: "dist/browser/monaco/index.js", loader: { ".ttf": "file" } }), esbuild.build({ ...commonOptions, - outfile: "dist/browser.js", + outfile: "dist/browser/browser.js", footer: { js: "//# sourceURL=VencordWeb" } }), esbuild.build({ ...commonOptions, - outfile: "dist/extension.js", + outfile: "dist/browser/extension.js", define: { ...commonOptions?.define, IS_EXTENSION: true, @@ -148,9 +148,9 @@ async function loadDir(dir, basePath = "") { */ async function buildExtension(target, files) { const entries = { - "dist/Vencord.js": await readFile("dist/extension.js"), - "dist/Vencord.css": await readFile("dist/extension.css"), - ...await loadDir("dist/monaco"), + "dist/Vencord.js": await readFile("dist/browser/extension.js"), + "dist/Vencord.css": await readFile("dist/browser/extension.css"), + ...await loadDir("dist/browser/monaco"), ...Object.fromEntries(await Promise.all(RnNoiseFiles.map(async file => [`third-party/rnnoise/${file.replace(/^dist\//, "")}`, await readFile(`node_modules/@sapphi-red/web-noise-suppressor/${file}`)] ))), @@ -171,13 +171,13 @@ async function buildExtension(target, files) { await rm(target, { recursive: true, force: true }); await Promise.all(Object.entries(entries).map(async ([file, content]) => { - const dest = join("dist", target, file); + const dest = join("dist/browser", target, file); const parentDirectory = join(dest, ".."); await mkdir(parentDirectory, { recursive: true }); await writeFile(dest, content); })); - console.info("Unpacked Extension written to dist/" + target); + console.info("Unpacked Extension written to dist/browser/" + target); } const appendCssRuntime = readFile("dist/Vencord.user.css", "utf-8").then(content => { @@ -200,12 +200,14 @@ if (!process.argv.includes("--skip-extension")) { buildExtension("firefox-unpacked", ["background.js", "content.js", "manifestv2.json", "icon.png"]), ]); - Zip.sync.zip("dist/chromium-unpacked").compress().save("dist/extension-chrome.zip"); - console.info("Packed Chromium Extension written to dist/extension-chrome.zip"); - - Zip.sync.zip("dist/firefox-unpacked").compress().save("dist/extension-firefox.zip"); - console.info("Packed Firefox Extension written to dist/extension-firefox.zip"); - + Zip.zip("dist/browser/chromium-unpacked", (_err, zip) => { + zip.compress().save("dist/extension-chrome.zip"); + console.info("Packed Chromium Extension written to dist/extension-chrome.zip"); + }); + Zip.zip("dist/browser/firefox-unpacked", (_err, zip) => { + zip.compress().save("dist/extension-firefox.zip"); + console.info("Packed Firefox Extension written to dist/extension-firefox.zip"); + }); } else { await appendCssRuntime; } diff --git a/src/main/updater/common.ts b/src/main/updater/common.ts index 41b9837c..5cf9abc1 100644 --- a/src/main/updater/common.ts +++ b/src/main/updater/common.ts @@ -16,12 +16,9 @@ * along with this program. If not, see . */ -export const VENCORD_FILES = [ - IS_DISCORD_DESKTOP ? "patcher.js" : "vencordDesktopMain.js", - IS_DISCORD_DESKTOP ? "preload.js" : "vencordDesktopPreload.js", - IS_DISCORD_DESKTOP ? "renderer.js" : "vencordDesktopRenderer.js", - IS_DISCORD_DESKTOP ? "renderer.css" : "vencordDesktopRenderer.css", -]; +export const ASAR_FILE = IS_VESKTOP + ? "vesktop.asar" + : "desktop.asar"; export function serializeErrors(func: (...args: any[]) => any) { return async function () { diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts index 0738a8c2..887d8e3e 100644 --- a/src/main/updater/http.ts +++ b/src/main/updater/http.ts @@ -26,10 +26,10 @@ import gitHash from "~git-hash"; import gitRemote from "~git-remote"; import { get } from "../utils/simpleGet"; -import { serializeErrors, VENCORD_FILES } from "./common"; +import { ASAR_FILE, serializeErrors } from "./common"; const API_BASE = `https://api.github.com/repos/${gitRemote}`; -let PendingUpdates = [] as [string, string][]; +let PendingUpdate: string | null = null; async function githubGet(endpoint: string) { return get(API_BASE + endpoint, { @@ -65,22 +65,28 @@ async function fetchUpdates() { if (hash === gitHash) return false; - data.assets.forEach(({ name, browser_download_url }) => { - if (VENCORD_FILES.some(s => name.startsWith(s))) { - PendingUpdates.push([name, browser_download_url]); - } - }); + + const asset = data.assets.find(a => a.name === ASAR_FILE); + PendingUpdate = asset.browser_download_url; + return true; } async function applyUpdates() { - await Promise.all(PendingUpdates.map( - async ([name, data]) => writeFile( - join(__dirname, name), - await get(data) - ) - )); - PendingUpdates = []; + if (!PendingUpdate) return true; + + const data = await get(PendingUpdate); + + if (__dirname.endsWith(".asar")) { + await writeFile(__dirname, data); + } else { // legacy plain folder install + await writeFile(join(__dirname, "../vencord.asar"), data); + + await writeFile(__filename, '// legacy install workaround\n\nrequire("../vencord.asar");'); + } + + PendingUpdate = null; + return true; } From e8910615a7c8fe38dcd55bc06df23c35bc9e9006 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 18 Jul 2024 04:35:51 +0200 Subject: [PATCH 02/12] bleh --- package.json | 1 + pnpm-lock.yaml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 5d8f9f97..91dbcc83 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "virtual-merge": "^1.0.1" }, "devDependencies": { + "@electron/asar": "^3.2.10", "@types/chrome": "^0.0.246", "@types/diff": "^5.0.3", "@types/lodash": "^4.14.194", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 321fbacd..7caa3c99 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,9 +16,6 @@ importers: .: dependencies: - '@electron/asar': - specifier: ^3.2.10 - version: 3.2.10 '@sapphi-red/web-noise-suppressor': specifier: 0.3.3 version: 0.3.3 @@ -47,6 +44,9 @@ importers: specifier: ^1.0.1 version: 1.0.1 devDependencies: + '@electron/asar': + specifier: ^3.2.10 + version: 3.2.10 '@types/chrome': specifier: ^0.0.246 version: 0.0.246 From e119f092bf143cabfb2a626980cc456b0627182d Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 18 Jul 2024 04:37:44 +0200 Subject: [PATCH 03/12] nyaa --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 190e3069..91e68a83 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -22,7 +22,7 @@ jobs: - uses: pnpm/action-setup@v3 # Install pnpm using packageManager key in package.json - - name: Use Node.js 19 + - name: Use Node.js 20 uses: actions/setup-node@v4 with: node-version: 20 @@ -36,7 +36,7 @@ jobs: - name: Publish extension run: | - cd dist/chromium-unpacked + cd dist/browser/chromium-unpacked pnpx chrome-webstore-upload-cli@2.1.0 upload --auto-publish env: EXTENSION_ID: ${{ secrets.CHROME_EXTENSION_ID }} From 5797506569b77922398d48dc1bfc6ba9e7340d95 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 18 Jul 2024 21:50:12 +0200 Subject: [PATCH 04/12] add dev build workaround --- scripts/build/build.mjs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/scripts/build/build.mjs b/scripts/build/build.mjs index bce5e4ee..12164553 100755 --- a/scripts/build/build.mjs +++ b/scripts/build/build.mjs @@ -19,7 +19,8 @@ import { createPackage } from "@electron/asar"; import esbuild from "esbuild"; -import { readdir, writeFile } from "fs/promises"; +import { existsSync, readdirSync } from "fs"; +import { readdir, rm, writeFile } from "fs/promises"; import { join } from "path"; import { BUILD_TIMESTAMP, commonOpts, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, resolvePluginName, VERSION, watch } from "./common.mjs"; @@ -224,3 +225,18 @@ await Promise.all([ createPackage("dist/desktop", "dist/desktop.asar"), createPackage("dist/vesktop", "dist/vesktop.asar") ]); + +if (existsSync("dist/renderer.js")) { + console.warn("Legacy dist folder. Cleaning up and adding shims."); + + await Promise.all( + readdirSync("dist") + .filter(f => ["patcher", "preload", "renderer", "main"].some(name => f.toLowerCase().includes(name))) + .map(file => rm(join("dist", file))) + ); + + await Promise.all([ + writeFile("dist/patcher.js", 'require("./desktop.asar")'), + writeFile("dist/vencordDesktopMain.js", 'require("./vesktop.asar")') + ]); +} From 7148c29ed1235070c3558e4a6e7fa7783dc84f5f Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 18 Jul 2024 21:52:31 +0200 Subject: [PATCH 05/12] more clean --- scripts/build/build.mjs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/build/build.mjs b/scripts/build/build.mjs index 12164553..1637bc6c 100755 --- a/scripts/build/build.mjs +++ b/scripts/build/build.mjs @@ -231,7 +231,11 @@ if (existsSync("dist/renderer.js")) { await Promise.all( readdirSync("dist") - .filter(f => ["patcher", "preload", "renderer", "main"].some(name => f.toLowerCase().includes(name))) + .filter(f => + f.endsWith(".map") || + f.endsWith(".LEGAL.txt") || + ["patcher", "preload", "renderer"].some(name => f.startsWith(name)) + ) .map(file => rm(join("dist", file))) ); From 2ace675c0002b8b2ddffdf1093ba619d84a2d0a8 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 19 Jul 2024 00:52:32 +0200 Subject: [PATCH 06/12] migrate legacy installs --- src/main/patcher.ts | 21 ++++++++++++++------- src/main/updater/http.ts | 30 +++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/main/patcher.ts b/src/main/patcher.ts index e5b87290..7b484ff5 100644 --- a/src/main/patcher.ts +++ b/src/main/patcher.ts @@ -22,18 +22,23 @@ import { dirname, join } from "path"; import { initIpc } from "./ipcMain"; import { RendererSettings } from "./settings"; +import { migrateLegacyToAsar } from "./updater/http"; import { IS_VANILLA } from "./utils/constants"; console.log("[Vencord] Starting up..."); +// FIXME: remove at some point +const isLegacyNonAsarVencord = IS_STANDALONE && !__dirname.endsWith(".asar"); +if (isLegacyNonAsarVencord) { + console.warn("This is a legacy non asar install! Migrating to asar and restarting..."); + migrateLegacyToAsar(); +} + // Our injector file at app/index.js const injectorPath = require.main!.filename; -// special discord_arch_electron injection method -const asarName = require.main!.path.endsWith("app.asar") ? "_app.asar" : "app.asar"; - // The original app.asar -const asarPath = join(dirname(injectorPath), "..", asarName); +const asarPath = join(dirname(injectorPath), "..", "_app.asar"); const discordPkg = require(join(asarPath, "package.json")); require.main!.filename = join(asarPath, discordPkg.main); @@ -41,7 +46,7 @@ require.main!.filename = join(asarPath, discordPkg.main); // @ts-ignore Untyped method? Dies from cringe app.setAppPath(asarPath); -if (!IS_VANILLA) { +if (!IS_VANILLA && !isLegacyNonAsarVencord) { const settings = RendererSettings.store; // Repatch after host updates on Windows if (process.platform === "win32") { @@ -157,5 +162,7 @@ if (!IS_VANILLA) { console.log("[Vencord] Running in vanilla mode. Not loading Vencord"); } -console.log("[Vencord] Loading original Discord app.asar"); -require(require.main!.filename); +if (!isLegacyNonAsarVencord) { + console.log("[Vencord] Loading original Discord app.asar"); + require(require.main!.filename); +} diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts index 887d8e3e..13a36651 100644 --- a/src/main/updater/http.ts +++ b/src/main/updater/http.ts @@ -18,7 +18,7 @@ import { IpcEvents } from "@shared/IpcEvents"; import { VENCORD_USER_AGENT } from "@shared/vencordUserAgent"; -import { ipcMain } from "electron"; +import { app, dialog, ipcMain } from "electron"; import { writeFile } from "fs/promises"; import { join } from "path"; @@ -76,14 +76,7 @@ async function applyUpdates() { if (!PendingUpdate) return true; const data = await get(PendingUpdate); - - if (__dirname.endsWith(".asar")) { - await writeFile(__dirname, data); - } else { // legacy plain folder install - await writeFile(join(__dirname, "../vencord.asar"), data); - - await writeFile(__filename, '// legacy install workaround\n\nrequire("../vencord.asar");'); - } + await writeFile(__dirname, data); PendingUpdate = null; @@ -94,3 +87,22 @@ ipcMain.handle(IpcEvents.GET_REPO, serializeErrors(() => `https://github.com/${g ipcMain.handle(IpcEvents.GET_UPDATES, serializeErrors(calculateGitChanges)); ipcMain.handle(IpcEvents.UPDATE, serializeErrors(fetchUpdates)); ipcMain.handle(IpcEvents.BUILD, serializeErrors(applyUpdates)); + +export async function migrateLegacyToAsar() { + try { + const data = await get(`https://github.com/${gitRemote}/releases/latest/desktop.asar`); + await writeFile(join(__dirname, "../vencord.asar"), data); + await writeFile(__filename, "// Legacy shim for new asar\n\nrequire(\"../vencord.asar\");"); + app.relaunch(); + } catch (e) { + console.error("Failed to migrate to asar", e); + + app.whenReady().then(() => { + dialog.showErrorBox( + "Legacy Install", + "The way Vencord loaded was changed and the updater failed to migrate. Please reinstall using the Vencord Installer!" + ); + app.quit(); + }); + } +} From fbfbe33c0a2f86fcf5ada30065492e2f70b2e6e1 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 19 Jul 2024 00:53:40 +0200 Subject: [PATCH 07/12] j --- src/main/updater/http.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts index 13a36651..4138c6ac 100644 --- a/src/main/updater/http.ts +++ b/src/main/updater/http.ts @@ -92,7 +92,7 @@ export async function migrateLegacyToAsar() { try { const data = await get(`https://github.com/${gitRemote}/releases/latest/desktop.asar`); await writeFile(join(__dirname, "../vencord.asar"), data); - await writeFile(__filename, "// Legacy shim for new asar\n\nrequire(\"../vencord.asar\");"); + await writeFile(__filename, '// Legacy shim for new asar\n\nrequire("../vencord.asar");'); app.relaunch(); } catch (e) { console.error("Failed to migrate to asar", e); From d9c469755b6fe8c3c1c2004dfff7edfb9ef41f42 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 19 Jul 2024 01:20:09 +0200 Subject: [PATCH 08/12] fixes --- src/main/patcher.ts | 3 +-- src/main/updater/http.ts | 13 ++++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/patcher.ts b/src/main/patcher.ts index 7b484ff5..555ada10 100644 --- a/src/main/patcher.ts +++ b/src/main/patcher.ts @@ -22,7 +22,6 @@ import { dirname, join } from "path"; import { initIpc } from "./ipcMain"; import { RendererSettings } from "./settings"; -import { migrateLegacyToAsar } from "./updater/http"; import { IS_VANILLA } from "./utils/constants"; console.log("[Vencord] Starting up..."); @@ -31,7 +30,7 @@ console.log("[Vencord] Starting up..."); const isLegacyNonAsarVencord = IS_STANDALONE && !__dirname.endsWith(".asar"); if (isLegacyNonAsarVencord) { console.warn("This is a legacy non asar install! Migrating to asar and restarting..."); - migrateLegacyToAsar(); + require("./updater/http").migrateLegacyToAsar(); } // Our injector file at app/index.js diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts index 4138c6ac..01dd3359 100644 --- a/src/main/updater/http.ts +++ b/src/main/updater/http.ts @@ -19,7 +19,7 @@ import { IpcEvents } from "@shared/IpcEvents"; import { VENCORD_USER_AGENT } from "@shared/vencordUserAgent"; import { app, dialog, ipcMain } from "electron"; -import { writeFile } from "fs/promises"; +import { writeFileSync as originalWriteFileSync } from "original-fs"; import { join } from "path"; import gitHash from "~git-hash"; @@ -76,7 +76,7 @@ async function applyUpdates() { if (!PendingUpdate) return true; const data = await get(PendingUpdate); - await writeFile(__dirname, data); + originalWriteFileSync(__dirname, data); PendingUpdate = null; @@ -90,10 +90,13 @@ ipcMain.handle(IpcEvents.BUILD, serializeErrors(applyUpdates)); export async function migrateLegacyToAsar() { try { - const data = await get(`https://github.com/${gitRemote}/releases/latest/desktop.asar`); - await writeFile(join(__dirname, "../vencord.asar"), data); - await writeFile(__filename, '// Legacy shim for new asar\n\nrequire("../vencord.asar");'); + const data = await get(`https://github.com/${gitRemote}/releases/latest/download/desktop.asar`); + + originalWriteFileSync(join(__dirname, "../vencord.asar"), data); + originalWriteFileSync(__filename, '// Legacy shim for new asar\n\nrequire("../vencord.asar");'); + app.relaunch(); + app.quit(); } catch (e) { console.error("Failed to migrate to asar", e); From ffb73107e6ab73174ce4c82b04dd653fa1281e61 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 19 Jul 2024 01:21:11 +0200 Subject: [PATCH 09/12] flatpak explosion --- src/main/updater/http.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts index 01dd3359..f42e9f3c 100644 --- a/src/main/updater/http.ts +++ b/src/main/updater/http.ts @@ -90,6 +90,9 @@ ipcMain.handle(IpcEvents.BUILD, serializeErrors(applyUpdates)); export async function migrateLegacyToAsar() { try { + const isFlatpak = process.platform === "linux" && !!process.env.FLATPAK_ID; + if (isFlatpak) throw "Flatpak Discord can't automatically be migrated."; + const data = await get(`https://github.com/${gitRemote}/releases/latest/download/desktop.asar`); originalWriteFileSync(join(__dirname, "../vencord.asar"), data); From 611b94b6c7d2bcff6df37c3c1b0ae91882c33b93 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 19 Jul 2024 01:43:26 +0200 Subject: [PATCH 10/12] use exit instead of quit --- src/main/updater/http.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts index f42e9f3c..bd70b51d 100644 --- a/src/main/updater/http.ts +++ b/src/main/updater/http.ts @@ -99,7 +99,7 @@ export async function migrateLegacyToAsar() { originalWriteFileSync(__filename, '// Legacy shim for new asar\n\nrequire("../vencord.asar");'); app.relaunch(); - app.quit(); + app.exit(); } catch (e) { console.error("Failed to migrate to asar", e); @@ -108,7 +108,7 @@ export async function migrateLegacyToAsar() { "Legacy Install", "The way Vencord loaded was changed and the updater failed to migrate. Please reinstall using the Vencord Installer!" ); - app.quit(); + app.exit(1); }); } } From b91cb742b189393dbdb6fec53c23cd285c9463df Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 19 Jul 2024 02:50:24 +0200 Subject: [PATCH 11/12] update outdated paths --- src/main/index.ts | 4 +--- src/main/ipcMain.ts | 2 +- src/preload.ts | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/index.ts b/src/main/index.ts index 5519d47a..ba386def 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -43,11 +43,9 @@ if (IS_VESKTOP || !IS_VANILLA) { } switch (url) { case "renderer.js.map": - case "vencordDesktopRenderer.js.map": case "preload.js.map": - case "vencordDesktopPreload.js.map": case "patcher.js.map": - case "vencordDesktopMain.js.map": + case "main.js.map": cb(join(__dirname, url)); break; default: diff --git a/src/main/ipcMain.ts b/src/main/ipcMain.ts index 62785867..c9454028 100644 --- a/src/main/ipcMain.ts +++ b/src/main/ipcMain.ts @@ -131,7 +131,7 @@ ipcMain.handle(IpcEvents.OPEN_MONACO_EDITOR, async () => { autoHideMenuBar: true, darkTheme: true, webPreferences: { - preload: join(__dirname, IS_DISCORD_DESKTOP ? "preload.js" : "vencordDesktopPreload.js"), + preload: join(__dirname, "preload.js"), contextIsolation: true, nodeIntegration: false, sandbox: false diff --git a/src/preload.ts b/src/preload.ts index e79eb02c..7c61a181 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -28,7 +28,7 @@ contextBridge.exposeInMainWorld("VencordNative", VencordNative); // Discord if (location.protocol !== "data:") { // #region cssInsert - const rendererCss = join(__dirname, IS_VESKTOP ? "vencordDesktopRenderer.css" : "renderer.css"); + const rendererCss = join(__dirname, "renderer.css"); const style = document.createElement("style"); style.id = "vencord-css-core"; From 65e91cf22e143db273aab1bc32b98776df9e840f Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 19 Jul 2024 02:51:52 +0200 Subject: [PATCH 12/12] omg i love when vscode gets stuck on saving --- src/main/patcher.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/patcher.ts b/src/main/patcher.ts index 555ada10..6ab4162d 100644 --- a/src/main/patcher.ts +++ b/src/main/patcher.ts @@ -75,7 +75,7 @@ if (!IS_VANILLA && !isLegacyNonAsarVencord) { constructor(options: BrowserWindowConstructorOptions) { if (options?.webPreferences?.preload && options.title) { const original = options.webPreferences.preload; - options.webPreferences.preload = join(__dirname, IS_DISCORD_DESKTOP ? "preload.js" : "vencordDesktopPreload.js"); + options.webPreferences.preload = join(__dirname, "preload.js"); options.webPreferences.sandbox = false; // work around discord unloading when in background options.webPreferences.backgroundThrottling = false;