Backport things from stable branch back to dev
This commit is contained in:
parent
5801aed6e6
commit
1a461e9a32
File diff suppressed because it is too large
Load Diff
|
@ -26,7 +26,7 @@
|
||||||
"@types/node": "^17.0.24",
|
"@types/node": "^17.0.24",
|
||||||
"copyfiles": "^2.4.1",
|
"copyfiles": "^2.4.1",
|
||||||
"electron": "^18.0.4",
|
"electron": "^18.0.4",
|
||||||
"electron-builder": "^23.0.3",
|
"electron-builder": "^22.5.1",
|
||||||
"husky": "^7.0.4",
|
"husky": "^7.0.4",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"typescript": "^4.5.4"
|
"typescript": "^4.5.4"
|
||||||
|
@ -35,7 +35,6 @@
|
||||||
"electron-context-menu": "^3.1.2",
|
"electron-context-menu": "^3.1.2",
|
||||||
"electron-json-storage": "^4.5.0",
|
"electron-json-storage": "^4.5.0",
|
||||||
"electron-tabs": "^0.17.0",
|
"electron-tabs": "^0.17.0",
|
||||||
"glasstron": "^0.1.1",
|
|
||||||
"v8-compile-cache": "^2.3.0"
|
"v8-compile-cache": "^2.3.0"
|
||||||
},
|
},
|
||||||
"build": {
|
"build": {
|
||||||
|
@ -55,4 +54,4 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*CSS ONLY FOR INTERNAL USE (setup and loading)*/
|
/*CSS ONLY FOR INTERNAL USE (setup and loading)*/
|
||||||
@import url("https://kckarnige.github.io/femboi_owo/discord-font.css");
|
@import url("https://armcord.smartfridge.space/logofont.css");
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
background-color: #2c2f33 !important;
|
background-color: #2c2f33 !important;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@import url("https://kckarnige.github.io/femboi_owo/discord-font.css");
|
@import url("https://armcord.smartfridge.space/logofont.css");
|
||||||
:root {
|
:root {
|
||||||
--window-buttons: var(--header-secondary);
|
--window-buttons: var(--header-secondary);
|
||||||
--cord-color: var(--header-primary);
|
--cord-color: var(--header-primary);
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
text.innerHTML = "You appear to be offline. Please connect to the internet and try again.";
|
text.innerHTML = "You appear to be offline. Please connect to the internet and try again.";
|
||||||
} else {
|
} else {
|
||||||
text.innerHTML = "Starting ArmCord...";
|
text.innerHTML = "Starting ArmCord...";
|
||||||
fetch("https://armcord.smartfridge.space/latest.json")
|
fetch("https://armcord.xyz/latest.json")
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
if (data.version !== window.armcord.version) {
|
if (data.version !== window.armcord.version) {
|
||||||
|
|
18
src/main.ts
18
src/main.ts
|
@ -1,5 +1,5 @@
|
||||||
// Modules to control application life and create native browser window
|
// Modules to control application life and create native browser window
|
||||||
import {app, BrowserWindow, session} from "electron";
|
import {app, BrowserWindow, session, dialog} from "electron";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import "v8-compile-cache";
|
import "v8-compile-cache";
|
||||||
import * as storage from "electron-json-storage";
|
import * as storage from "electron-json-storage";
|
||||||
|
@ -7,7 +7,7 @@ import {getConfigUnsafe, setup} from "./utils";
|
||||||
import "./extensions/mods";
|
import "./extensions/mods";
|
||||||
import "./extensions/plugin";
|
import "./extensions/plugin";
|
||||||
import "./tray";
|
import "./tray";
|
||||||
import {mainWindow, createCustomWindow, createNativeWindow, createGlasstronWindow, createTabsHost} from "./window";
|
import {mainWindow, createCustomWindow, createNativeWindow, createTabsHost} from "./window";
|
||||||
import "./shortcuts";
|
import "./shortcuts";
|
||||||
export var contentPath: string;
|
export var contentPath: string;
|
||||||
var channel: string;
|
var channel: string;
|
||||||
|
@ -55,15 +55,8 @@ app.whenReady().then(async () => {
|
||||||
createNativeWindow();
|
createNativeWindow();
|
||||||
break;
|
break;
|
||||||
case "glasstron":
|
case "glasstron":
|
||||||
setTimeout(
|
dialog.showErrorBox("Glasstron is unsupported.", "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)")
|
||||||
createGlasstronWindow,
|
app.quit()
|
||||||
process.platform == "linux" ? 1000 : 0
|
|
||||||
// Electron has a bug on linux where it
|
|
||||||
// won't initialize properly when using
|
|
||||||
// transparency. To work around that, it
|
|
||||||
// is necessary to delay the window
|
|
||||||
// spawn function.
|
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
case "tabs":
|
case "tabs":
|
||||||
createTabsHost();
|
createTabsHost();
|
||||||
|
@ -94,7 +87,8 @@ app.whenReady().then(async () => {
|
||||||
createNativeWindow();
|
createNativeWindow();
|
||||||
break;
|
break;
|
||||||
case "glasstron":
|
case "glasstron":
|
||||||
createGlasstronWindow();
|
dialog.showErrorBox("Glasstron is unsupported.", "This build doesn't include Glasstron functionality, please edit windowStyle value in your settings.json to something different (default for example)")
|
||||||
|
app.quit()
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
createCustomWindow();
|
createCustomWindow();
|
||||||
|
|
|
@ -1,18 +1,17 @@
|
||||||
import {BrowserWindow, shell, ipcMain} from "electron";
|
import {BrowserWindow, shell, ipcMain, app} from "electron";
|
||||||
import * as storage from "electron-json-storage";
|
|
||||||
import {getConfigUnsafe, saveSettings, Settings} from "../utils";
|
import {getConfigUnsafe, saveSettings, Settings} from "../utils";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
var settings: any;
|
|
||||||
var isAlreadyCreated: boolean = false;
|
|
||||||
storage.get("settings", function (error, data: any) {
|
|
||||||
if (error) throw error;
|
|
||||||
console.log(data);
|
|
||||||
settings = data;
|
|
||||||
});
|
|
||||||
var settingsWindow: BrowserWindow;
|
var settingsWindow: BrowserWindow;
|
||||||
|
var instance: number = 0;
|
||||||
|
|
||||||
export function createSettingsWindow() {
|
export function createSettingsWindow() {
|
||||||
if (isAlreadyCreated) {
|
console.log("Creating a settings window.");
|
||||||
settingsWindow.show();
|
instance = instance + 1;
|
||||||
|
if (instance > 1) {
|
||||||
|
if (settingsWindow) {
|
||||||
|
settingsWindow.show();
|
||||||
|
settingsWindow.restore();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
settingsWindow = new BrowserWindow({
|
settingsWindow = new BrowserWindow({
|
||||||
width: 500,
|
width: 500,
|
||||||
|
@ -37,10 +36,10 @@ export function createSettingsWindow() {
|
||||||
return {action: "deny"};
|
return {action: "deny"};
|
||||||
});
|
});
|
||||||
settingsWindow.loadURL(`file://${__dirname}/settings.html`);
|
settingsWindow.loadURL(`file://${__dirname}/settings.html`);
|
||||||
settingsWindow.on("close", async (e) => {
|
settingsWindow.on("close", (event: Event) => {
|
||||||
e.preventDefault();
|
ipcMain.removeHandler("getSetting");
|
||||||
settingsWindow.hide();
|
ipcMain.removeAllListeners("saveSettings");
|
||||||
|
instance = 0;
|
||||||
});
|
});
|
||||||
isAlreadyCreated = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<title>ArmCord Settings</title>
|
<title>ArmCord Settings</title>
|
||||||
<style>
|
<style>
|
||||||
@import url("settings.css");
|
@import url("../content/css/settings.css");
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
@ -13,8 +13,6 @@
|
||||||
<select name="theme" id="theme" class="left">
|
<select name="theme" id="theme" class="left">
|
||||||
<option value="default">Default</option>
|
<option value="default">Default</option>
|
||||||
<option value="native">Native</option>
|
<option value="native">Native</option>
|
||||||
<option value="glasstron">Glasstron (experimental)</option>
|
|
||||||
<option value="tabs">Tabs (experimental)</option>
|
|
||||||
</select>
|
</select>
|
||||||
<p class="header">ArmCord theme:</p>
|
<p class="header">ArmCord theme:</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -53,15 +51,7 @@
|
||||||
</select>
|
</select>
|
||||||
<p class="header">Client mod:</p>
|
<p class="header">Client mod:</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="switch">
|
|
||||||
<select name="blurType" id="blurType" class="left">
|
|
||||||
<option value="acrylic">Acrylic</option>
|
|
||||||
<option value="blurbehind">Blur Behind</option>
|
|
||||||
<option value="transparent">Transparent</option>
|
|
||||||
<option value="none">None</option>
|
|
||||||
</select>
|
|
||||||
<p class="header">Glasstron blur type:</p>
|
|
||||||
</div>
|
|
||||||
<button id="save" class="center">Save settings</button>
|
<button id="save" class="center">Save settings</button>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
@ -73,20 +63,19 @@
|
||||||
document.getElementById("mod").value = await settings.get("mods");
|
document.getElementById("mod").value = await settings.get("mods");
|
||||||
document.getElementById("channel").value = await settings.get("channel");
|
document.getElementById("channel").value = await settings.get("channel");
|
||||||
document.getElementById("theme").value = await settings.get("windowStyle");
|
document.getElementById("theme").value = await settings.get("windowStyle");
|
||||||
document.getElementById("blurType").value = await settings.get("blurType");
|
|
||||||
}
|
}
|
||||||
loadSettings();
|
loadSettings();
|
||||||
document.getElementById("save").addEventListener("click", function () {
|
document.getElementById("save").addEventListener("click", function () {
|
||||||
//function saveSettings(windowStyle: string, channelSetting: string, armcordCSPSetting: boolean, minimizeToTray: boolean, automaticPatches: boolean,modsSetting: string, blurType: string)
|
//function saveSettings(windowStyle: string, channelSetting: string, armcordCSPSetting: boolean, minimizeToTray: boolean, automaticPatches: boolean,modsSetting: string, blurType: string)
|
||||||
settings.save(
|
settings.save({
|
||||||
document.getElementById("theme").value,
|
windowStyle: document.getElementById("theme").value,
|
||||||
document.getElementById("channel").value,
|
channel: document.getElementById("channel").value,
|
||||||
document.getElementById("csp").checked,
|
armcordCSP: document.getElementById("csp").checked,
|
||||||
document.getElementById("tray").checked,
|
minimizeToTray: document.getElementById("tray").checked,
|
||||||
document.getElementById("patches").checked,
|
automaticPatches: document.getElementById("patches").checked,
|
||||||
document.getElementById("mod").value,
|
mods: document.getElementById("mod").value,
|
||||||
document.getElementById("blurType").value
|
blurType: "acrylic"
|
||||||
);
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
declare module "glasstron" {
|
|
||||||
export class BrowserWindow extends Electron.BrowserWindow {
|
|
||||||
getBlur(): Promise<boolean>;
|
|
||||||
setBlur(value: boolean): Promise<boolean>;
|
|
||||||
blurType: WindowsBlurType;
|
|
||||||
setVibrancy(vibrancy: MacOSVibrancy): void;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
export function init(): void;
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
export function update(
|
|
||||||
window: Electron.BrowserWindow,
|
|
||||||
values: {
|
|
||||||
windows?: {
|
|
||||||
blurType: WindowsBlurType;
|
|
||||||
};
|
|
||||||
macos?: {
|
|
||||||
vibrancy: MacOSVibrancy;
|
|
||||||
};
|
|
||||||
linux?: {
|
|
||||||
requestBlur: boolean;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
): void;
|
|
||||||
export class Hacks {
|
|
||||||
static injectOnElectron(): void;
|
|
||||||
static delayReadyEvent(): void;
|
|
||||||
}
|
|
||||||
export type WindowsBlurType = "acrylic" | "blurbehind" | "transparent" | "none";
|
|
||||||
export type MacOSVibrancy =
|
|
||||||
| (
|
|
||||||
| "appearance-based"
|
|
||||||
| "light"
|
|
||||||
| "dark"
|
|
||||||
| "titlebar"
|
|
||||||
| "selection"
|
|
||||||
| "menu"
|
|
||||||
| "popover"
|
|
||||||
| "sidebar"
|
|
||||||
| "medium-light"
|
|
||||||
| "ultra-dark"
|
|
||||||
| "header"
|
|
||||||
| "sheet"
|
|
||||||
| "window"
|
|
||||||
| "hud"
|
|
||||||
| "fullscreen-ui"
|
|
||||||
| "tooltip"
|
|
||||||
| "content"
|
|
||||||
| "under-window"
|
|
||||||
| "under-page"
|
|
||||||
)
|
|
||||||
| null;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module "glasstron/src/utils" {
|
|
||||||
class Utils {
|
|
||||||
static getSavePath(): string;
|
|
||||||
static copyToPath(innerFile: string, outerFilename?: string, flags?: number): void;
|
|
||||||
static removeFromPath(filename: string): void;
|
|
||||||
static isInPath(filename: string): boolean;
|
|
||||||
static getPlatform(): any;
|
|
||||||
static parseKeyValString(string: string, keyvalSeparator?: string, pairSeparator?: string): any;
|
|
||||||
static makeKeyValString(object: any, keyvalSeparator?: string, pairSeparator?: string): string;
|
|
||||||
}
|
|
||||||
export = Utils;
|
|
||||||
}
|
|
14
src/utils.ts
14
src/utils.ts
|
@ -1,6 +1,6 @@
|
||||||
import * as storage from "electron-json-storage";
|
import * as storage from "electron-json-storage";
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import {app} from "electron";
|
import {app, dialog} from "electron";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
export var firstRun: boolean;
|
export var firstRun: boolean;
|
||||||
|
|
||||||
|
@ -21,12 +21,16 @@ export async function sleep(ms: number) {
|
||||||
return new Promise((resolve) => setTimeout(resolve, ms));
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkIfConfigIsNew() {
|
export async function checkIfConfigIsBroken() {
|
||||||
if ((await getConfigUnsafe("automaticPatches")) == undefined) {
|
if ((await getConfigUnsafe("0")) == "d") {
|
||||||
firstRun = true;
|
console.log("Detected a corrupted config");
|
||||||
|
setup();
|
||||||
|
dialog.showErrorBox(
|
||||||
|
"Oops, something went wrong.",
|
||||||
|
"ArmCord has detected that your configuration file is corrupted, please restart the app and set your settings again. If this issue persists, report it on the support server/Github issues."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Settings {
|
export interface Settings {
|
||||||
windowStyle: string;
|
windowStyle: string;
|
||||||
channel: string;
|
channel: string;
|
||||||
|
|
|
@ -2,14 +2,13 @@
|
||||||
// I had to add most of the window creation code here to split both into seperete functions
|
// I had to add most of the window creation code here to split both into seperete functions
|
||||||
// WHY? Because I can't use the same code for both due to annoying bug with value `frame` not responding to variables
|
// WHY? Because I can't use the same code for both due to annoying bug with value `frame` not responding to variables
|
||||||
// I'm sorry for this mess but I'm not sure how to fix it.
|
// I'm sorry for this mess but I'm not sure how to fix it.
|
||||||
import {BrowserWindow, shell, app, ipcMain} from "electron";
|
import {BrowserWindow, shell, app, ipcMain, dialog} from "electron";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import {contentPath} from "./main";
|
import {contentPath} from "./main";
|
||||||
import {checkIfConfigIsNew, firstRun, getConfigUnsafe} from "./utils";
|
import {checkIfConfigIsNew, firstRun, getConfigUnsafe} from "./utils";
|
||||||
import {registerIpc} from "./ipc";
|
import {registerIpc} from "./ipc";
|
||||||
import contextMenu from "electron-context-menu";
|
import contextMenu from "electron-context-menu";
|
||||||
export let mainWindow: BrowserWindow;
|
export let mainWindow: BrowserWindow;
|
||||||
import * as glasstron from "glasstron";
|
|
||||||
|
|
||||||
let guestWindows: BrowserWindow[] = [];
|
let guestWindows: BrowserWindow[] = [];
|
||||||
contextMenu({
|
contextMenu({
|
||||||
|
@ -37,7 +36,6 @@ function doAfterDefiningTheWindow() {
|
||||||
mainWindow.hide();
|
mainWindow.hide();
|
||||||
} else if (!(await getConfigUnsafe("minimizeToTray"))) {
|
} else if (!(await getConfigUnsafe("minimizeToTray"))) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
app.exit();
|
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -96,28 +94,12 @@ export function createNativeWindow() {
|
||||||
});
|
});
|
||||||
doAfterDefiningTheWindow();
|
doAfterDefiningTheWindow();
|
||||||
}
|
}
|
||||||
export function createGlasstronWindow() {
|
|
||||||
mainWindow = new glasstron.BrowserWindow({
|
|
||||||
width: 300,
|
|
||||||
height: 350,
|
|
||||||
title: "ArmCord",
|
|
||||||
darkTheme: true,
|
|
||||||
icon: path.join(__dirname, "/assets/icon_transparent.png"),
|
|
||||||
frame: true,
|
|
||||||
autoHideMenuBar: true,
|
|
||||||
webPreferences: {
|
|
||||||
preload: path.join(__dirname, "preload/preload.js"),
|
|
||||||
spellcheck: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
mainWindow.blurType = getConfigUnsafe("blurType");
|
|
||||||
//@ts-expect-error
|
|
||||||
mainWindow.setBlur(true);
|
|
||||||
doAfterDefiningTheWindow();
|
|
||||||
}
|
|
||||||
export function createTabsHost() {
|
export function createTabsHost() {
|
||||||
|
dialog.showErrorBox(
|
||||||
|
"READ THIS BEFORE USING THE APP",
|
||||||
|
"ArmCord Tabs are highly experimental and should be only used for strict testing purposes. Please don't ask for support, however you can still report bugs!"
|
||||||
|
);
|
||||||
guestWindows[1] = mainWindow;
|
guestWindows[1] = mainWindow;
|
||||||
mainWindow = new BrowserWindow({
|
mainWindow = new BrowserWindow({
|
||||||
width: 300,
|
width: 300,
|
||||||
|
|
Loading…
Reference in New Issue