mirror of
				https://github.com/smartfrigde/armcord.git
				synced 2024-08-14 23:56:58 +00:00 
			
		
		
		
	Add local crash reporter
This commit is contained in:
		
							parent
							
								
									def0601e2c
								
							
						
					
					
						commit
						c8c4e1a877
					
				
					 7 changed files with 39 additions and 116 deletions
				
			
		|  | @ -59,6 +59,7 @@ | ||||||
|     "settings-trayIcon-black-plug-alt": "Black Plug Alt", |     "settings-trayIcon-black-plug-alt": "Black Plug Alt", | ||||||
|     "settings-advanced": "Advanced user zone", |     "settings-advanced": "Advanced user zone", | ||||||
|     "settings-pluginsFolder": "Open plugins folder", |     "settings-pluginsFolder": "Open plugins folder", | ||||||
|  |     "settings-crashesFolder": "Open native crashes folder", | ||||||
|     "settings-themesFolder": "Open themes folder", |     "settings-themesFolder": "Open themes folder", | ||||||
|     "settings-storageFolder": "Open storage folder", |     "settings-storageFolder": "Open storage folder", | ||||||
|     "settings-none": "None", |     "settings-none": "None", | ||||||
|  | @ -68,5 +69,6 @@ | ||||||
|     "settings-updater": "Check for updates", |     "settings-updater": "Check for updates", | ||||||
|     "settings-skipSplash": "Skip Splash Screen (Experimental)", |     "settings-skipSplash": "Skip Splash Screen (Experimental)", | ||||||
|     "settings-skipSplash-desc": "Skips ArmCord splash screen when you start up the app.", |     "settings-skipSplash-desc": "Skips ArmCord splash screen when you start up the app.", | ||||||
|     "settings-copyDebugInfo": "Copy Debug Info" |     "settings-copyDebugInfo": "Copy Debug Info", | ||||||
|  |     "settings-forceNativeCrash": "Force native crash" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -164,7 +164,7 @@ button:active { | ||||||
|     font-size: 15px; |     font-size: 15px; | ||||||
| } | } | ||||||
| .acAdvSettings { | .acAdvSettings { | ||||||
|     height: 400px !important; |     height: 500px !important; | ||||||
| } | } | ||||||
| .tgl { | .tgl { | ||||||
|     display: none; |     display: none; | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								src/main.ts
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								src/main.ts
									
										
									
									
									
								
							|  | @ -1,9 +1,17 @@ | ||||||
| // 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, crashReporter, session} from "electron"; | ||||||
| import "v8-compile-cache"; | import "v8-compile-cache"; | ||||||
| import {checkForDataFolder, getConfig, checkIfConfigExists, injectElectronFlags, installModLoader} from "./utils"; | import { | ||||||
|  |     checkForDataFolder, | ||||||
|  |     getConfig, | ||||||
|  |     checkIfConfigExists, | ||||||
|  |     injectElectronFlags, | ||||||
|  |     installModLoader, | ||||||
|  |     getConfigLocation | ||||||
|  | } from "./utils"; | ||||||
| import "./extensions/mods"; | import "./extensions/mods"; | ||||||
| import "./tray"; | import "./tray"; | ||||||
|  | import fs from "fs"; | ||||||
| import {createCustomWindow, createNativeWindow, createTransparentWindow, mainWindow} from "./window"; | import {createCustomWindow, createNativeWindow, createTransparentWindow, mainWindow} from "./window"; | ||||||
| import path from "path"; | import path from "path"; | ||||||
| export var iconPath: string; | export var iconPath: string; | ||||||
|  | @ -11,6 +19,10 @@ export var settings: any; | ||||||
| export var customTitlebar: boolean; | export var customTitlebar: boolean; | ||||||
| export var clientName: "ArmCord"; | export var clientName: "ArmCord"; | ||||||
| 
 | 
 | ||||||
|  | // Your data now belongs to CCP
 | ||||||
|  | let settingsFile = fs.readFileSync(getConfigLocation(), "utf-8"); | ||||||
|  | crashReporter.start({uploadToServer: false, extra: {settingsFile}}); | ||||||
|  | 
 | ||||||
| if (process.platform == "linux") { | if (process.platform == "linux") { | ||||||
|     if (process.env.$XDG_SESSION_TYPE == "wayland") { |     if (process.env.$XDG_SESSION_TYPE == "wayland") { | ||||||
|         console.log("Wayland specific patches applied."); |         console.log("Wayland specific patches applied."); | ||||||
|  | @ -22,6 +34,7 @@ if (process.platform == "linux") { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
| checkForDataFolder(); | checkForDataFolder(); | ||||||
| checkIfConfigExists(); | checkIfConfigExists(); | ||||||
| injectElectronFlags(); | injectElectronFlags(); | ||||||
|  |  | ||||||
|  | @ -1,111 +0,0 @@ | ||||||
| import {ipcRenderer} from "electron"; |  | ||||||
| import "./bridge"; |  | ||||||
| import "./capturer"; |  | ||||||
| import "./patch"; |  | ||||||
| import * as fs from "fs"; |  | ||||||
| import * as path from "path"; |  | ||||||
| import {fixTitlebar, injectHummusTitlebar, injectTitlebar} from "./titlebar"; |  | ||||||
| import {sleep, addStyle, addScript} from "../utils"; |  | ||||||
| import {injectMobileStuff} from "./mobile"; |  | ||||||
| var version = ipcRenderer.sendSync("displayVersion"); |  | ||||||
| var channel = ipcRenderer.sendSync("channel"); |  | ||||||
| async function updateLang() { |  | ||||||
|     if (window.location.href.indexOf("setup.html") > -1) { |  | ||||||
|         console.log("Setup, skipping lang update"); |  | ||||||
|     } else { |  | ||||||
|         const value = `; ${document.cookie}`; |  | ||||||
|         const parts: any = value.split(`; locale=`); |  | ||||||
|         if (parts.length === 2) ipcRenderer.send("setLang", parts.pop().split(";").shift()); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| declare global { |  | ||||||
|     interface Window { |  | ||||||
|         armcord: any; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| console.log("ArmCord " + version); |  | ||||||
| ipcRenderer.on("themeLoader", (event, message) => { |  | ||||||
|     addStyle(message); |  | ||||||
| }); |  | ||||||
| if (window.location.href.indexOf("splash.html") > -1) { |  | ||||||
|     console.log("Skipping titlebar injection and client mod injection."); |  | ||||||
| } else { |  | ||||||
|     if (ipcRenderer.sendSync("titlebar")) { |  | ||||||
|         if (channel == "hummus") { |  | ||||||
|             injectHummusTitlebar(); |  | ||||||
|         } else { |  | ||||||
|             injectTitlebar(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     if (ipcRenderer.sendSync("mobileMode")) { |  | ||||||
|         injectMobileStuff(); |  | ||||||
|     } |  | ||||||
|     sleep(5000).then(async () => { |  | ||||||
|         // dirty hack to make clicking notifications focus ArmCord
 |  | ||||||
|         addScript(` |  | ||||||
|         (() => { |  | ||||||
|         const originalSetter = Object.getOwnPropertyDescriptor(Notification.prototype, "onclick").set; |  | ||||||
|         Object.defineProperty(Notification.prototype, "onclick", { |  | ||||||
|             set(onClick) { |  | ||||||
|             originalSetter.call(this, function() { |  | ||||||
|                 onClick.apply(this, arguments); |  | ||||||
|                 armcord.window.show(); |  | ||||||
|             }) |  | ||||||
|             }, |  | ||||||
|             configurable: true |  | ||||||
|         }); |  | ||||||
|         })(); |  | ||||||
|         `);
 |  | ||||||
| 
 |  | ||||||
|         addScript(fs.readFileSync(path.join(__dirname, "../", "/content/js/rpc.js"), "utf8")); |  | ||||||
|         const cssPath = path.join(__dirname, "../", "/content/css/discord.css"); |  | ||||||
|         addStyle(fs.readFileSync(cssPath, "utf8")); |  | ||||||
|         if (document.getElementById("window-controls-container") == null) { |  | ||||||
|             console.warn("Titlebar didn't inject, retrying..."); |  | ||||||
|             if (ipcRenderer.sendSync("titlebar")) { |  | ||||||
|                 if (channel == "hummus") { |  | ||||||
|                     injectHummusTitlebar(); |  | ||||||
|                 } else { |  | ||||||
|                     fixTitlebar(); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         await updateLang(); |  | ||||||
|     }); |  | ||||||
| } |  | ||||||
| /* |  | ||||||
| MIT License |  | ||||||
| 
 |  | ||||||
| Copyright (c) 2022 GooseNest |  | ||||||
| 
 |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| of this software and associated documentation files (the "Software"), to deal |  | ||||||
| in the Software without restriction, including without limitation the rights |  | ||||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| copies of the Software, and to permit persons to whom the Software is |  | ||||||
| furnished to do so, subject to the following conditions: |  | ||||||
| 
 |  | ||||||
| The above copyright notice and this permission notice shall be included in all |  | ||||||
| copies or substantial portions of the Software. |  | ||||||
| 
 |  | ||||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| SOFTWARE. |  | ||||||
| */ |  | ||||||
| // Settings info version injection
 |  | ||||||
| setInterval(() => { |  | ||||||
|     const host = document.getElementsByClassName("info-3pQQBb")[0]; |  | ||||||
|     if (!host || document.querySelector("#ac-ver")) return; |  | ||||||
|     const el = document.createElement("span"); |  | ||||||
|     el.id = "ac-ver"; |  | ||||||
|     el.classList.add("text-xs-normal-3SiVjE", "line-18uChy"); |  | ||||||
| 
 |  | ||||||
|     el.textContent = `\nArmCord Version: ${version}`; |  | ||||||
|     el.onclick = () => ipcRenderer.send("openSettingsWindow"); |  | ||||||
|     host.append(el); |  | ||||||
| }, 2000); |  | ||||||
|  | @ -15,6 +15,7 @@ import path from "path"; | ||||||
| import os from "os"; | import os from "os"; | ||||||
| import fs from "fs"; | import fs from "fs"; | ||||||
| import {mainWindow} from "../window"; | import {mainWindow} from "../window"; | ||||||
|  | import {crash} from "process"; | ||||||
| var settingsWindow: BrowserWindow; | var settingsWindow: BrowserWindow; | ||||||
| var instance: number = 0; | var instance: number = 0; | ||||||
| //checkForDataFolder();
 | //checkForDataFolder();
 | ||||||
|  | @ -87,9 +88,16 @@ export function createSettingsWindow() { | ||||||
|             shell.showItemInFolder(pluginsPath); |             shell.showItemInFolder(pluginsPath); | ||||||
|             await sleep(1000); |             await sleep(1000); | ||||||
|         }); |         }); | ||||||
|  |         ipcMain.on("openCrashesFolder", async (event) => { | ||||||
|  |             shell.showItemInFolder(path.join(app.getPath("temp"), app.getName() + " Crashes")); | ||||||
|  |             await sleep(1000); | ||||||
|  |         }); | ||||||
|         ipcMain.on("getLangName", async (event) => { |         ipcMain.on("getLangName", async (event) => { | ||||||
|             event.returnValue = await getLangName(); |             event.returnValue = await getLangName(); | ||||||
|         }); |         }); | ||||||
|  |         ipcMain.on("crash", async (event) => { | ||||||
|  |             process.crash(); | ||||||
|  |         }); | ||||||
|         ipcMain.handle("getSetting", (event, toGet: string) => { |         ipcMain.handle("getSetting", (event, toGet: string) => { | ||||||
|             return getConfig(toGet); |             return getConfig(toGet); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  | @ -11,7 +11,9 @@ contextBridge.exposeInMainWorld("settings", { | ||||||
|     openThemesFolder: () => ipcRenderer.send("openThemesFolder"), |     openThemesFolder: () => ipcRenderer.send("openThemesFolder"), | ||||||
|     openPluginsFolder: () => ipcRenderer.send("openPluginsFolder"), |     openPluginsFolder: () => ipcRenderer.send("openPluginsFolder"), | ||||||
|     openStorageFolder: () => ipcRenderer.send("openStorageFolder"), |     openStorageFolder: () => ipcRenderer.send("openStorageFolder"), | ||||||
|     copyDebugInfo: () => ipcRenderer.send("copyDebugInfo") |     openCrashesFolder: () => ipcRenderer.send("openCrashesFolder"), | ||||||
|  |     copyDebugInfo: () => ipcRenderer.send("copyDebugInfo"), | ||||||
|  |     crash: () => ipcRenderer.send("crash") | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| ipcRenderer.on("themeLoader", (event, message) => { | ipcRenderer.on("themeLoader", (event, message) => { | ||||||
|  |  | ||||||
|  | @ -191,12 +191,21 @@ | ||||||
|             <br /> |             <br /> | ||||||
|             <button data-string="settings-storageFolder" data-open="Storage" class="center"></button> |             <button data-string="settings-storageFolder" data-open="Storage" class="center"></button> | ||||||
|             <br /> |             <br /> | ||||||
|  |             <button data-string="settings-crashesFolder" data-open="Crashes" class="center"></button> | ||||||
|  |             <br /> | ||||||
|             <button |             <button | ||||||
|                 data-string="settings-copyDebugInfo" |                 data-string="settings-copyDebugInfo" | ||||||
|                 id="settings-copyDebugInfo" |                 id="settings-copyDebugInfo" | ||||||
|                 class="center" |                 class="center" | ||||||
|                 onclick="settings.copyDebugInfo()" |                 onclick="settings.copyDebugInfo()" | ||||||
|             ></button> |             ></button> | ||||||
|  |             <br /> | ||||||
|  |             <button | ||||||
|  |                 data-string="settings-forceNativeCrash" | ||||||
|  |                 id="settings-forceNativeCrash" | ||||||
|  |                 class="center" | ||||||
|  |                 onclick="settings.crash()" | ||||||
|  |             ></button> | ||||||
|         </div> |         </div> | ||||||
|     </body> |     </body> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue