aboutsummaryrefslogtreecommitdiff
path: root/crash
diff options
context:
space:
mode:
Diffstat (limited to 'crash')
-rw-r--r--crash/client.js254
-rw-r--r--crash/crash.html144
-rw-r--r--crash/wrapper.js78
3 files changed, 250 insertions, 226 deletions
diff --git a/crash/client.js b/crash/client.js
index e70467f..2323d18 100644
--- a/crash/client.js
+++ b/crash/client.js
@@ -1,114 +1,140 @@
-if (native) {
- function crash(error) {
- try {
- require('@electron/remote').getCurrentWindow().hide();
- } catch (e) {}
- id = new Date().toISOString().replaceAll(":", "-");
-
- try {
- global.pkg = require('./package.json');
- } catch (e) {
- console.warn(e);
- global.pkg = require('../package.json');
-
- }
-
- report = "\n";
- report += "Kartik Crash Report\n\nPlease send this to the developers so they can fix the problem and deploy a patch to all players.\n\nStack Trace:\n"
- error.stack.split("\n").forEach((line) => {
- report += " " + line + "\n";
- })
- report += "\n\nSystem Information:\n"
- report += " " + "Kartik"+require('@electron/remote').getCurrentWindow().channel + "(" + pkg.name + ") " +pkg.version + " [" + pkg.serial + "]\n";
-
- report += " " + require('os').type() + " (" + require('os').version() + ", " + require('os').arch() +") version " + require('os').release() + "\n";
- cores = require('os').cpus()
- if (cores.length > 1) {
- report += " " + cores.length + " processors";
- } else {
- report += " " + cores.length + " processor";
- }
- report += "\n\nKartik Components:\n";
- Object.keys(process.versions).forEach((e) => {
-
- v = process.versions[e];
- report += " " + e + "@" + v + "\n";
- })
-
- require('fs').writeFileSync(require('os').userInfo().homedir + "/.kartik/crashes/" + id + ".txt", report);
- if (error.message !== "Invalid display" && error.message !== "Out of memory") {
-
- fetch("https://kartik.hopto.org/telemetry/report/?report=" + btoa(report.replaceAll(require('os').userInfo().username, "<information removed>")))
-
- .then(() => {
- if (require('os').platform() === "win32") {
- require('child_process').execSync("runtime\\kartik-crash.bat");
- } else if (require('os').platform() === "darwin") {
- require('child_process').execSync("./runtime/kartik-crash-mac.sh");
- } else {
- require('child_process').execSync("./runtime/kartik-crash.sh");
- }
- require('@electron/remote').getCurrentWindow().destroy();
-
- window.close();
- require('@electron/remote').getCurrentWindow().close();
- })
- .catch(() => {
- if (require('os').platform() === "win32") {
- require('child_process').execSync("runtime\\kartik-crash.bat");
- } else if (require('os').platform() === "darwin") {
-
- require('child_process').execSync("./runtime/kartik-crash-mac.sh");
- } else {
- require('child_process').execSync("./runtime/kartik-crash.sh");
- }
- require('@electron/remote').getCurrentWindow().destroy();
- window.close();
- require('@electron/remote').getCurrentWindow().close();
- })
- } else {
- if (require('os').platform() === "win32") {
- require('child_process').execSync("runtime\\kartik-crash.bat");
- } else if (require('os').platform() === "darwin") {
- require('child_process').execSync("./runtime/kartik-crash-mac.sh");
- } else {
- require('child_process').execSync("./runtime/kartik-crash.sh");
- }
-
- require('@electron/remote').getCurrentWindow().destroy();
- window.close();
- require('@electron/remote').getCurrentWindow().close();
- }
- }
-
- window.onerror = (_a, _b, _c, _d, error) => {
- if (typeof error != "undefined") {
- crash(error);
- } else {
- error("CrashManager", "An exception was thrown without details about it");
- crash(new Error("Unknown error"));
- }
- }
-
- process.on('uncaughtException', (error) => {
- if (typeof error != "undefined") {
- crash(error);
- } else {
- error("CrashManager", "An exception was thrown without details about it");
- crash(new Error("Unknown error"));
- }
- })
-
- /*setInterval(() => {
- try {
- if (document.body.clientWidth >= (screen.width - 50) || document.body.clientHeight >= (screen.height - 50) || require('@electron/remote').getCurrentWindow().pwidth >= (screen.width - 50) || require('@electron/remote').getCurrentWindow().pheight >= (screen.height - 50) || require('@electron/remote').getCurrentWindow().scale < 0.9) {
-
- if (!location.href.includes("credits.html")) {
- error("CrashManager", "Invalid display, crashing");
- crash(new Error("Invalid display"));
- // TODO: Instead reset the size and restart
- }
- }
- } catch (e) {}
- }, 2000)*/
-}
+taglines = [
+ "Who set us up the engine?",
+ "Everything's going as planned. No, really, that was supposed to happen.",
+ "Uh... Did I do that? (oops)",
+ "Oops.",
+ "Why did you do that?",
+ "I feel sad now :(",
+ "My bad.",
+ "I'm sorry, Dave. I'm afraid I can't do that.",
+ "I let you down. Sorry :(",
+ "On the bright side, I bought you a teddy bear!",
+ "Oh - I know what I did wrong!",
+ "Hey, that tickles! Hehehe!",
+ "I blame Microsoft.",
+ "Don't be sad. I'll do better next time, pinky swear!",
+ "Don't be sad, have a hug! <3",
+ "I just don't know what went wrong :(",
+ "Shall we play a game?",
+ "Quite honestly, I wouldn't worry myself about that.",
+ "Sorry :(",
+ "Surprise! Haha. Well, this is awkward.",
+ "Would you like a cupcake?",
+ "Hi. I'm Kartik, and I'm a crashaholic.",
+ "Ooh. Shiny.",
+ "This doesn't make any sense!",
+ "Why is it breaking :(",
+ "Don't do that.",
+ "Ouch. That hurt :(",
+ "You're mean.",
+ "But it works on my machine.",
+ "Welp, I guess it's broken now.",
+ "¯\\_(ツ)_/¯",
+ "*boop*"
+]
+
+if (native) {
+ function crash(error) {
+ id = new Date().toISOString().replaceAll(":", "-");
+
+ try {
+ global.pkg = require('./package.json');
+ } catch (e) {
+ console.warn(e);
+ global.pkg = require('../package.json');
+
+ }
+
+ try {
+ pubver = require('../package.json').version;
+ } catch (e) {
+ pubver = require('./package.json').version;
+ }
+ pvpart = pubver.split(".");
+ if (pvpart.length === 3) {
+ intver = pvpart[0] + "." + pvpart[1];
+ } else {
+ intver = "unknown";
+ }
+
+ if (require('@electron/remote').getCurrentWindow().mods.length > 0) {
+ release = "mods+" + require('@electron/remote').getCurrentWindow().mods.length;
+ } else {
+ release = "official";
+ }
+
+ report = "---- Kartik Crash Report ----\n";
+ report += "// " + taglines[Math.floor(Math.random() * taglines.length)] + "\n\n"
+
+ report += "Time: " + new Date().toUTCString() + "\n\n";
+ error.stack.split("\n").forEach((line) => {
+ report += line + "\n";
+ })
+
+ report += "\n\n\nA detailed walkthrough of the error, its code path and all known details is as follows:\n" +
+ "---------------------------------------------------------------------------------------\n\n";
+
+ report += "-- Head --\nThread: Renderer #" + process.pid + "\n\n"
+
+ report += "-- Initialization --\nDetails: " + require('@electron/remote').getCurrentWindow().cmdlineargs.join(" ") + "\n\n"
+
+ report += "-- System Details --\nDetails: \n";
+
+ report += " Kartik Version: " + pkg.version + "\n";
+ try {
+ channel = require('../package.json').channel;
+ } catch (e) {
+ channel = require('./package.json').channel;
+ }
+ report += " Kartik Version ID: " + intver + "/" + channel + "+" + release + "\n";
+ report += " Kartik Version SKU: " + pkg.serial + "\n";
+ report += " Operating System: " + require('os').type() + " (" + require('os').arch() + ") version " + require('os').release() + "\n";
+ report += " Electron Version: " + process.versions.electron + "\n";
+ report += " Electron VM Version: " + process.versions.v8 + "\n";
+ report += " Node Version: " + process.versions.node + "\n";
+ report += " Memory: " + process.memoryUsage().heapUsed + " bytes (" + Math.round(process.memoryUsage().heapUsed / 1000000) + " MB) / " + process.memoryUsage().heapTotal + " bytes (" + Math.round(process.memoryUsage().heapTotal / 1000000) + " MB) up to " + process.memoryUsage().rss + " bytes (" + Math.round(process.memoryUsage().rss / 1000000) + " MB)\n";
+ report += " CPUs: " + require('os').cpus().length + "\n";
+ if (require('@electron/remote').getCurrentWindow().mods.length > 0) {
+ report += " KMP Mods:\n";
+ for (mod of require('@electron/remote').getCurrentWindow().mods) {
+ report += " " + mod + "\n";
+ }
+ }
+ report += " Is Modded: ";
+ if (require('@electron/remote').getCurrentWindow().mods.length > 0) {
+ report += "Definitely; Client brand changed to 'kmp-client'"
+ } else if (require('@electron/remote').getCurrentWindow().invalidfiles.length > 0) {
+ if (require('@electron/remote').getCurrentWindow().invalidfiles.length > 1) {
+ report += "Very likely; " + require('@electron/remote').getCurrentWindow().invalidfiles.length + " signatures invalidated";
+ } else {
+ report += "Very likely; " + require('@electron/remote').getCurrentWindow().invalidfiles.length + " signature invalidated";
+ }
+ } else {
+ report += "Probably not. All signatures remains and client brand is untouched.";
+ }
+ report += "\n";
+ report += " CPU: " + require('os').cpus().length + "x " + require('os').cpus()[0].model.trim() + "\n";
+
+ require('fs').copyFileSync(homedir + "/.kartik/current.kfn", homedir + "/.kartik/crashed.kfn");
+ require('fs').writeFileSync(require('os').userInfo().homedir + "/.kartik/crashes/" + id + ".txt", report);
+ require('@electron/remote').getCurrentWindow().webContents.send("crashreport", report);
+ }
+
+ window.onerror = (_a, _b, _c, _d, error) => {
+ if (typeof error != "undefined") {
+ crash(error);
+ } else {
+ error("CrashManager", "An exception was thrown without details about it");
+ crash(new Error("Unknown error"));
+ }
+ }
+
+ process.on('uncaughtException', (error) => {
+ if (typeof error != "undefined") {
+ crash(error);
+ } else {
+ error("CrashManager", "An exception was thrown without details about it");
+ crash(new Error("Unknown error"));
+ }
+ })
+}
diff --git a/crash/crash.html b/crash/crash.html
index ec4e5ca..c698dcd 100644
--- a/crash/crash.html
+++ b/crash/crash.html
@@ -1,72 +1,72 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <script src="../lang/loader.js"></script>
- <meta charset="UTF-8">
- <script>document.title = lang.crash.title;</script>
- <link rel="stylesheet" href="../views/common/fonts.css">
- <style>
-
- * {
- font-family: -apple-system, sans-serif;
- cursor: default !important;
- font-family: "Comfortaa", -apple-system, sans-serif !important;
- }
-
- button {
- border: 1px solid #00b763;
- padding: 10px 20px;
- border-radius: 999px;
- background: #fff;
- color: black;
- outline: none;
- }
-
- button:hover {
- color: white;
- border: 1px solid #007b42;
- background: #00b763;
- }
-
- button:active {
- color: white;
- border: 1px solid #00502b;
- background: #007b42;
- }
-
- </style>
-</head>
-<body style="display:grid;grid-template-columns: 1fr 1fr;height:100%;width:100%;margin:0;overflow:hidden;">
- <div>
- <img src="./artwork.jpg" style="height: 100vh;">
- </div>
- <div style="padding:8px;">
- <h2><script>document.write(lang.crash.head);</script></h2>
- <p><script>document.write(lang.crash.intro);</script></p>
- <p><script>
- document.write(lang.crash.report[0]);
- if (require('os').platform() === "win32") {
- document.write(require('os').userInfo().homedir + "\\.kartik\\crashes");
- } else {
- document.write(require('os').userInfo().homedir + "/.kartik/crashes");
- }
- document.write(lang.crash.report[1]);
- </script></p>
- <p><button onclick="restart();"><script>document.write(lang.crash.close);</script></button> <button onclick="resetrestart();"><script>document.write(lang.crash.reset);</script></button></p>
- </div>
-
- <script>
- function restart() {
- window.close();
- require('@electron/remote').getCurrentWindow().hide();
- require('@electron/remote').getCurrentWindow().destroy();
- require('@electron/remote').getCurrentWindow().close();
- }
- function resetrestart() {
- require('fs').rmdirSync(require('os').userInfo().homedir + "/.kartik/config", {recursive:true});
- window.close();
- require('@electron/remote').getCurrentWindow().close();
- }
- </script>
-</body>
-</html>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <script src="../lang/loader.js"></script>
+ <meta charset="UTF-8">
+ <script>document.title = lang.crash.title;</script>
+ <link rel="stylesheet" href="../views/common/fonts.css">
+ <style>
+
+ * {
+ font-family: -apple-system, sans-serif;
+ cursor: default !important;
+ font-family: "Comfortaa", -apple-system, sans-serif !important;
+ }
+
+ button {
+ border: 1px solid #00b763;
+ padding: 10px 20px;
+ border-radius: 999px;
+ background: #fff;
+ color: black;
+ outline: none;
+ }
+
+ button:hover {
+ color: white;
+ border: 1px solid #007b42;
+ background: #00b763;
+ }
+
+ button:active {
+ color: white;
+ border: 1px solid #00502b;
+ background: #007b42;
+ }
+
+ </style>
+</head>
+<body style="display:grid;grid-template-columns: 1fr 1fr;height:100%;width:100%;margin:0;overflow:hidden;">
+ <div>
+ <img src="./artwork.jpg" style="height: 100vh;">
+ </div>
+ <div style="padding:8px;">
+ <h2><script>document.write(lang.crash.head);</script></h2>
+ <p><script>document.write(lang.crash.intro);</script></p>
+ <p><script>
+ document.write(lang.crash.report[0]);
+ if (require('os').platform() === "win32") {
+ document.write(require('os').userInfo().homedir + "\\.kartik\\crashes");
+ } else {
+ document.write(require('os').userInfo().homedir + "/.kartik/crashes");
+ }
+ document.write(lang.crash.report[1]);
+ </script></p>
+ <p><button onclick="restart();"><script>document.write(lang.crash.close);</script></button> <button onclick="resetrestart();"><script>document.write(lang.crash.reset);</script></button></p>
+ </div>
+
+ <script>
+ function restart() {
+ window.close();
+ require('@electron/remote').getCurrentWindow().hide();
+ require('@electron/remote').getCurrentWindow().destroy();
+ require('@electron/remote').getCurrentWindow().close();
+ }
+ function resetrestart() {
+ require('fs').rmdirSync(require('os').userInfo().homedir + "/.kartik/config", {recursive:true});
+ window.close();
+ require('@electron/remote').getCurrentWindow().close();
+ }
+ </script>
+</body>
+</html>
diff --git a/crash/wrapper.js b/crash/wrapper.js
index ba5a8b9..4c291bd 100644
--- a/crash/wrapper.js
+++ b/crash/wrapper.js
@@ -1,41 +1,39 @@
-const { app, BrowserWindow } = require('electron')
-
-if (require('fs').existsSync(require('os').userInfo().homedir + "/.kartik/config/lang.txt")) {
- lp = require('fs').readFileSync(require('os').userInfo().homedir + "/.kartik/config/lang.txt").toString();
-}
-
-function createWindow () {
- const win = new BrowserWindow({
- width: 800,
- height: 375,
- resizeable: false,
- resizable: false,
- maximizable: false,
- bgColor: "#ffffff",
- title: "Kartik",
- webPreferences: {
- nodeIntegration: true,
- contextIsolation: false,
- enableRemoteModule: true,
- webviewTag: true
- }
- })
-
- win.lp = lp;
- win.loadFile('crash.html')
- win.setMenu(null);
-}
-
-app.whenReady().then(createWindow)
-
-app.on('window-all-closed', () => {
- if (process.platform !== 'darwin') {
- app.quit()
- }
-})
-
-app.on('activate', () => {
- if (BrowserWindow.getAllWindows().length === 0) {
- createWindow()
- }
+const { app, BrowserWindow } = require('electron')
+
+lp = "en";
+
+function createWindow () {
+ const win = new BrowserWindow({
+ width: 800,
+ height: 375,
+ resizeable: false,
+ resizable: false,
+ maximizable: false,
+ bgColor: "#ffffff",
+ title: "Kartik",
+ webPreferences: {
+ nodeIntegration: true,
+ contextIsolation: false,
+ enableRemoteModule: true,
+ webviewTag: true
+ }
+ })
+
+ win.lp = lp;
+ win.loadFile('crash.html')
+ win.setMenu(null);
+}
+
+app.whenReady().then(createWindow)
+
+app.on('window-all-closed', () => {
+ if (process.platform !== 'darwin') {
+ app.quit()
+ }
+})
+
+app.on('activate', () => {
+ if (BrowserWindow.getAllWindows().length === 0) {
+ createWindow()
+ }
}) \ No newline at end of file