diff options
author | Minteck <contact@minteck.org> | 2022-05-18 18:50:12 +0200 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-05-18 18:50:12 +0200 |
commit | 0bd45cb2cae3af05adaad3f38d129bb67c3e0ec0 (patch) | |
tree | 97a7e15187fe7fcb5b8775e03a62f62ac8fc5c61 /kartik/crash/client.js | |
parent | d4805039b8ea7b30f5e78cf53caf8fd3f267256a (diff) | |
download | arcade-trunk.tar.gz arcade-trunk.tar.bz2 arcade-trunk.zip |
Diffstat (limited to 'kartik/crash/client.js')
-rwxr-xr-x | kartik/crash/client.js | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/kartik/crash/client.js b/kartik/crash/client.js new file mode 100755 index 0000000..95cc342 --- /dev/null +++ b/kartik/crash/client.js @@ -0,0 +1,140 @@ +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")); + } + }) +} |