console.group("[pkg93]");
console.log("[pkg93] Injecting packages...");
try {
if (localStorage[".pkg93/config.json"] === undefined) {
console.log("[pkg93] You seem new. Creating config...");
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) {
eval(localStorage[".pkg93/packages/" + pkg + ".js"]);
});
} catch (err) {
console.error("[pkg93] Couldn't load package information.");
}
console.log("[pkg93] Done!");
console.groupEnd();
var pkg93 = {
getConfig: function() {
try {
return JSON.parse(localStorage[".pkg93/config.json"]);
} catch (err) {
return false;
}
},
pull: function() {
var config = pkg93.getConfig();
var request = new XMLHttpRequest();
$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);
try {
request.send(null);
var json = JSON.parse(request.responseText);
$log("NAME " + json.name);
$log("MSG " + json.msg);
json.packages.forEach(function(item) {
try {
$log("OK " + item + "@" + source);
config.pkglist.push(item + "@" + source);
} catch (err) {
$log("ERR " + err.message);
}
});
} catch (err) {
$log("ERR " + err.message);
$log(request.responseText);
}
});
localStorage[".pkg93/config.json"] = JSON.stringify(config);
},
get: function(pkg) {
var config = pkg93.getConfig();
var request = new XMLHttpRequest();
$log("SRCH " + pkg);
var index = config.pkglist.findIndex(function(string) {
return string.split("@")[0] == pkg;
});
if (index < 0) {
$log("ERR Not found.");
return false;
} else {
$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;
if (json.dependencies) {
json.dependencies.forEach(function(pkg) {
try {
$log("DPND Getting dependency \"" + pkg + "\"");
output = pkg93.get(pkg);
if (!output) {
throw new Error("Dependency \"" + pkg + "\" failed to install. Current package may not work!");
}
} catch (err) {
$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);
if (json.uninstall) {
request.open('GET', pkgsource + "/" + pkgname + "/" + json.uninstall, false);
request.send(null);
localStorage[".pkg93/packages/" + pkgname + ".rm.js"] = request.responseText;
}
$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);
return false;
}
}
},
rm: function(pkg) {
var config = pkg93.getConfig();
var request = new XMLHttpRequest();
var index = config.installed.indexOf(pkg);
if (index < 0) {
$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.
delete le._apps[config.installed[index]];
delete localStorage[".pkg93/packages/" + pkg + ".rm.js"]
delete localStorage[".pkg93/packages/" + pkg + ".js"]
delete localStorage[".pkg93/packages/" + pkg + ".json"]
config.installed.splice(index, 1);
$log("OK Removed!");
} else {
try {
if (le._apps[config.installed[index]] === null) {
$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!");
}
localStorage[".pkg93/config.json"] = JSON.stringify(config);
return true;
} catch (err) {
$log("ERR " + err.message);
return false;
}
}
},
pkgInfo: 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"]);
} else {
var index = config.pkglist.findIndex(function(string) {
return string.split("@")[0] == pkg;
});
if (index < 0) {
return false;
} 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
return json;
}
}
} catch (err) {
console.error("[pkg93] " + err.stack);
return false;
}
},
version: "v1.2.1"
}
if (localStorage[".pkg93/userscript"] && localStorage["desktop/Load pkg93.lnk42"] != '{"icon":"//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png","exe":"js https://cdn.rawgit.com/1024x2/pkg93/' + pkg93.version + '/pkg93.js","title":"pkg93"}') {
$notif("Since you're not using the pkg93 userscript, a shortcut for installing pkg93 has been placed on your desktop.");
localStorage["desktop/Load pkg93.lnk42"] = '{"icon":"//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png","exe":"js https://cdn.rawgit.com/1024x2/pkg93/' + pkg93.version + '/pkg93.js","title":"Load pkg93"}';
$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}
Usage: pkg93 [command]
List of Commands
pull Updates package listing
get [package] Installs a package
rm [package] Uninstalls a package
add-repo [url] Adds a repository
rm-repo [id] Removes a repository
info [pkg] Gets information on a package
ls [pkgs|installed|repos] Lists packages, installed
packages or repositories.
Color meanings
Executing OK Error Warning Info
Examples
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/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) {
$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] == "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] == "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] == "info") {
if (args.length > 2) {
$log("ERR No package specified.");
} 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}
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.");
}
},
icon: "//cdn.rawgit.com/1024x2/pkg93/70039c02/pkg.png",
terminal: true,
hascli: true,
categories: "Network;Utility;Settings;PackageManager"
};