diff --git a/src/main/index.ts b/src/main/index.ts
index 760233cc..e487231e 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -43,9 +43,11 @@ if (IS_VESKTOP || !IS_VANILLA) {
}
switch (url) {
case "renderer.js.map":
+ case "equibopRenderer.js.map":
case "preload.js.map":
+ case "equibopPreload.js.map":
case "patcher.js.map":
- case "main.js.map":
+ case "equibopMain.js.map":
cb(join(__dirname, url));
break;
default:
diff --git a/src/main/ipcMain.ts b/src/main/ipcMain.ts
index 43fd2099..7b34eb8c 100644
--- a/src/main/ipcMain.ts
+++ b/src/main/ipcMain.ts
@@ -119,7 +119,7 @@ ipcMain.handle(IpcEvents.OPEN_MONACO_EDITOR, async () => {
autoHideMenuBar: true,
darkTheme: true,
webPreferences: {
- preload: join(__dirname, "preload.js"),
+ preload: join(__dirname, IS_DISCORD_DESKTOP ? "preload.js" : "equibopPreload.js"),
contextIsolation: true,
nodeIntegration: false,
sandbox: false
diff --git a/src/main/patcher.ts b/src/main/patcher.ts
index 822dab49..f91182d4 100644
--- a/src/main/patcher.ts
+++ b/src/main/patcher.ts
@@ -29,8 +29,11 @@ console.log("[Equicord] Starting up...");
// 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), "..", "_app.asar");
+const asarPath = join(dirname(injectorPath), "..", asarName);
const discordPkg = require(join(asarPath, "package.json"));
require.main!.filename = join(asarPath, discordPkg.main);
diff --git a/src/main/updater/common.ts b/src/main/updater/common.ts
index bd77c417..475435e8 100644
--- a/src/main/updater/common.ts
+++ b/src/main/updater/common.ts
@@ -16,7 +16,12 @@
* along with this program. If not, see .
*/
-export const ASAR_FILE = IS_VESKTOP ? "vesktop.asar" : IS_EQUIBOP ? "equibop.asar" : "desktop.asar";
+export const EQUICORD_FILES = [
+ IS_DISCORD_DESKTOP ? "patcher.js" : "equibopMain.js",
+ IS_DISCORD_DESKTOP ? "preload.js" : "equibopPreload.js",
+ IS_DISCORD_DESKTOP ? "renderer.js" : "equibopRenderer.js",
+ IS_DISCORD_DESKTOP ? "renderer.css" : "equibopRenderer.css",
+];
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 c0affa69..6015b039 100644
--- a/src/main/updater/http.ts
+++ b/src/main/updater/http.ts
@@ -16,19 +16,26 @@
* along with this program. If not, see .
*/
+import { isLegacyNonAsarVencord } from "@main/patcher";
import { get } from "@main/utils/simpleGet";
import { IpcEvents } from "@shared/IpcEvents";
import { VENCORD_USER_AGENT } from "@shared/vencordUserAgent";
-import { ipcMain } from "electron";
-import { writeFileSync as originalWriteFileSync } from "original-fs";
+import { app, dialog, ipcMain } from "electron";
+import { writeFile } from "fs/promises";
+import {
+ existsSync,
+ unlinkSync,
+ writeFileSync,
+} from "original-fs";
+import { join } from "path";
import gitHash from "~git-hash";
import gitRemote from "~git-remote";
-import { ASAR_FILE, serializeErrors } from "./common";
+import { EQUICORD_FILES, serializeErrors } from "./common";
const API_BASE = `https://api.github.com/repos/${gitRemote}`;
-let PendingUpdate: string | null = null;
+let PendingUpdates = [] as [string, string][];
async function githubGet(endpoint: string) {
return get(API_BASE + endpoint, {
@@ -65,23 +72,56 @@ async function fetchUpdates() {
return false;
- const asset = data.assets.find(a => a.name === ASAR_FILE);
- PendingUpdate = asset.browser_download_url;
+ data.assets.forEach(({ name, browser_download_url }) => {
+ if (EQUICORD_FILES.some(s => name.startsWith(s))) {
+ PendingUpdates.push([name, browser_download_url]);
+ }
+ });
return true;
}
async function applyUpdates() {
- if (!PendingUpdate) return true;
-
- const data = await get(PendingUpdate);
- originalWriteFileSync(__dirname, data);
-
- PendingUpdate = null;
+ await Promise.all(PendingUpdates.map(
+ async ([name, data]) => writeFile(
+ join(__dirname, name),
+ await get(data)
+ )
+ ));
+ PendingUpdates = [];
return true;
}
+async function migrateAsarToLegacy() {
+ try {
+ const isFlatpak = process.platform === "linux" && !!process.env.FLATPAK_ID;
+ if (isFlatpak) throw "Flatpak Discord can't automatically be migrated.";
+
+ const asarPath = join(__dirname, "../equicord.asar");
+ if (existsSync(asarPath)) {
+ unlinkSync(asarPath);
+ }
+
+ writeFileSync(__filename, "// Shim for legacy Equicord\n\nrequire(\"./index.js\");");
+
+ app.relaunch();
+ app.exit();
+ } catch (e) {
+ console.error("Failed to migrate to legacy", e);
+
+ app.whenReady().then(() => {
+ dialog.showErrorBox(
+ "Migration Error",
+ "Failed to migrate back to the legacy version. Please reinstall using the Equicord Installer."
+ );
+ app.exit(1);
+ });
+ }
+}
+
+if (!isLegacyNonAsarVencord) migrateAsarToLegacy();
+
ipcMain.handle(IpcEvents.GET_REPO, serializeErrors(() => `https://github.com/${gitRemote}`));
ipcMain.handle(IpcEvents.GET_UPDATES, serializeErrors(calculateGitChanges));
ipcMain.handle(IpcEvents.UPDATE, serializeErrors(fetchUpdates));
diff --git a/src/preload.ts b/src/preload.ts
index 7c61a181..96b07246 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, "renderer.css");
+ const rendererCss = join(__dirname, IS_DISCORD_DESKTOP ? "renderer.css" : "equibopRenderer.css");
const style = document.createElement("style");
style.id = "vencord-css-core";