From 471b8e8ef6f307bbf14532b2cc3d1f8525b0e6b0 Mon Sep 17 00:00:00 2001 From: Robbie Langer Date: Sun, 3 Jun 2018 09:27:31 -0400 Subject: HUGE ASYNC OVERHAUL --- pkg93.js | 298 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 154 insertions(+), 144 deletions(-) diff --git a/pkg93.js b/pkg93.js index 789a6f1..dc716e6 100644 --- a/pkg93.js +++ b/pkg93.js @@ -1,3 +1,24 @@ +async function wrap(f) { + var originalPrompt = this.cli.prompt.innerHTML + var originalOnenter = this.cli.onenter + try { + this.cli.prompt.innerHTML = '' + this.cli.onenter = l => false + var lastLog = $log('') + await f({ + log: (...args) => { + var newLog = $log(...args) + newLog.parentElement.insertBefore(newLog, lastLog.nextSibling) + lastLog = newLog + }, + arg: this.arg + }) + } finally { + this.cli.prompt.innerHTML = originalPrompt + this.cli.onenter = originalOnenter + } +} + console.group("[pkg93]"); console.log("[pkg93] Injecting packages..."); try { @@ -6,9 +27,9 @@ try { localStorage[".pkg93/config.json"] = '{"repos": ["http://codinggamerhd.com/main-repo"], "installed": [], "pkglist": []}'; } var config = JSON.parse(localStorage[".pkg93/config.json"]); - config.installed.forEach(function(pkg) { + for (let pkg of config.installed) { eval(localStorage[".pkg93/packages/" + pkg + ".js"]); - }); + } } catch (err) { console.error("[pkg93] Couldn't load package information."); } @@ -23,93 +44,83 @@ var pkg93 = { return false; } }, - pull: function() { + pull: async function(cli) { var config = pkg93.getConfig(); - var request = new XMLHttpRequest(); - $log("WARN Windows93 may lag while getting packages.\n This is a normal thing."); + cli.log("WARN Windows93 may lag while getting packages.\n This is a normal thing."); config.pkglist = []; - config.repos.forEach(function(source) { - $log("GET " + source); - request.open('GET', source + "/repo.json", false); + for (let source of config.repos) { + cli.log("GET " + source); try { - request.send(null); - var json = JSON.parse(request.responseText); - $log("NAME " + json.name); - $log("MSG " + json.msg); - json.packages.forEach(function(item) { + var json = await (await (fetch(source + "/repo.json"))).json() + cli.log("NAME " + json.name); + cli.log("MSG " + json.msg); + for (let item of json.packages) { try { - $log("OK " + item + "@" + source); + cli.log("OK " + item + "@" + source); config.pkglist.push(item + "@" + source); } catch (err) { - $log("ERR " + err.message); + cli.log("ERR " + err.message); } - }); + } } catch (err) { - $log("ERR " + err.message); - $log(request.responseText); + cli.log("ERR " + err.message); } - }); + } localStorage[".pkg93/config.json"] = JSON.stringify(config); }, - get: function(pkg) { + get: async function(pkg, cli) { var config = pkg93.getConfig(); - var request = new XMLHttpRequest(); - $log("SRCH " + pkg); + cli.log("SRCH " + pkg); var index = config.pkglist.findIndex(function(string) { return string.split("@")[0] == pkg; }); if (index < 0) { - $log("ERR Not found."); + cli.log("ERR Not found."); return false; } else { - $log("OK Found!"); + cli.log("OK Found!"); var pkgname = config.pkglist[index].split("@")[0]; var pkgsource = config.pkglist[index].split("@")[1]; - request.open('GET', pkgsource + "/" + pkgname + "/package.json", false); try { - request.send(null); - var json = JSON.parse(request.responseText); - localStorage[".pkg93/packages/" + pkgname + ".json"] = request.responseText; + var json = await (await (fetch(pkgsource + "/" + pkgname + "/package.json"))).json() + localStorage[".pkg93/packages/" + pkgname + ".json"] = JSON.stringify(json); if (json.dependencies) { - json.dependencies.forEach(function(pkg) { + for (let pkg of json.dependencies) { try { - $log("DPND Getting dependency \"" + pkg + "\""); - output = pkg93.get(pkg); + cli.log("DPND Getting dependency \"" + pkg + "\""); + output = await pkg93.get(pkg, cli); if (!output) { throw new Error("Dependency \"" + pkg + "\" failed to install. Current package may not work!"); } } catch (err) { - $log("ERR " + err.message); + cli.log("ERR " + err.message); } - }); + } } - request.open('GET', pkgsource + "/" + pkgname + "/" + json.inject, false); - request.send(null); - localStorage[".pkg93/packages/" + pkgname + ".js"] = request.responseText; - eval(request.responseText); + var script = await (await (fetch(pkgsource + "/" + pkgname + "/" + json.inject))).text() + localStorage[".pkg93/packages/" + pkgname + ".js"] = script; + eval(script); if (json.uninstall) { - request.open('GET', pkgsource + "/" + pkgname + "/" + json.uninstall, false); - request.send(null); - localStorage[".pkg93/packages/" + pkgname + ".rm.js"] = request.responseText; + var uninst = await (await (fetch(pkgsource + "/" + pkgname + "/" + json.uninstall))).text() + localStorage[".pkg93/packages/" + pkgname + ".rm.js"] = uninst; } - $log("OK Injected package!"); + cli.log("OK Injected package!"); if (!config.installed.includes(pkgname)) { config.installed.push(pkgname); } localStorage[".pkg93/config.json"] = JSON.stringify(config); return true; } catch (err) { - $log("ERR " + err.message); + cli.log("ERR " + err.message); return false; } } }, - rm: function(pkg) { + rm: function(pkg, cli) { var config = pkg93.getConfig(); - var request = new XMLHttpRequest(); var index = config.installed.indexOf(pkg); if (index < 0) { - $log("ERR Not found."); + cli.log("ERR Not found."); return false; } else if (!!localStorage[".pkg93/packages/" + pkg + ".rm.js"]) { eval(localStorage[".pkg93/packages/" + pkg + ".rm.js"]); // Typing eval makes me feel dirty. @@ -118,30 +129,29 @@ var pkg93 = { delete localStorage[".pkg93/packages/" + pkg + ".js"] delete localStorage[".pkg93/packages/" + pkg + ".json"] config.installed.splice(index, 1); - $log("OK Removed!"); + cli.log("OK Removed!"); } else { try { if (le._apps[config.installed[index]] === null) { - $log("ERR Already removed."); + cli.log("ERR Already removed."); return false; } else { delete le._apps[config.installed[index]]; delete localStorage[".pkg93/packages/" + config.installed[index] + ".js"]; delete localStorage[".pkg93/packages/" + config.installed[index] + ".json"]; config.installed.splice(index, 1); - $log("OK Removed!"); + cli.log("OK Removed!"); } localStorage[".pkg93/config.json"] = JSON.stringify(config); return true; } catch (err) { - $log("ERR " + err.message); + cli.log("ERR " + err.message); return false; } } }, - pkgInfo: function(pkg, onlineOnly) { + pkgInfo: async function(pkg, onlineOnly) { var config = pkg93.getConfig - var request = new XMLHttpRequest(); try { if (localStorage[".pkg93/packages/" + pkg + ".json"] && !onlineOnly) { return JSON.parse(localStorage[".pkg93/packages/" + pkg + ".json"]); @@ -154,10 +164,8 @@ var pkg93 = { } else { var pkgname = config.pkglist[index].split("@")[0]; var pkgsource = config.pkglist[index].split("@")[1]; - request.open('GET', pkgsource + "/" + pkgname + "/package.json", false); - request.send(null); - var json = JSON.parse(request.responseText); - localStorage[".pkg93/packages/" + pkgname + ".json"] = request.responseText; // save it for later + var json = await (await (fetch(pkgsource + "/" + pkgname + "/package.json"))).json() + localStorage[".pkg93/packages/" + pkgname + ".json"] = JSON.stringify(json); // save it for later return json; } } @@ -175,12 +183,11 @@ if (localStorage[".pkg93/userscript"] && localStorage["desktop/Load pkg93.lnk42" $explorer.refresh(); } -le._apps.pkg93 = { - exec: function() { - pkg93.version = "v1.2.1"; - var protected = ["3d", "acid", "acidbox", "ansi", "anthology", "arena93", "bananamp", "base64", "bytebeat", "calc", "castlegafa", "catex", "cd", "clear", "clearhist", "clippy", "code", "contact", "crazy", "defrag", "dmg", "do a barrel roll", "doctor", "download", "find", "font", "format", "fullscreen", "fx", "gameoflife", "glitch", "global thermonuclear war", "gravity", "hampster", "hello", "help", "hexed", "history", "hl3", "hydra", "ie6", "iframe", "img", "info", "js", "key", "killall", "layer", "lenna", "lisa", "ls", "manifesto", "marburg", "messenger", "mines", "necronomicoin", "pd", "piskel", "pkg93", "pony", "potato", "progressquest", "pwd", "reboot", "robby", "rotate", "shutdown", "skifree", "solitude", "speech", "starwars", "superplayer", "takethis", "terminal", "textarea", "tree", "trollbox", "vega", "virtualpc", "vm", "wat", "whatif", "whois", "win", "zkype"]; - var args = this.arg.arguments; - var help = `pkg93 ${pkg93.version} +async function exec(cli) { + pkg93.version = "v1.2.1"; + var protected = ["3d", "acid", "acidbox", "ansi", "anthology", "arena93", "bananamp", "base64", "bytebeat", "calc", "castlegafa", "catex", "cd", "clear", "clearhist", "clippy", "code", "contact", "crazy", "defrag", "dmg", "do a barrel roll", "doctor", "download", "find", "font", "format", "fullscreen", "fx", "gameoflife", "glitch", "global thermonuclear war", "gravity", "hampster", "hello", "help", "hexed", "history", "hl3", "hydra", "ie6", "iframe", "img", "info", "js", "key", "killall", "layer", "lenna", "lisa", "ls", "manifesto", "marburg", "messenger", "mines", "necronomicoin", "pd", "piskel", "pkg93", "pony", "potato", "progressquest", "pwd", "reboot", "robby", "rotate", "shutdown", "skifree", "solitude", "speech", "starwars", "superplayer", "takethis", "terminal", "textarea", "tree", "trollbox", "vega", "virtualpc", "vm", "wat", "whatif", "whois", "win", "zkype"]; + var args = cli.arg.arguments; + var help = `pkg93 ${pkg93.version} Usage: pkg93 [command] List of Commands @@ -191,7 +198,7 @@ le._apps.pkg93 = { rm-repo [id] Removes a repository info [pkg] Gets information on a package ls [pkgs|installed|repos] Lists packages, installed - packages or repositories. + packages or repositories. Color meanings Executing OK Error Warning Info @@ -199,98 +206,101 @@ le._apps.pkg93 = { pkg93 get gud pkg93 rm kebab `; - if (localStorage[".pkg93/config.json"] === undefined) { - localStorage[".pkg93/config.json"] = '{"repos": ["http://codinggamerhd.com/main-repo"], "installed": [], "pkglist": []}'; + if (localStorage[".pkg93/config.json"] === undefined) { + localStorage[".pkg93/config.json"] = '{"repos": ["http://codinggamerhd.com/main-repo"], "installed": [], "pkglist": []}'; + } + if (localStorage[".pkg93/packages/"] === undefined) { + localStorage[".pkg93/packages/"] = ""; + } + localStorage[".pkg93/README.txt"] = "WARNING!\nThis folder contains important data about pkg93. Do not edit anything in here unless you want pkg93 to not work!\n\n~1024x2"; + var config = pkg93.getConfig(); + if (args.length === 0) { + cli.log(help); + } else if (args[0] == "pull") { + await pkg93.pull(cli); + } else if (args[0] == "get") { + if (args.length < 2) { + cli.log("ERR No package specified."); + } else if (protected.includes(args[1])) { + cli.log("ERR You're trying to modify a pre-installed Windows93 app.\n Don't do that!"); + } else { + await pkg93.get(args[1], cli); } - if (localStorage[".pkg93/packages/"] === undefined) { - localStorage[".pkg93/packages/"] = ""; + } else if (args[0] == "rm") { + if (args.length < 2) { + cli.log("ERR No package specified."); + } else if (protected.includes(args[1])) { + cli.log("ERR You're trying to modify a pre-installed Windows93 app.\n Don't do that!"); + } else { + pkg93.rm(args[1], cli); } - localStorage[".pkg93/README.txt"] = "WARNING!\nThis folder contains important data about pkg93. Do not edit anything in here unless you want pkg93 to not work!\n\n~1024x2"; - var config = pkg93.getConfig(); - if (args.length === 0) { - $log(help); - } else if (args[0] == "pull") { - pkg93.pull(); - } else if (args[0] == "get") { - if (args.length < 2) { - $log("ERR No package specified."); - } else if (protected.includes(args[1])) { - $log("ERR You're trying to modify a pre-installed Windows93 app.\n Don't do that!"); - } else { - pkg93.get(args[1]); - } - } else if (args[0] == "rm") { - if (args.length < 2) { - $log("ERR No package specified."); - } else if (protected.includes(args[1])) { - $log("ERR You're trying to modify a pre-installed Windows93 app.\n Don't do that!"); - } else { - pkg93.rm(args[1]); - } - } else if (args[0] == "add-repo") { - if (args.length < 2) { - $log("ERR No repository specified."); - } else { - try { - config.repos.push(args[1]); // well, that was easy - localStorage[".pkg93/config.json"] = JSON.stringify(config); - $log("OK Done!\n Run \"pkg93 pull\" to update the package listing."); - } catch (err) { - $log("ERR " + err.message); - } + } else if (args[0] == "add-repo") { + if (args.length < 2) { + cli.log("ERR No repository specified."); + } else { + try { + config.repos.push(args[1]); // well, that was easy + localStorage[".pkg93/config.json"] = JSON.stringify(config); + cli.log("OK Done!\n Run \"pkg93 pull\" to update the package listing."); + } catch (err) { + cli.log("ERR " + err.message); } - } else if (args[0] == "rm-repo") { - if (args.length < 2) { - $log("ERR No repository specified."); - } else { - try { - config.repos.splice(parseInt(args[1]), 1); - localStorage[".pkg93/config.json"] = JSON.stringify(config); - $log("OK Done!\n Run \"pkg93 pull\" to update the package listing."); - } catch (err) { - $log("ERR " + err.message); - } + } + } else if (args[0] == "rm-repo") { + if (args.length < 2) { + cli.log("ERR No repository specified."); + } else { + try { + config.repos.splice(parseInt(args[1]), 1); + localStorage[".pkg93/config.json"] = JSON.stringify(config); + cli.log("OK Done!\n Run \"pkg93 pull\" to update the package listing."); + } catch (err) { + cli.log("ERR " + err.message); } - } else if (args[0] == "ls") { - if (args[1] == "pkgs") { - $log(config.pkglist.join("\n")); - } else if (args[1] == "installed") { - $log(config.installed.join("\n")); - } else if (args[1] == "repos") { - lerepos = ""; - config.repos.forEach(function(repo, index) { - lerepos += "[" + index + "] " + repo + "
"; - }); - $log(lerepos); - } else { - $log("ERR You must select either pkgs, installed, or repos."); + } + } else if (args[0] == "ls") { + if (args[1] == "pkgs") { + cli.log(config.pkglist.join("\n")); + } else if (args[1] == "installed") { + cli.log(config.installed.join("\n")); + } else if (args[1] == "repos") { + lerepos = ""; + for (let index in config.repos) { + lerepos += "[" + index + "] " + config.repos[index] + "
"; } - } else if (args[0] == "info") { - if (args.length > 2) { - $log("ERR No package specified."); + cli.log(lerepos); + } else { + cli.log("ERR You must select either pkgs, installed, or repos."); + } + } else if (args[0] == "info") { + if (args.length > 2) { + cli.log("ERR No package specified."); + } else { + var pkgInfo = JSON.parse(await pkg93.pkgInfo(args[1])); + if (!pkgInfo) { + cli.log("ERR Either the package doesn't exist, or an error occoured.") } else { - var pkgInfo = JSON.parse(pkg93.pkgInfo(args[1])); - if (!pkgInfo) { - $log("ERR Either the package doesn't exist, or an error occoured.") - } else { - depends = pkgInfo.dependencies ? pkgInfo.dependencies.join(" , ") : "None!"; - console.log(pkgInfo); - $log(`${pkgInfo.name} + depends = pkgInfo.dependencies ? pkgInfo.dependencies.join(" , ") : "None!"; + console.log(pkgInfo); + cli.log(`${pkgInfo.name} Description: ${pkgInfo.description} Dependencies: ${depends}`); - } } - } else if (args[0] == "help") { - $log(help); - } else if (args[0] == "wtf") { - // for teh lulz - new Audio("/c/sys/sounds/QUACK.ogg").play(); - wtf = ["mudkipz", "pkg93", "memes", "linux", "javascript", "git", "cpu", "windows93", "discord", "kirb", "apt93", "delays", /* those last 2 go well together */ "trash", "kernel panic", "bash", "package manager", "recusion"]; - $log("WTF? " + wtf[Math.floor(Math.random() * wtf.length)] + " + " + wtf[Math.floor(Math.random() * wtf.length)] + " = " + wtf[Math.floor(Math.random() * wtf.length)]); - } else { - $log("ERR Invalid command. Type \"pkg93\" without any arguments for help."); } - }, + } else if (args[0] == "help") { + cli.log(help); + } else if (args[0] == "wtf") { + // for teh lulz + new Audio("/c/sys/sounds/QUACK.ogg").play(); + wtf = ["mudkipz", "pkg93", "memes", "linux", "javascript", "git", "cpu", "windows93", "discord", "kirb", "apt93", "delays", /* those last 2 go well together */ "trash", "kernel panic", "bash", "package manager", "recusion"]; + cli.log("WTF? " + wtf[Math.floor(Math.random() * wtf.length)] + " + " + wtf[Math.floor(Math.random() * wtf.length)] + " = " + wtf[Math.floor(Math.random() * wtf.length)]); + } else { + cli.log("ERR Invalid command. Type \"pkg93\" without any arguments for help."); + } +} + +le._apps.pkg93 = { + exec: function() { wrap.call(this, exec) }, icon: "//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png", terminal: true, hascli: true, -- cgit v1.2.3