mirror of
https://github.com/smartfrigde/armcord.git
synced 2024-08-14 23:56:58 +00:00
(Attempt 2) A bunch of shit (#175)
* 2 new things (Read desc.) - Cleaned up ASAR packaging, ignoring unneeded files for building - Moved install location for Windows users ("AppData\Local\Programs" -> "AppData\Local" * 3 things (Read desc.) - Updated things related to Hummus (Hummus settings don't save nor load in it's respective settings window yet, idk why) - Added check for package version (ArmCord's internal version) - Made check for Kernel mod a bit cleaner, it still uses the same jank method * 3 things - Made macOS titlebar more accurate to Discord - Added "unFocused" class when window isn't focused - Added option to uninstall Husky hook for Windows users with reminder to run format script before committing * Resolved a dumb issue My dumbass not knowing the "echo" command existed smh * Made "precommit-fix" warning more noticable * Whoops * Fixed a CSS bug Discord updates are gonna hate us, huh?
This commit is contained in:
parent
ccb87c53d8
commit
fb6348ee82
16 changed files with 277 additions and 201 deletions
|
@ -11,7 +11,9 @@
|
||||||
"packageQuick": "npm run build && electron-builder --dir",
|
"packageQuick": "npm run build && electron-builder --dir",
|
||||||
"format": "prettier --write src/**/*",
|
"format": "prettier --write src/**/*",
|
||||||
"CIbuild": "npm run build && electron-builder --linux zip && electron-builder --windows zip && electron-builder --macos zip",
|
"CIbuild": "npm run build && electron-builder --linux zip && electron-builder --windows zip && electron-builder --macos zip",
|
||||||
"postinstall": "husky install"
|
"postinstall": "husky install",
|
||||||
|
"precommit-fix": "husky uninstall && echo - && echo !Make sure to run 'npm run format' before commiting! | chalk --stdin yellow inverse && echo -",
|
||||||
|
"precommit-fix:format": "husky uninstall && npm run format"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -31,7 +33,8 @@
|
||||||
"electron-builder": "^23.0.3",
|
"electron-builder": "^23.0.3",
|
||||||
"husky": "^8.0.1",
|
"husky": "^8.0.1",
|
||||||
"prettier": "^2.7.0",
|
"prettier": "^2.7.0",
|
||||||
"typescript": "^4.7.3"
|
"typescript": "^4.7.3",
|
||||||
|
"chalk-cli": "^5.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"electron-context-menu": "github:ArmCord/electron-context-menu",
|
"electron-context-menu": "github:ArmCord/electron-context-menu",
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
}
|
}
|
||||||
|
[customTitlebar] .backdrop-2ByYRN {
|
||||||
|
top: -30px;
|
||||||
|
padding-top: 30px;
|
||||||
|
}
|
||||||
* {
|
* {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +37,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.none-2-_0dP:hover::-webkit-scrollbar {
|
.none-2-_0dP:hover::-webkit-scrollbar {
|
||||||
width: 0.29em !important;
|
width: 0.3em !important;
|
||||||
border-radius: 25px;
|
border-radius: 25px;
|
||||||
height: 0px !important;
|
height: 0px !important;
|
||||||
background: transparent !important;
|
background: transparent !important;
|
||||||
|
|
|
@ -85,6 +85,10 @@ p {
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
.saveBar > button {
|
||||||
|
width: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
color: var(--header-primary);
|
color: var(--header-primary);
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
|
@ -128,6 +132,7 @@ p {
|
||||||
color: var(--header-primary);
|
color: var(--header-primary);
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
width: max-content;
|
||||||
}
|
}
|
||||||
/*buttons*/
|
/*buttons*/
|
||||||
button {
|
button {
|
||||||
|
@ -273,9 +278,12 @@ select {
|
||||||
.acClientMod {
|
.acClientMod {
|
||||||
height: 18em !important;
|
height: 18em !important;
|
||||||
}
|
}
|
||||||
|
.acCordwood {
|
||||||
|
height: 8em !important;
|
||||||
|
}
|
||||||
.acPrfmMode {
|
.acPrfmMode {
|
||||||
height: 10em !important;
|
height: 10em !important;
|
||||||
}
|
}
|
||||||
.acTray {
|
.acTray {
|
||||||
height: 7em !important;
|
height: 8em !important;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
height: 30px;
|
height: 30px;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
-webkit-app-region: drag;
|
-webkit-app-region: drag;
|
||||||
width: 100%;
|
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
@ -225,13 +224,22 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ArmCord on MacOS (Why would you do this?) */
|
/* ArmCord on MacOS (Why would you do this?) */
|
||||||
|
[armcord-platform="darwin"] .withFrame-haYltI {
|
||||||
|
height: 0px !important;
|
||||||
|
}
|
||||||
|
[armcord-platform="darwin"] .sidebar-1tnWFu {
|
||||||
|
border-top-left-radius: 0px !important;
|
||||||
|
}
|
||||||
|
[armcord-platform="darwin"] .scroller-3X7KbA {
|
||||||
|
padding-top: 35px !important;
|
||||||
|
}
|
||||||
[armcord-platform="darwin"] .container-2RRFHK {
|
[armcord-platform="darwin"] .container-2RRFHK {
|
||||||
padding-top: 45px;
|
padding-top: 48px;
|
||||||
top: -45px;
|
top: -48px;
|
||||||
}
|
}
|
||||||
[armcord-platform="darwin"] .titlebar {
|
[armcord-platform="darwin"] .titlebar {
|
||||||
height: 45px;
|
height: 48px;
|
||||||
line-height: 45px;
|
line-height: 48px;
|
||||||
}
|
}
|
||||||
[armcord-platform="darwin"] .titlebar #window-controls-container {
|
[armcord-platform="darwin"] .titlebar #window-controls-container {
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -239,7 +247,7 @@
|
||||||
height: 60%;
|
height: 60%;
|
||||||
line-height: 45px;
|
line-height: 45px;
|
||||||
-webkit-app-region: no-drag;
|
-webkit-app-region: no-drag;
|
||||||
transform: translate(-78px, 4px);
|
transform: translate(-82px, 4px);
|
||||||
}
|
}
|
||||||
|
|
||||||
[armcord-platform="darwin"] .titlebar #window-controls-container:hover #minimize #minimize-icon,
|
[armcord-platform="darwin"] .titlebar #window-controls-container:hover #minimize #minimize-icon,
|
||||||
|
@ -248,6 +256,13 @@
|
||||||
display: list-item;
|
display: list-item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[armcord-platform="darwin"][unFocused] .titlebar #window-controls-container #minimize,
|
||||||
|
[armcord-platform="darwin"][unFocused] .titlebar #window-controls-container #maximize,
|
||||||
|
[armcord-platform="darwin"][unFocused] .titlebar #window-controls-container #quit {
|
||||||
|
background-color: #d6d6d5 !important;
|
||||||
|
transition: background-color 0.1s ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
[armcord-platform="darwin"] .titlebar #window-controls-container #quit #quit-icon {
|
[armcord-platform="darwin"] .titlebar #window-controls-container #quit #quit-icon {
|
||||||
background-color: #79282b;
|
background-color: #79282b;
|
||||||
-webkit-mask: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNS4yOTI4OSA2TDIuODE4MDEgMy41MjUxM0wzLjUyNTEyIDIuODE4MDJMNS45OTk5OSA1LjI5Mjg5TDguNDc0ODcgMi44MTgwMkw5LjE4MTk3IDMuNTI1MTNMNi43MDcxIDZMOS4xODE5NyA4LjQ3NDg3TDguNDc0ODcgOS4xODE5OEw1Ljk5OTk5IDYuNzA3MTFMMy41MjUxMiA5LjE4MTk4TDIuODE4MDEgOC40NzQ4N0w1LjI5Mjg5IDZaIiBmaWxsPSJyZ2JhKDEyOCwgNiwgMCwgMSkiLz48L3N2Zz4=")
|
-webkit-mask: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNS4yOTI4OSA2TDIuODE4MDEgMy41MjUxM0wzLjUyNTEyIDIuODE4MDJMNS45OTk5OSA1LjI5Mjg5TDguNDc0ODcgMi44MTgwMkw5LjE4MTk3IDMuNTI1MTNMNi43MDcxIDZMOS4xODE5NyA4LjQ3NDg3TDguNDc0ODcgOS4xODE5OEw1Ljk5OTk5IDYuNzA3MTFMMy41MjUxMiA5LjE4MTk4TDIuODE4MDEgOC40NzQ4N0w1LjI5Mjg5IDZaIiBmaWxsPSJyZ2JhKDEyOCwgNiwgMCwgMSkiLz48L3N2Zz4=")
|
||||||
|
@ -275,6 +290,7 @@
|
||||||
|
|
||||||
[armcord-platform="darwin"] .titlebar #window-controls-container #minimize {
|
[armcord-platform="darwin"] .titlebar #window-controls-container #minimize {
|
||||||
background-color: #fac536;
|
background-color: #fac536;
|
||||||
|
transition: background-color 0.1s ease-in;
|
||||||
border: 1px solid #da9e10;
|
border: 1px solid #da9e10;
|
||||||
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30' width='13' height='13'%3E%3Cstyle%3E.a%7Bfill:%23808080%7D%3C/style%3E%3Ccircle class='a' cx='15' cy='15' r='15'/%3E%3C/svg%3E")
|
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30' width='13' height='13'%3E%3Cstyle%3E.a%7Bfill:%23808080%7D%3C/style%3E%3Ccircle class='a' cx='15' cy='15' r='15'/%3E%3C/svg%3E")
|
||||||
no-repeat 50% 50%;
|
no-repeat 50% 50%;
|
||||||
|
@ -284,6 +300,7 @@
|
||||||
}
|
}
|
||||||
[armcord-platform="darwin"] .titlebar #window-controls-container #maximize {
|
[armcord-platform="darwin"] .titlebar #window-controls-container #maximize {
|
||||||
background-color: #39ea49;
|
background-color: #39ea49;
|
||||||
|
transition: background-color 0.1s ease-in;
|
||||||
border: 1px solid #13c11e;
|
border: 1px solid #13c11e;
|
||||||
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30' width='13' height='13'%3E%3Cstyle%3E.a%7Bfill:%23808080%7D%3C/style%3E%3Ccircle class='a' cx='15' cy='15' r='15'/%3E%3C/svg%3E")
|
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30' width='13' height='13'%3E%3Cstyle%3E.a%7Bfill:%23808080%7D%3C/style%3E%3Ccircle class='a' cx='15' cy='15' r='15'/%3E%3C/svg%3E")
|
||||||
no-repeat 50% 50%;
|
no-repeat 50% 50%;
|
||||||
|
@ -293,6 +310,7 @@
|
||||||
}
|
}
|
||||||
[armcord-platform="darwin"] .titlebar #window-controls-container #quit {
|
[armcord-platform="darwin"] .titlebar #window-controls-container #quit {
|
||||||
background-color: #f25056;
|
background-color: #f25056;
|
||||||
|
transition: background-color 0.1s ease-in;
|
||||||
border: 1px solid #d52735;
|
border: 1px solid #d52735;
|
||||||
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30' width='13' height='13'%3E%3Cstyle%3E.a%7Bfill:%23808080%7D%3C/style%3E%3Ccircle class='a' cx='15' cy='15' r='15'/%3E%3C/svg%3E")
|
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30' width='13' height='13'%3E%3Cstyle%3E.a%7Bfill:%23808080%7D%3C/style%3E%3Ccircle class='a' cx='15' cy='15' r='15'/%3E%3C/svg%3E")
|
||||||
no-repeat 50% 50%;
|
no-repeat 50% 50%;
|
||||||
|
@ -331,13 +349,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
[armcord-platform="darwin"] .window-title {
|
[armcord-platform="darwin"] .window-title {
|
||||||
content: var(--wordmark-svg);
|
display: none;
|
||||||
height: 10px;
|
|
||||||
left: 50%;
|
|
||||||
margin-right: 50%;
|
|
||||||
transform: translate(50%, 9.5px);
|
|
||||||
float: right;
|
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[armcord-platform="linux"] .window-title,
|
[armcord-platform="linux"] .window-title,
|
||||||
|
|
19
src/ipc.ts
19
src/ipc.ts
|
@ -1,7 +1,7 @@
|
||||||
//ipc stuff
|
//ipc stuff
|
||||||
import {app, ipcMain, shell, desktopCapturer} from "electron";
|
import {app, ipcMain, shell, desktopCapturer} from "electron";
|
||||||
import {mainWindow} from "./window";
|
import {mainWindow} from "./window";
|
||||||
import {setConfigBulk, getVersion, getConfig, setLang, getLang, getWindowState} from "./utils";
|
import {setConfigBulk, getVersion, getConfig, setLang, getLang, getWindowState, packageVersion} from "./utils";
|
||||||
import {customTitlebar} from "./main";
|
import {customTitlebar} from "./main";
|
||||||
import {createSettingsWindow} from "./settings/main";
|
import {createSettingsWindow} from "./settings/main";
|
||||||
export function registerIpc() {
|
export function registerIpc() {
|
||||||
|
@ -44,21 +44,24 @@ export function registerIpc() {
|
||||||
ipcMain.on("get-app-version", (event) => {
|
ipcMain.on("get-app-version", (event) => {
|
||||||
event.returnValue = getVersion();
|
event.returnValue = getVersion();
|
||||||
});
|
});
|
||||||
|
ipcMain.on("get-package-version", (event) => {
|
||||||
|
event.returnValue = packageVersion;
|
||||||
|
});
|
||||||
ipcMain.on("splashEnd", async (event, arg) => {
|
ipcMain.on("splashEnd", async (event, arg) => {
|
||||||
try {
|
try {
|
||||||
var width = await getWindowState("width") ?? 800;
|
var width = (await getWindowState("width")) ?? 800;
|
||||||
var height= await getWindowState("height") ?? 600;
|
var height = (await getWindowState("height")) ?? 600;
|
||||||
var isMaximized = await getWindowState("isMaximized") ?? false;
|
var isMaximized = (await getWindowState("isMaximized")) ?? false;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("[Window state manager] No window state file found. Fallbacking to default values.")
|
console.log("[Window state manager] No window state file found. Fallbacking to default values.");
|
||||||
mainWindow.setSize(800, 600);
|
mainWindow.setSize(800, 600);
|
||||||
}
|
}
|
||||||
if (isMaximized) {
|
if (isMaximized) {
|
||||||
mainWindow.setSize(800, 600); //just so the whole thing doesn't cover whole screen
|
mainWindow.setSize(800, 600); //just so the whole thing doesn't cover whole screen
|
||||||
mainWindow.maximize()
|
mainWindow.maximize();
|
||||||
} else {
|
} else {
|
||||||
mainWindow.setSize(width, height);
|
mainWindow.setSize(width, height);
|
||||||
console.log("[Window state manager] Not maximized.")
|
console.log("[Window state manager] Not maximized.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ipcMain.on("restart", (event, arg) => {
|
ipcMain.on("restart", (event, arg) => {
|
||||||
|
|
|
@ -43,7 +43,7 @@ app.whenReady().then(async () => {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await init()
|
await init();
|
||||||
session.fromPartition("some-partition").setPermissionRequestHandler((webContents, permission, callback) => {
|
session.fromPartition("some-partition").setPermissionRequestHandler((webContents, permission, callback) => {
|
||||||
if (permission === "notifications") {
|
if (permission === "notifications") {
|
||||||
// Approves the permissions request
|
// Approves the permissions request
|
||||||
|
@ -55,7 +55,6 @@ app.whenReady().then(async () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
app.on("activate", async function () {
|
app.on("activate", async function () {
|
||||||
if (BrowserWindow.getAllWindows().length === 0)
|
if (BrowserWindow.getAllWindows().length === 0) await init();
|
||||||
await init()
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
110
src/menu.ts
110
src/menu.ts
|
@ -1,76 +1,84 @@
|
||||||
import { Menu, app, clipboard, globalShortcut } from "electron";
|
import {Menu, app, clipboard, globalShortcut} from "electron";
|
||||||
import {mainWindow} from "./window";
|
import {mainWindow} from "./window";
|
||||||
import {getConfig} from "./utils";
|
import {getConfig} from "./utils";
|
||||||
|
|
||||||
function paste(contents: any) {
|
function paste(contents: any) {
|
||||||
const contentTypes = clipboard.availableFormats().toString();
|
const contentTypes = clipboard.availableFormats().toString();
|
||||||
//Workaround: fix pasting the images.
|
//Workaround: fix pasting the images.
|
||||||
if(contentTypes.includes('image/') && contentTypes.includes('text/html')) {
|
if (contentTypes.includes("image/") && contentTypes.includes("text/html")) {
|
||||||
clipboard.writeImage(clipboard.readImage());
|
clipboard.writeImage(clipboard.readImage());
|
||||||
}
|
}
|
||||||
contents.paste();
|
contents.paste();
|
||||||
}
|
}
|
||||||
export async function setMenu() {
|
export async function setMenu() {
|
||||||
if (await getConfig("alternativePaste") == true) {
|
if ((await getConfig("alternativePaste")) == true) {
|
||||||
mainWindow.on("focus", function () {
|
mainWindow.on("focus", function () {
|
||||||
console.log("[Window state manager] Focus")
|
console.log("[Window state manager] Focus");
|
||||||
globalShortcut.register("CmdOrCtrl+V", function () {
|
globalShortcut.register("CmdOrCtrl+V", function () {
|
||||||
if (mainWindow.isFocused()) {
|
if (mainWindow.isFocused()) {
|
||||||
paste(mainWindow.webContents)
|
paste(mainWindow.webContents);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
mainWindow.on("show", function () {
|
mainWindow.on("show", function () {
|
||||||
console.log("[Window state manager] Show")
|
console.log("[Window state manager] Show");
|
||||||
mainWindow.focus()
|
mainWindow.focus();
|
||||||
globalShortcut.register("CmdOrCtrl+V", function () {
|
globalShortcut.register("CmdOrCtrl+V", function () {
|
||||||
if (mainWindow.isFocused()) {
|
if (mainWindow.isFocused()) {
|
||||||
paste(mainWindow.webContents)
|
paste(mainWindow.webContents);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
mainWindow.on("blur", function () {
|
mainWindow.on("blur", function () {
|
||||||
console.log("[Window state manager] Defocus")
|
console.log("[Window state manager] Defocus");
|
||||||
globalShortcut.unregister("CmdOrCtrl+V")
|
globalShortcut.unregister("CmdOrCtrl+V");
|
||||||
})
|
});
|
||||||
mainWindow.on("hide", function () {
|
mainWindow.on("hide", function () {
|
||||||
console.log("[Window state manager] Hide")
|
console.log("[Window state manager] Hide");
|
||||||
globalShortcut.unregister("CmdOrCtrl+V")
|
globalShortcut.unregister("CmdOrCtrl+V");
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
var template: Electron.MenuItemConstructorOptions[] = [{
|
var template: Electron.MenuItemConstructorOptions[] = [
|
||||||
label: "ArmCord",
|
{
|
||||||
submenu: [
|
label: "ArmCord",
|
||||||
{label: "About ArmCord", role: "about"},//orderFrontStandardAboutPanel
|
submenu: [
|
||||||
{type: "separator"},
|
{label: "About ArmCord", role: "about"}, //orderFrontStandardAboutPanel
|
||||||
{
|
{type: "separator"},
|
||||||
label: "Developer tools", accelerator: "CmdOrCtrl+Shift+I", click: function () {
|
{
|
||||||
mainWindow.webContents.openDevTools()
|
label: "Developer tools",
|
||||||
|
accelerator: "CmdOrCtrl+Shift+I",
|
||||||
|
click: function () {
|
||||||
|
mainWindow.webContents.openDevTools();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Quit",
|
||||||
|
accelerator: "CmdOrCtrl+Q",
|
||||||
|
click: function () {
|
||||||
|
app.quit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
label: "Quit", accelerator: "CmdOrCtrl+Q", click: function () {
|
{
|
||||||
app.quit();
|
label: "Edit",
|
||||||
}
|
submenu: [
|
||||||
}
|
{label: "Undo", accelerator: "CmdOrCtrl+Z", role: "undo"},
|
||||||
]
|
{label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", role: "redo"},
|
||||||
}, {
|
{type: "separator"},
|
||||||
label: "Edit",
|
{label: "Cut", accelerator: "CmdOrCtrl+X", role: "cut"},
|
||||||
submenu: [
|
{label: "Copy", accelerator: "CmdOrCtrl+C", role: "copy"},
|
||||||
{label: "Undo", accelerator: "CmdOrCtrl+Z", role: "undo"},
|
{
|
||||||
{label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", role: "redo"},
|
label: "Paste",
|
||||||
{type: "separator"},
|
accelerator: "CmdOrCtrl+V",
|
||||||
{label: "Cut", accelerator: "CmdOrCtrl+X", role: "cut"},
|
click: function () {
|
||||||
{label: "Copy", accelerator: "CmdOrCtrl+C", role: "copy"},
|
paste(mainWindow.webContents);
|
||||||
{
|
}
|
||||||
label: "Paste", accelerator: "CmdOrCtrl+V", click: function () {
|
},
|
||||||
paste(mainWindow.webContents)
|
{label: "Select All", accelerator: "CmdOrCtrl+A", role: "selectAll"}
|
||||||
}
|
]
|
||||||
},
|
}
|
||||||
{label: "Select All", accelerator: "CmdOrCtrl+A", role: "selectAll"}
|
];
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
|
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ contextBridge.exposeInMainWorld("armcord", {
|
||||||
return result;
|
return result;
|
||||||
}),
|
}),
|
||||||
version: ipcRenderer.sendSync("get-app-version", "app-version"),
|
version: ipcRenderer.sendSync("get-app-version", "app-version"),
|
||||||
|
packageVersion: ipcRenderer.sendSync("get-package-version", "app-version"),
|
||||||
getDisplayMediaSelector: getDisplayMediaSelector,
|
getDisplayMediaSelector: getDisplayMediaSelector,
|
||||||
openSettingsWindow: () => ipcRenderer.send("openSettingsWindow")
|
openSettingsWindow: () => ipcRenderer.send("openSettingsWindow")
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {sleep, addStyle, injectJS, addScript} from "../utils";
|
||||||
import {ipcRenderer} from "electron";
|
import {ipcRenderer} from "electron";
|
||||||
import {injectMobileStuff} from "./mobile";
|
import {injectMobileStuff} from "./mobile";
|
||||||
var version = ipcRenderer.sendSync("get-app-version", "app-version");
|
var version = ipcRenderer.sendSync("get-app-version", "app-version");
|
||||||
|
var channel = ipcRenderer.sendSync("channel");
|
||||||
async function updateLang() {
|
async function updateLang() {
|
||||||
if (window.location.href.indexOf("setup.html") > -1) {
|
if (window.location.href.indexOf("setup.html") > -1) {
|
||||||
console.log("Setup, skipping lang update");
|
console.log("Setup, skipping lang update");
|
||||||
|
@ -37,7 +38,7 @@ if (window.location.href.indexOf("splash.html") > -1) {
|
||||||
console.log("Skipping titlebar injection and client mod injection.");
|
console.log("Skipping titlebar injection and client mod injection.");
|
||||||
} else {
|
} else {
|
||||||
if (ipcRenderer.sendSync("titlebar")) {
|
if (ipcRenderer.sendSync("titlebar")) {
|
||||||
if (ipcRenderer.sendSync("channel")) {
|
if (channel == "hummus") {
|
||||||
injectHummusTitlebar();
|
injectHummusTitlebar();
|
||||||
} else {
|
} else {
|
||||||
injectTitlebar();
|
injectTitlebar();
|
||||||
|
|
|
@ -64,9 +64,18 @@ export function injectHummusTitlebar() {
|
||||||
elem.classList.add("win-buttons-light");
|
elem.classList.add("win-buttons-light");
|
||||||
document.getElementsByClassName("titlebar")[0].appendChild(elem);
|
document.getElementsByClassName("titlebar")[0].appendChild(elem);
|
||||||
document.body.setAttribute("customTitlebar", "");
|
document.body.setAttribute("customTitlebar", "");
|
||||||
|
document.body.setAttribute("hummus", "");
|
||||||
document.body.setAttribute("armcord-platform", os.platform());
|
document.body.setAttribute("armcord-platform", os.platform());
|
||||||
addStyle(".chat>.title-wrap {width: 87% !important;}");
|
addStyle(`
|
||||||
addStyle(".friends-header {width: 91% !important;}");
|
html, body {
|
||||||
|
background-color: #1e2124;
|
||||||
|
}
|
||||||
|
|
||||||
|
.friends-header,
|
||||||
|
.chat > .title-wrap {
|
||||||
|
float: right !important;
|
||||||
|
padding-right: 140px !important;
|
||||||
|
}`);
|
||||||
var minimize = document.getElementById("minimize");
|
var minimize = document.getElementById("minimize");
|
||||||
var maximize = document.getElementById("maximize");
|
var maximize = document.getElementById("maximize");
|
||||||
var quit = document.getElementById("quit");
|
var quit = document.getElementById("quit");
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
<title>ArmCord Settings</title>
|
<title>ArmCord Settings</title>
|
||||||
<style>
|
<style>
|
||||||
@import url("../content/css/settings.css");
|
@import url("../content/css/settings.css");
|
||||||
|
.acAdvSettings {
|
||||||
|
height: 19em !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
@ -79,7 +82,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div class="switch acAltPaste">
|
<div class="switch acCordwood">
|
||||||
<label class="header2" id="settings-cordwood">Cordwood client mod</label>
|
<label class="header2" id="settings-cordwood">Cordwood client mod</label>
|
||||||
<input class="tgl tgl-light left" id="cordwood" type="checkbox" />
|
<input class="tgl tgl-light left" id="cordwood" type="checkbox" />
|
||||||
<label class="tgl-btn left" for="cordwood"></label>
|
<label class="tgl-btn left" for="cordwood"></label>
|
||||||
|
@ -116,14 +119,16 @@
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<h1 class="center advancedText">⚠️Advanced user zone⚠️</h1>
|
<div class="switch acAdvSettings">
|
||||||
<button id="settings-pluginsFolder" class="center">Open plugins folder</button>
|
<h1 class="center advancedText">⚠️ Advanced User Zone ⚠️</h1>
|
||||||
<br />
|
<button id="settings-pluginsFolder" class="center">Open Plugins Folder</button>
|
||||||
<button id="settings-themesFolder" class="center">Open themes folder</button>
|
<br />
|
||||||
<br />
|
<button id="settings-themesFolder" class="center">Open Themes Folder</button>
|
||||||
<button id="settings-storageFolder" class="center">Open storage folder</button>
|
<br />
|
||||||
<br />
|
<button id="settings-storageFolder" class="center">Open Storage Folder</button>
|
||||||
<button id="settings-copyDebugInfo" class="center">Copy debug info</button>
|
<br />
|
||||||
|
<button id="settings-copyDebugInfo" class="center">Copy Debug Info</button>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
<script>
|
<script>
|
||||||
async function loadLang() {
|
async function loadLang() {
|
||||||
|
|
|
@ -29,6 +29,14 @@ export function createSettingsWindow() {
|
||||||
preload: path.join(__dirname, "preload.js")
|
preload: path.join(__dirname, "preload.js")
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
async function settingsLoadPage() {
|
||||||
|
if ((await getConfig("channel")) == "hummus") {
|
||||||
|
settingsWindow.loadURL(`file://${__dirname}/hummus.html`);
|
||||||
|
} else {
|
||||||
|
settingsWindow.loadURL(`file://${__dirname}/settings.html`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ipcMain.on("saveSettings", (event, args: Settings) => {
|
ipcMain.on("saveSettings", (event, args: Settings) => {
|
||||||
console.log(args);
|
console.log(args);
|
||||||
setConfigBulk(args);
|
setConfigBulk(args);
|
||||||
|
@ -67,7 +75,7 @@ export function createSettingsWindow() {
|
||||||
shell.openExternal(url);
|
shell.openExternal(url);
|
||||||
return {action: "deny"};
|
return {action: "deny"};
|
||||||
});
|
});
|
||||||
settingsWindow.loadURL(`file://${__dirname}/settings.html`);
|
settingsLoadPage();
|
||||||
settingsWindow.on("close", (event: Event) => {
|
settingsWindow.on("close", (event: Event) => {
|
||||||
ipcMain.removeHandler("getSetting");
|
ipcMain.removeHandler("getSetting");
|
||||||
ipcMain.removeAllListeners("saveSettings");
|
ipcMain.removeAllListeners("saveSettings");
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
<title>ArmCord Settings</title>
|
<title>ArmCord Settings</title>
|
||||||
<style>
|
<style>
|
||||||
@import url("../content/css/settings.css");
|
@import url("../content/css/settings.css");
|
||||||
|
.acAdvSettings {
|
||||||
|
height: 26em !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
@ -168,21 +171,22 @@
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<h1 class="center advancedText">⚠️Advanced user zone⚠️</h1>
|
<div class="switch acAdvSettings">
|
||||||
<div class="switch acAltPaste">
|
<h1 class="center advancedText">⚠️ Advanced User Zone ⚠️</h1>
|
||||||
<label class="header2" id="settings-skipSplash">Skip splash screen (experimental)</label>
|
<br />
|
||||||
|
<label class="header2" id="settings-skipSplash">Skip Splash Screen (Experimental)</label>
|
||||||
<input class="tgl tgl-light left" id="skipSplash" type="checkbox" />
|
<input class="tgl tgl-light left" id="skipSplash" type="checkbox" />
|
||||||
<label class="tgl-btn left" for="skipSplash"></label>
|
<label class="tgl-btn left" for="skipSplash"></label>
|
||||||
<p class="description2">Skips ArmCord splash screen when you start up the app.</p>
|
<p class="description2">Skips ArmCord splash screen when you start up the app.</p>
|
||||||
|
<br />
|
||||||
|
<button id="settings-pluginsFolder" class="center">Open Plugins Folder</button>
|
||||||
|
<br />
|
||||||
|
<button id="settings-themesFolder" class="center">Open Themes Folder</button>
|
||||||
|
<br />
|
||||||
|
<button id="settings-storageFolder" class="center">Open Storage Folder</button>
|
||||||
|
<br />
|
||||||
|
<button id="settings-copyDebugInfo" class="center">Copy Debug Info</button>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
|
||||||
<button id="settings-pluginsFolder" class="center">Open plugins folder</button>
|
|
||||||
<br />
|
|
||||||
<button id="settings-themesFolder" class="center">Open themes folder</button>
|
|
||||||
<br />
|
|
||||||
<button id="settings-storageFolder" class="center">Open storage folder</button>
|
|
||||||
<br />
|
|
||||||
<button id="settings-copyDebugInfo" class="center">Copy debug info</button>
|
|
||||||
</body>
|
</body>
|
||||||
<script>
|
<script>
|
||||||
async function loadLang() {
|
async function loadLang() {
|
||||||
|
|
115
src/tray.ts
115
src/tray.ts
|
@ -1,16 +1,15 @@
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import { app, Menu, Tray, nativeImage} from "electron";
|
import {app, Menu, Tray, nativeImage} from "electron";
|
||||||
import { mainWindow } from "./window";
|
import {mainWindow} from "./window";
|
||||||
import { getConfig, getConfigLocation, setWindowState } from "./utils";
|
import {getConfig, getConfigLocation, setWindowState} from "./utils";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import { createSettingsWindow } from "./settings/main";
|
import {createSettingsWindow} from "./settings/main";
|
||||||
let tray: any = null;
|
let tray: any = null;
|
||||||
app.whenReady().then(async () => {
|
app.whenReady().then(async () => {
|
||||||
let finishedSetup = (await getConfig("doneSetup"));
|
let finishedSetup = await getConfig("doneSetup");
|
||||||
var trayIcon = (await getConfig("trayIcon")) ?? "ac_plug_colored";
|
var trayIcon = (await getConfig("trayIcon")) ?? "ac_plug_colored";
|
||||||
let trayPath = nativeImage.createFromPath(path.join(__dirname, "../", `/assets/${trayIcon}.png`));
|
let trayPath = nativeImage.createFromPath(path.join(__dirname, "../", `/assets/${trayIcon}.png`));
|
||||||
if(process.platform === "darwin" && trayPath.getSize().height > 22)
|
if (process.platform === "darwin" && trayPath.getSize().height > 22) trayPath = trayIcon.resize({height: 22});
|
||||||
trayPath = trayIcon.resize({height: 22});
|
|
||||||
if ((await getConfig("windowStyle")) == "basic") {
|
if ((await getConfig("windowStyle")) == "basic") {
|
||||||
var clientName = (await getConfig("clientName")) ?? "ArmCord";
|
var clientName = (await getConfig("clientName")) ?? "ArmCord";
|
||||||
tray = new Tray(trayPath);
|
tray = new Tray(trayPath);
|
||||||
|
@ -28,7 +27,7 @@ app.whenReady().then(async () => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log('Closed during setup. "settings.json" was deleted');
|
console.log('Closed during setup. "settings.json" was deleted');
|
||||||
app.quit();
|
app.quit();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
@ -43,18 +42,18 @@ app.whenReady().then(async () => {
|
||||||
{
|
{
|
||||||
label: `Quit ${clientName}`,
|
label: `Quit ${clientName}`,
|
||||||
click: function () {
|
click: function () {
|
||||||
let [width, height] = mainWindow.getSize()
|
let [width, height] = mainWindow.getSize();
|
||||||
setWindowState({
|
setWindowState({
|
||||||
width: width,
|
width: width,
|
||||||
height: height,
|
height: height,
|
||||||
isMaximized: mainWindow.isMaximized()
|
isMaximized: mainWindow.isMaximized()
|
||||||
})
|
});
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
tray.setToolTip(clientName);
|
tray.setToolTip(clientName);
|
||||||
tray.setContextMenu(contextMenu);
|
tray.setContextMenu(contextMenu);
|
||||||
|
@ -74,57 +73,55 @@ app.whenReady().then(async () => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
console.log('Closed during setup. "settings.json" was deleted');
|
console.log('Closed during setup. "settings.json" was deleted');
|
||||||
app.quit();
|
app.quit();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
tray.setContextMenu(contextMenu);
|
tray.setContextMenu(contextMenu);
|
||||||
} else {
|
} else {
|
||||||
const contextMenu = Menu.buildFromTemplate([
|
const contextMenu = Menu.buildFromTemplate([
|
||||||
{
|
{
|
||||||
label: `${clientName} ` + app.getVersion(),
|
label: `${clientName} ` + app.getVersion(),
|
||||||
enabled: false
|
enabled: false
|
||||||
|
},
|
||||||
},
|
{
|
||||||
{
|
type: "separator"
|
||||||
type: "separator"
|
},
|
||||||
},
|
{
|
||||||
{
|
label: `Open ${clientName}`,
|
||||||
label: `Open ${clientName}`,
|
click: function () {
|
||||||
click: function () {
|
mainWindow.show();
|
||||||
mainWindow.show();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Open Settings",
|
|
||||||
click: function () {
|
|
||||||
createSettingsWindow();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Support Discord Server",
|
|
||||||
click: function () {
|
|
||||||
mainWindow.show();
|
|
||||||
mainWindow.loadURL("https://discord.gg/TnhxcqynZ2");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "separator"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: `Quit ${clientName}`,
|
|
||||||
click: function () {
|
|
||||||
app.quit();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]);
|
},
|
||||||
tray.setContextMenu(contextMenu);
|
{
|
||||||
}
|
label: "Open Settings",
|
||||||
|
click: function () {
|
||||||
|
createSettingsWindow();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Support Discord Server",
|
||||||
|
click: function () {
|
||||||
|
mainWindow.show();
|
||||||
|
mainWindow.loadURL("https://discord.gg/TnhxcqynZ2");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "separator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: `Quit ${clientName}`,
|
||||||
|
click: function () {
|
||||||
|
app.quit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
tray.setContextMenu(contextMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
tray.setToolTip(clientName);
|
|
||||||
tray.on('click', function(){
|
|
||||||
mainWindow.show()
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
);
|
|
||||||
|
tray.setToolTip(clientName);
|
||||||
|
tray.on("click", function () {
|
||||||
|
mainWindow.show();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
30
src/utils.ts
30
src/utils.ts
|
@ -1,5 +1,5 @@
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import { app, dialog } from "electron";
|
import {app, dialog} from "electron";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
export var firstRun: boolean;
|
export var firstRun: boolean;
|
||||||
export var contentPath: string;
|
export var contentPath: string;
|
||||||
|
@ -53,15 +53,17 @@ export function setup() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get the version value from the "package.json" file
|
||||||
|
export var packageVersion = require("../package.json").version;
|
||||||
|
|
||||||
//I'm too lazy to replace every mf reference so :p
|
|
||||||
export function getVersion() {
|
export function getVersion() {
|
||||||
//Checks if the version # has 4 sections (3.1.0.0) instead of 3 (3.1.0) / Shitty way to check if Kernel Mod is installed
|
//Checks if the app version # has 4 sections (3.1.0.0) instead of 3 (3.1.0) / Shitty way to check if Kernel Mod is installed
|
||||||
if (((app.getVersion()).split('.').length > 3) == true) {
|
if ((app.getVersion() == packageVersion) == false) {
|
||||||
return app.getVersion().split('.')[0] + "." + app.getVersion().split('.')[1] + "." + app.getVersion().split('.')[2] + " [Kernel Mod]";
|
return `${packageVersion} [Kernel Mod]`;
|
||||||
} else {
|
} else {
|
||||||
return app.getVersion();
|
return packageVersion;
|
||||||
}}
|
}
|
||||||
|
}
|
||||||
export async function injectJS(inject: string) {
|
export async function injectJS(inject: string) {
|
||||||
const js = await (await fetch(`${inject}`)).text();
|
const js = await (await fetch(`${inject}`)).text();
|
||||||
|
|
||||||
|
@ -132,8 +134,8 @@ export async function getLang(object: string) {
|
||||||
let parsed = JSON.parse(rawdata);
|
let parsed = JSON.parse(rawdata);
|
||||||
language = parsed["lang"];
|
language = parsed["lang"];
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("Language config file doesn't exist. Fallback to English.")
|
console.log("Language config file doesn't exist. Fallback to English.");
|
||||||
language = "en-US"
|
language = "en-US";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (language.length == 2) {
|
if (language.length == 2) {
|
||||||
|
@ -146,11 +148,11 @@ export async function getLang(object: string) {
|
||||||
let rawdata = fs.readFileSync(langPath, "utf-8");
|
let rawdata = fs.readFileSync(langPath, "utf-8");
|
||||||
let parsed = JSON.parse(rawdata);
|
let parsed = JSON.parse(rawdata);
|
||||||
if (parsed[object] == undefined) {
|
if (parsed[object] == undefined) {
|
||||||
console.log(object + " is undefined in " + language)
|
console.log(object + " is undefined in " + language);
|
||||||
langPath = path.join(__dirname, "../", "/assets/lang/en-US.json");
|
langPath = path.join(__dirname, "../", "/assets/lang/en-US.json");
|
||||||
rawdata = fs.readFileSync(langPath, "utf-8");
|
rawdata = fs.readFileSync(langPath, "utf-8");
|
||||||
parsed = JSON.parse(rawdata);
|
parsed = JSON.parse(rawdata);
|
||||||
return parsed[object]
|
return parsed[object];
|
||||||
} else {
|
} else {
|
||||||
return parsed[object];
|
return parsed[object];
|
||||||
}
|
}
|
||||||
|
@ -191,8 +193,8 @@ export interface Settings {
|
||||||
automaticPatches: boolean;
|
automaticPatches: boolean;
|
||||||
alternativePaste: boolean;
|
alternativePaste: boolean;
|
||||||
mods: string;
|
mods: string;
|
||||||
mobileMode: boolean,
|
mobileMode: boolean;
|
||||||
skipSplash: boolean,
|
skipSplash: boolean;
|
||||||
performanceMode: string;
|
performanceMode: string;
|
||||||
inviteWebsocket: boolean;
|
inviteWebsocket: boolean;
|
||||||
trayIcon: string;
|
trayIcon: string;
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
// 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, dialog } from "electron";
|
import {BrowserWindow, shell, app, dialog} from "electron";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { checkIfConfigIsBroken, firstRun, getConfig, contentPath, setConfig, setLang, setWindowState } from "./utils";
|
import {checkIfConfigIsBroken, firstRun, getConfig, contentPath, setConfig, setLang, setWindowState} from "./utils";
|
||||||
import { registerIpc } from "./ipc";
|
import {registerIpc} from "./ipc";
|
||||||
import { setMenu } from "./menu";
|
import {setMenu} from "./menu";
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import startServer from "./socket";
|
import startServer from "./socket";
|
||||||
import contextMenu from "electron-context-menu";
|
import contextMenu from "electron-context-menu";
|
||||||
|
@ -14,7 +14,7 @@ import os from "os";
|
||||||
export var icon: string;
|
export var icon: string;
|
||||||
export let mainWindow: BrowserWindow;
|
export let mainWindow: BrowserWindow;
|
||||||
export let inviteWindow: BrowserWindow;
|
export let inviteWindow: BrowserWindow;
|
||||||
var osType = os.type()
|
var osType = os.type();
|
||||||
|
|
||||||
contextMenu({
|
contextMenu({
|
||||||
showSaveImageAs: true,
|
showSaveImageAs: true,
|
||||||
|
@ -27,16 +27,17 @@ async function doAfterDefiningTheWindow() {
|
||||||
checkIfConfigIsBroken();
|
checkIfConfigIsBroken();
|
||||||
registerIpc();
|
registerIpc();
|
||||||
if (await getConfig("mobileMode")) {
|
if (await getConfig("mobileMode")) {
|
||||||
mainWindow.webContents.userAgent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.149 Mobile Safari/537.36"
|
mainWindow.webContents.userAgent =
|
||||||
|
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.149 Mobile Safari/537.36";
|
||||||
} else {
|
} else {
|
||||||
// A little sloppy but it works :p
|
// A little sloppy but it works :p
|
||||||
if (osType == 'Windows_NT') {
|
if (osType == "Windows_NT") {
|
||||||
osType = "Windows " + os.release().split('.')[0] + " (" + os.release() + ")";
|
osType = "Windows " + os.release().split(".")[0] + " (" + os.release() + ")";
|
||||||
}
|
}
|
||||||
mainWindow.webContents.userAgent = `Mozilla/5.0 (X11; ${osType} ${os.arch()}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36`; //fake useragent for screenshare to work
|
mainWindow.webContents.userAgent = `Mozilla/5.0 (X11; ${osType} ${os.arch()}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36`; //fake useragent for screenshare to work
|
||||||
}
|
}
|
||||||
|
|
||||||
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
|
mainWindow.webContents.setWindowOpenHandler(({url}) => {
|
||||||
if (url.startsWith("https:" || url.startsWith("http:") || url.startsWith("mailto:"))) {
|
if (url.startsWith("https:" || url.startsWith("http:") || url.startsWith("mailto:"))) {
|
||||||
shell.openExternal(url);
|
shell.openExternal(url);
|
||||||
} else {
|
} else {
|
||||||
|
@ -54,7 +55,7 @@ async function doAfterDefiningTheWindow() {
|
||||||
checkboxChecked: false
|
checkboxChecked: false
|
||||||
};
|
};
|
||||||
|
|
||||||
dialog.showMessageBox(mainWindow, options).then(({ response, checkboxChecked }) => {
|
dialog.showMessageBox(mainWindow, options).then(({response, checkboxChecked}) => {
|
||||||
console.log(response, checkboxChecked);
|
console.log(response, checkboxChecked);
|
||||||
if (checkboxChecked) {
|
if (checkboxChecked) {
|
||||||
if (response == 0) {
|
if (response == 0) {
|
||||||
|
@ -71,10 +72,10 @@ async function doAfterDefiningTheWindow() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { action: "deny" };
|
return {action: "deny"};
|
||||||
});
|
});
|
||||||
mainWindow.webContents.session.webRequest.onBeforeRequest((details, callback) => {
|
mainWindow.webContents.session.webRequest.onBeforeRequest((details, callback) => {
|
||||||
if (/api\/v\d\/science$/g.test(details.url)) return callback({ cancel: true });
|
if (/api\/v\d\/science$/g.test(details.url)) return callback({cancel: true});
|
||||||
return callback({});
|
return callback({});
|
||||||
});
|
});
|
||||||
const userDataPath = app.getPath("userData");
|
const userDataPath = app.getPath("userData");
|
||||||
|
@ -83,26 +84,29 @@ async function doAfterDefiningTheWindow() {
|
||||||
fs.mkdirSync(themesFolder);
|
fs.mkdirSync(themesFolder);
|
||||||
console.log("Created missing theme folder");
|
console.log("Created missing theme folder");
|
||||||
}
|
}
|
||||||
mainWindow.webContents.on('did-finish-load', () => {
|
mainWindow.webContents.on("did-finish-load", () => {
|
||||||
fs.readdirSync(themesFolder).forEach((file) => {
|
fs.readdirSync(themesFolder).forEach((file) => {
|
||||||
try {
|
try {
|
||||||
const manifest = fs.readFileSync(`${themesFolder}/${file}/manifest.json`, "utf8");
|
const manifest = fs.readFileSync(`${themesFolder}/${file}/manifest.json`, "utf8");
|
||||||
var themeFile = JSON.parse(manifest);
|
var themeFile = JSON.parse(manifest);
|
||||||
mainWindow.webContents.send("themeLoader", fs.readFileSync(`${themesFolder}/${file}/${themeFile.theme}`, "utf-8"))
|
mainWindow.webContents.send(
|
||||||
|
"themeLoader",
|
||||||
|
fs.readFileSync(`${themesFolder}/${file}/${themeFile.theme}`, "utf-8")
|
||||||
|
);
|
||||||
console.log(`%cLoaded ${themeFile.name} made by ${themeFile.author}`, "color:red");
|
console.log(`%cLoaded ${themeFile.name} made by ${themeFile.author}`, "color:red");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
setMenu()
|
setMenu();
|
||||||
mainWindow.on("close", async (e) => {
|
mainWindow.on("close", async (e) => {
|
||||||
let [width, height] = mainWindow.getSize()
|
let [width, height] = mainWindow.getSize();
|
||||||
setWindowState({
|
setWindowState({
|
||||||
width: width,
|
width: width,
|
||||||
height: height,
|
height: height,
|
||||||
isMaximized: mainWindow.isMaximized()
|
isMaximized: mainWindow.isMaximized()
|
||||||
})
|
});
|
||||||
if (await getConfig("minimizeToTray")) {
|
if (await getConfig("minimizeToTray")) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
mainWindow.hide();
|
mainWindow.hide();
|
||||||
|
@ -111,22 +115,30 @@ async function doAfterDefiningTheWindow() {
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mainWindow.on('maximize', () => {
|
|
||||||
mainWindow.webContents.executeJavaScript(`document.body.setAttribute("isMaximized", "");`)
|
mainWindow.on("focus", () => {
|
||||||
})
|
mainWindow.webContents.executeJavaScript(`document.body.removeAttribute("unFocused");`);
|
||||||
mainWindow.on('unmaximize', () => {
|
});
|
||||||
mainWindow.webContents.executeJavaScript(`document.body.removeAttribute("isMaximized");`)
|
mainWindow.on("blur", () => {
|
||||||
})
|
mainWindow.webContents.executeJavaScript(`document.body.setAttribute("unFocused", "");`);
|
||||||
|
});
|
||||||
|
|
||||||
|
mainWindow.on("maximize", () => {
|
||||||
|
mainWindow.webContents.executeJavaScript(`document.body.setAttribute("isMaximized", "");`);
|
||||||
|
});
|
||||||
|
mainWindow.on("unmaximize", () => {
|
||||||
|
mainWindow.webContents.executeJavaScript(`document.body.removeAttribute("isMaximized");`);
|
||||||
|
});
|
||||||
console.log(contentPath);
|
console.log(contentPath);
|
||||||
if ((await getConfig("inviteWebsocket")) == true) {
|
if ((await getConfig("inviteWebsocket")) == true) {
|
||||||
await startServer();
|
await startServer();
|
||||||
}
|
}
|
||||||
if (firstRun) {
|
if (firstRun) {
|
||||||
await setLang(Intl.DateTimeFormat().resolvedOptions().locale)
|
await setLang(Intl.DateTimeFormat().resolvedOptions().locale);
|
||||||
mainWindow.setSize(390, 470);
|
mainWindow.setSize(390, 470);
|
||||||
await mainWindow.loadFile(path.join(__dirname, "/content/setup.html"));
|
await mainWindow.loadFile(path.join(__dirname, "/content/setup.html"));
|
||||||
} else {
|
} else {
|
||||||
if (await getConfig("skipSplash") == true) {
|
if ((await getConfig("skipSplash")) == true) {
|
||||||
switch (await getConfig("channel")) {
|
switch (await getConfig("channel")) {
|
||||||
case "stable":
|
case "stable":
|
||||||
mainWindow.loadURL("https://discord.com/app");
|
mainWindow.loadURL("https://discord.com/app");
|
||||||
|
|
Loading…
Reference in a new issue