/***************************
* This code was created *
* by 1024x2, and is *
* licensed under the MIT *
* License, which means *
* you can do whatever you *
* want on it as long as *
* you keep this copyright *
* notice included with *
* this software. Please *
* respect that by not *
* deleting 'LICENSE' or *
* this notice. Thank you! *
* ~1024x2 *
***************************/
// Thanks, Draco!
function loadJS (source, onready){
var sc = document.createElement("script");
sc.src = source;
sc.type = "text/javascript";
if (onready) sc.addEventListener("load", onready);
document.head.appendChild(sc);
return sc;
}
// Taken from https://github.com/substack/semver-compare, thanks substack!
function cmp (a, b) {
var pa = a.split('.');
var pb = b.split('.');
for (var i = 0; i < 3; i++) {
var na = Number(pa[i]);
var nb = Number(pb[i]);
if (na > nb) return 1;
if (nb > na) return -1;
if (!isNaN(na) && isNaN(nb)) return 1;
if (isNaN(na) && !isNaN(nb)) return -1;
}
return 0;
}
console.group("[pkg93]");
var failed = false;
console.log("[pkg93] Injecting packages...");
try {
var config = JSON.parse(localStorage[".pkg93/config.json"]);
config.installed.forEach(function (pkg) {
eval(localStorage[".pkg93/downloaded/" + pkg + ".js"]);
});
} catch (err) {
console.error("[pkg93] Couldn't load package information.");
failed = true;
}
if (!failed) {
console.log("[pkg93] Not implemented.")
}
console.log("[pkg93] Done!");
console.groupEnd();
le._apps.pkg93 = {
exec: function() {
const 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"];
const args = this.arg.arguments;
const version = "v1.0.0";
if (localStorage[".pkg93/config.json"] === undefined) {
localStorage[".pkg93/config.json"] = '{"repos": ["http://codinggamerhd.com/main-repo"], "installed": [], "pkglist": []}';
}
if (localStorage[".pkg93/downloaded/"] === undefined) {
localStorage[".pkg93/downloaded/"] = "";
}
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 = JSON.parse(localStorage[".pkg93/config.json"]);
var request = new XMLHttpRequest();
if (args.length === 0) {
$log(`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
ls [pkgs|installed|repos] Lists all packages, installed
packages or repositories.
Color meanings
Executing OK Error Warning
Examples
pkg93 get gud
pkg93 rm kebab
WARN Not all packages are safe. Treat packages like EXE files.`);
} else if (args[0] == "pull") {
var pkgs = [];
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);
json.packages.forEach(function(item) {
$log("OK " + item + "@" + source);
pkgs.push(item + "@" + source);
});
config.pkglist = config.pkglist.concat(pkgs);
} catch (err) {
$log("ERR " + err.message);
}
});
} 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 {
$log("SRCH " + args[1]);
var index = config.pkglist.findIndex(function(string) {
return string.split("@")[0] == args[1];
});
if (index < 0) {
$log("ERR Not found.");
} 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);
request.open('GET', pkgsource + "/" + pkgname + "/" + json.inject, false);
request.send(null);
localStorage[".pkg93/downloaded/" + pkgname + ".js"] = request.responseText;
eval(request.responseText);
$log("OK Injected package!");
config.installed.push(pkgname);
} catch (err) {
$log("ERR " + err.message);
}
}
}
} 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 if (!!localStorage[".pkg93/downloaded/un" + args[1] + ".js"]) {
eval(localStorage[".pkg93/downloaded/un" + args[1] + ".js"]); // Typing eval makes me feel dirty.
} else {
var index = config.installed.indexOf(args[1]);
if (index < 0) {
$log("ERR Not found.");
} else {
try {
if (le._apps[config.installed[index]] === null) {
$log("ERR Already removed.");
} else {
le._apps[config.installed[index]] = null;
config.installed = config.installed.splice(index, 1);
$log("OK Removed!");
}
} catch (err) {
$log("ERR " + err.message);
}
}
}
} else if (args[0] == "add-repo") {
try {
config.repos.push(args[1]); // well, that was easy
$log("OK Done!\n Run \"pkg93 pull\" to update the package listing.");
} catch (err) {
$log("ERR " + err.message);
}
} else if (args[0] == "rm-repo") {
try {
config.repos = config.repos.splice(parseInt(args[1]), 1);
$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") {
$log(config.repos.join("\n"));
} else {
$log("ERR You must select either pkgs, installed, or repos.");
}
} else {
$log("ERR Invalid command. Type \"pkg93\" without any arguments for help.");
}
localStorage[".pkg93/config.json"] = JSON.stringify(config);
},
icon: "/c/sys/skins/w93/install.png",
terminal: true,
hascli: true
};