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
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue