From 831d45dc45158ce13050c337543fe8cfcce84ea9 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Sun, 20 Aug 2023 21:14:26 +0200 Subject: [PATCH] add multi instance --- assets/lang/en-US.json | 2 ++ package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++++++++++---- src/main.ts | 5 ++++- src/settings/settings.html | 8 ++++++++ src/setup/setup.html | 1 + src/utils.ts | 8 ++++++++ 7 files changed, 44 insertions(+), 6 deletions(-) diff --git a/assets/lang/en-US.json b/assets/lang/en-US.json index acc9e2a..9b49c9d 100644 --- a/assets/lang/en-US.json +++ b/assets/lang/en-US.json @@ -24,6 +24,8 @@ "settings-mintoTray-desc": "When disabled, ArmCord will close like any other window when closed, otherwise it'll sit back and relax\n in your system tray for later.", "settings-startMinimized": "Start minimized", "settings-startMinimized-desc": "ArmCord starts in background and remains out of your way.", + "settings-MultiInstance": "Multi Instance", + "settings-MultiInstance-desc": "When enabled you'll be able to start up many instances of ArmCord.", "settings-patches": "Automatic Patches", "settings-useLegacyCapturer": "Use legacy capturer", "settings-useLegacyCapturer-desc": "Use legacy screenshare module, instead of the new one. If you're experiencing issues with screen sharing, try enabling this.", diff --git a/package.json b/package.json index 692aa15..9725e75 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@typescript-eslint/eslint-plugin": "^5.59.2", "@typescript-eslint/parser": "^5.59.2", "copyfiles": "^2.4.1", - "electron": "26.0.0-beta.11", + "electron": "26.0.0", "electron-builder": "^24.6.3", "eslint": "^8.40.0", "eslint-config-dmitmel": "github:dmitmel/eslint-config-dmitmel", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4578fc0..05b2a4e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,8 +41,8 @@ devDependencies: specifier: ^2.4.1 version: 2.4.1 electron: - specifier: 26.0.0-beta.11 - version: 26.0.0-beta.11 + specifier: 26.0.0 + version: 26.0.0 electron-builder: specifier: ^24.6.3 version: 24.6.3 @@ -624,6 +624,7 @@ packages: /boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + requiresBuild: true dev: true optional: true @@ -891,6 +892,7 @@ packages: /define-properties@1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 @@ -904,6 +906,7 @@ packages: /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + requiresBuild: true dev: true optional: true @@ -1024,8 +1027,8 @@ packages: - supports-color dev: true - /electron@26.0.0-beta.11: - resolution: {integrity: sha512-QejgSimxMxl4C3oOVGqKPn9T50PHt//i9JZPN3mOKviyawpfA3yI8SbtDhXW0d+6f+GGHIg0Eo7deppki3be/Q==} + /electron@26.0.0: + resolution: {integrity: sha512-x57bdCaDvgnlc41VOm/UWihJCCiI3OxJKiBgB/e5F7Zd6avo+61mO6IzQS7Bu/k/a1KPjou25EUORR6UPKznBQ==} engines: {node: '>= 12.20.55'} hasBin: true requiresBuild: true @@ -1052,6 +1055,7 @@ packages: /es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + requiresBuild: true dev: true optional: true @@ -1406,6 +1410,7 @@ packages: /get-intrinsic@1.1.3: resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + requiresBuild: true dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -1468,6 +1473,7 @@ packages: /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: define-properties: 1.1.4 dev: true @@ -1517,6 +1523,7 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + requiresBuild: true dependencies: get-intrinsic: 1.1.3 dev: true @@ -1525,6 +1532,7 @@ packages: /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + requiresBuild: true dev: true optional: true @@ -1731,6 +1739,7 @@ packages: /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + requiresBuild: true dev: true optional: true @@ -1802,6 +1811,7 @@ packages: /matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} + requiresBuild: true dependencies: escape-string-regexp: 4.0.0 dev: true @@ -1934,6 +1944,7 @@ packages: /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + requiresBuild: true dev: true optional: true @@ -2156,6 +2167,7 @@ packages: /roarr@2.15.4: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} + requiresBuild: true dependencies: boolean: 3.2.0 detect-node: 2.1.0 @@ -2192,6 +2204,7 @@ packages: /semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + requiresBuild: true dev: true optional: true @@ -2219,6 +2232,7 @@ packages: /serialize-error@7.0.1: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} + requiresBuild: true dependencies: type-fest: 0.13.1 dev: true @@ -2291,6 +2305,7 @@ packages: /sprintf-js@1.1.2: resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} + requiresBuild: true dev: true optional: true @@ -2433,6 +2448,7 @@ packages: /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} + requiresBuild: true dev: true optional: true diff --git a/src/main.ts b/src/main.ts index 11bad2f..e48d942 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,6 +7,7 @@ import { checkIfConfigExists, firstRun, getConfig, + getConfigSync, injectElectronFlags, installModLoader, modInstallState, @@ -54,10 +55,12 @@ async function args(): Promise { } } args(); // i want my top level awaits -if (!app.requestSingleInstanceLock()) { +if (!app.requestSingleInstanceLock() && getConfigSync("multiInstance") == (false ?? undefined)) { + // if value isn't set after 3.2.4 // kill if 2nd instance app.quit(); } else { + app.commandLine.appendSwitch("disable-features", "WidgetLayering"); // fix dev tools layers // Your data now belongs to CCP crashReporter.start({uploadToServer: false}); // enable webrtc capturer for wayland diff --git a/src/settings/settings.html b/src/settings/settings.html index dc343c4..1c7aa0f 100644 --- a/src/settings/settings.html +++ b/src/settings/settings.html @@ -80,6 +80,14 @@
+
+ + + +

+
+
+
diff --git a/src/setup/setup.html b/src/setup/setup.html index 4394fa1..9b0892e 100644 --- a/src/setup/setup.html +++ b/src/setup/setup.html @@ -140,6 +140,7 @@ disableAutogain: false, mods: options.mod, dynamicIcon: false, + multiInstance: false, useLegacyCapturer: false, tray: /true/i.test(document.getElementById("tray").value), startMinimized: false, diff --git a/src/utils.ts b/src/utils.ts index 856ebce..8833c4d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -46,6 +46,7 @@ export function setup(): void { automaticPatches: false, keybinds: [], alternativePaste: false, + multiInstance: false, mods: "none", spellcheck: true, performanceMode: "none", @@ -253,6 +254,7 @@ export interface Settings { minimizeToTray: boolean; automaticPatches: boolean; alternativePaste: boolean; + multiInstance: boolean; spellcheck: boolean; mods: string; dynamicIcon: boolean; @@ -282,6 +284,12 @@ export async function getConfig(object: K): Promise(object: K) { + let rawdata = fs.readFileSync(getConfigLocation(), "utf-8"); + let returndata = JSON.parse(rawdata); + console.log(`[Config manager] ${object}: ${returndata[object]}`); + return returndata[object]; +} export async function setConfig(object: K, toSet: Settings[K]): Promise { let rawdata = fs.readFileSync(getConfigLocation(), "utf-8"); let parsed = JSON.parse(rawdata);