mirror of
https://github.com/smartfrigde/armcord.git
synced 2024-08-14 23:56:58 +00:00
Backport things from stable branch back to dev
This commit is contained in:
parent
5801aed6e6
commit
1a461e9a32
12 changed files with 986 additions and 2071 deletions
2854
package-lock.json
generated
2854
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -26,7 +26,7 @@
|
|||
"@types/node": "^17.0.24",
|
||||
"copyfiles": "^2.4.1",
|
||||
"electron": "^18.0.4",
|
||||
"electron-builder": "^23.0.3",
|
||||
"electron-builder": "^22.5.1",
|
||||
"husky": "^7.0.4",
|
||||
"prettier": "^2.5.1",
|
||||
"typescript": "^4.5.4"
|
||||
|
@ -35,7 +35,6 @@
|
|||
"electron-context-menu": "^3.1.2",
|
||||
"electron-json-storage": "^4.5.0",
|
||||
"electron-tabs": "^0.17.0",
|
||||
"glasstron": "^0.1.1",
|
||||
"v8-compile-cache": "^2.3.0"
|
||||
},
|
||||
"build": {
|
||||
|
@ -55,4 +54,4 @@
|
|||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*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 {
|
||||
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 {
|
||||
--window-buttons: var(--header-secondary);
|
||||
--cord-color: var(--header-primary);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
text.innerHTML = "You appear to be offline. Please connect to the internet and try again.";
|
||||
} else {
|
||||
text.innerHTML = "Starting ArmCord...";
|
||||
fetch("https://armcord.smartfridge.space/latest.json")
|
||||
fetch("https://armcord.xyz/latest.json")
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
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
|
||||
import {app, BrowserWindow, session} from "electron";
|
||||
import {app, BrowserWindow, session, dialog} from "electron";
|
||||
import * as path from "path";
|
||||
import "v8-compile-cache";
|
||||
import * as storage from "electron-json-storage";
|
||||
|
@ -7,7 +7,7 @@ import {getConfigUnsafe, setup} from "./utils";
|
|||
import "./extensions/mods";
|
||||
import "./extensions/plugin";
|
||||
import "./tray";
|
||||
import {mainWindow, createCustomWindow, createNativeWindow, createGlasstronWindow, createTabsHost} from "./window";
|
||||
import {mainWindow, createCustomWindow, createNativeWindow, createTabsHost} from "./window";
|
||||
import "./shortcuts";
|
||||
export var contentPath: string;
|
||||
var channel: string;
|
||||
|
@ -55,15 +55,8 @@ app.whenReady().then(async () => {
|
|||
createNativeWindow();
|
||||
break;
|
||||
case "glasstron":
|
||||
setTimeout(
|
||||
createGlasstronWindow,
|
||||
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.
|
||||
);
|
||||
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;
|
||||
case "tabs":
|
||||
createTabsHost();
|
||||
|
@ -94,7 +87,8 @@ app.whenReady().then(async () => {
|
|||
createNativeWindow();
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
createCustomWindow();
|
||||
|
|
|
@ -1,18 +1,17 @@
|
|||
import {BrowserWindow, shell, ipcMain} from "electron";
|
||||
import * as storage from "electron-json-storage";
|
||||
import {BrowserWindow, shell, ipcMain, app} from "electron";
|
||||
import {getConfigUnsafe, saveSettings, Settings} from "../utils";
|
||||
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 instance: number = 0;
|
||||
|
||||
export function createSettingsWindow() {
|
||||
if (isAlreadyCreated) {
|
||||
settingsWindow.show();
|
||||
console.log("Creating a settings window.");
|
||||
instance = instance + 1;
|
||||
if (instance > 1) {
|
||||
if (settingsWindow) {
|
||||
settingsWindow.show();
|
||||
settingsWindow.restore();
|
||||
}
|
||||
} else {
|
||||
settingsWindow = new BrowserWindow({
|
||||
width: 500,
|
||||
|
@ -37,10 +36,10 @@ export function createSettingsWindow() {
|
|||
return {action: "deny"};
|
||||
});
|
||||
settingsWindow.loadURL(`file://${__dirname}/settings.html`);
|
||||
settingsWindow.on("close", async (e) => {
|
||||
e.preventDefault();
|
||||
settingsWindow.hide();
|
||||
settingsWindow.on("close", (event: Event) => {
|
||||
ipcMain.removeHandler("getSetting");
|
||||
ipcMain.removeAllListeners("saveSettings");
|
||||
instance = 0;
|
||||
});
|
||||
isAlreadyCreated = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8" />
|
||||
<title>ArmCord Settings</title>
|
||||
<style>
|
||||
@import url("settings.css");
|
||||
@import url("../content/css/settings.css");
|
||||
</style>
|
||||
</head>
|
||||
|
||||
|
@ -13,8 +13,6 @@
|
|||
<select name="theme" id="theme" class="left">
|
||||
<option value="default">Default</option>
|
||||
<option value="native">Native</option>
|
||||
<option value="glasstron">Glasstron (experimental)</option>
|
||||
<option value="tabs">Tabs (experimental)</option>
|
||||
</select>
|
||||
<p class="header">ArmCord theme:</p>
|
||||
</div>
|
||||
|
@ -53,15 +51,7 @@
|
|||
</select>
|
||||
<p class="header">Client mod:</p>
|
||||
</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>
|
||||
</body>
|
||||
|
||||
|
@ -73,20 +63,19 @@
|
|||
document.getElementById("mod").value = await settings.get("mods");
|
||||
document.getElementById("channel").value = await settings.get("channel");
|
||||
document.getElementById("theme").value = await settings.get("windowStyle");
|
||||
document.getElementById("blurType").value = await settings.get("blurType");
|
||||
}
|
||||
loadSettings();
|
||||
document.getElementById("save").addEventListener("click", function () {
|
||||
//function saveSettings(windowStyle: string, channelSetting: string, armcordCSPSetting: boolean, minimizeToTray: boolean, automaticPatches: boolean,modsSetting: string, blurType: string)
|
||||
settings.save(
|
||||
document.getElementById("theme").value,
|
||||
document.getElementById("channel").value,
|
||||
document.getElementById("csp").checked,
|
||||
document.getElementById("tray").checked,
|
||||
document.getElementById("patches").checked,
|
||||
document.getElementById("mod").value,
|
||||
document.getElementById("blurType").value
|
||||
);
|
||||
settings.save({
|
||||
windowStyle: document.getElementById("theme").value,
|
||||
channel: document.getElementById("channel").value,
|
||||
armcordCSP: document.getElementById("csp").checked,
|
||||
minimizeToTray: document.getElementById("tray").checked,
|
||||
automaticPatches: document.getElementById("patches").checked,
|
||||
mods: document.getElementById("mod").value,
|
||||
blurType: "acrylic"
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</html>
|
||||
|
|
70
src/types/glasstron.d.ts
vendored
70
src/types/glasstron.d.ts
vendored
|
@ -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 fs from "fs";
|
||||
import {app} from "electron";
|
||||
import {app, dialog} from "electron";
|
||||
import path from "path";
|
||||
export var firstRun: boolean;
|
||||
|
||||
|
@ -21,12 +21,16 @@ export async function sleep(ms: number) {
|
|||
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
export async function checkIfConfigIsNew() {
|
||||
if ((await getConfigUnsafe("automaticPatches")) == undefined) {
|
||||
firstRun = true;
|
||||
export async function checkIfConfigIsBroken() {
|
||||
if ((await getConfigUnsafe("0")) == "d") {
|
||||
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 {
|
||||
windowStyle: string;
|
||||
channel: string;
|
||||
|
|
|
@ -2,14 +2,13 @@
|
|||
// 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
|
||||
// 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 {contentPath} from "./main";
|
||||
import {checkIfConfigIsNew, firstRun, getConfigUnsafe} from "./utils";
|
||||
import {registerIpc} from "./ipc";
|
||||
import contextMenu from "electron-context-menu";
|
||||
export let mainWindow: BrowserWindow;
|
||||
import * as glasstron from "glasstron";
|
||||
|
||||
let guestWindows: BrowserWindow[] = [];
|
||||
contextMenu({
|
||||
|
@ -37,7 +36,6 @@ function doAfterDefiningTheWindow() {
|
|||
mainWindow.hide();
|
||||
} else if (!(await getConfigUnsafe("minimizeToTray"))) {
|
||||
e.preventDefault();
|
||||
app.exit();
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
|
@ -96,28 +94,12 @@ export function createNativeWindow() {
|
|||
});
|
||||
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() {
|
||||
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;
|
||||
mainWindow = new BrowserWindow({
|
||||
width: 300,
|
||||
|
|
Loading…
Reference in a new issue