noname/game/directory.js

199 lines
4.6 KiB
JavaScript

var fs = require("fs");
var path = require("path");
var exec = require("child_process").exec;
global.window = global;
require(__dirname + "/update.js");
require(__dirname + "/asset.js");
var updates = window.noname_update;
var newversion = false;
var commit = false;
if (process.argv[2]) {
if (/[0-9]/.test(process.argv[2][0])) {
newversion = true;
updates.update = updates.version;
updates.version = "1.9." + process.argv[2];
commit = updates.version;
} else {
commit = process.argv[2];
}
}
var assetlist = "";
var skinlist = "window.noname_skin_list={\n";
var entrylist = [];
var entrymap = {};
var get = function (dir, callback) {
fs.readdir(dir, function (err, list) {
var shift = function () {
if (list.length) {
var filename = list.shift();
var delay = false;
if (!/\.|~|_/.test(filename[0])) {
var url = dir + "/" + filename;
var stat = fs.statSync(url);
if (stat.isFile()) {
if (
[".jpg", ".png", ".mp3", ".ttf"].indexOf(
path.extname(url)
) != -1
) {
var assetentry = path.relative(
path.dirname(__dirname),
url
);
assetlist += ",\n\t'" + assetentry + "'";
entrylist.push(assetentry);
}
} else if (stat.isDirectory()) {
if (dir == path.dirname(__dirname) + "/image/skin") {
fs.readdir(url, function (err, list) {
var num = 0;
for (var i = 0; i < list.length; i++) {
var url2 = url + "/" + list[i];
var stat = fs.statSync(url2);
if (
stat.isFile() &&
path.extname(url2) == ".jpg"
) {
num++;
}
}
skinlist += "\t" + filename + ":" + num + ",\n";
entrymap[filename] = num;
shift();
});
delay = true;
} else {
get(url, shift);
delay = true;
}
}
}
if (!delay) {
shift();
}
} else {
callback();
}
};
shift();
});
};
get(path.dirname(__dirname), function () {
var diff = false;
if (window.noname_asset_list.length == entrylist.length + 1) {
for (var i = 0; i < entrylist.length; i++) {
if (entrylist[i] != window.noname_asset_list[i + 1]) {
diff = true;
break;
}
}
if (!diff) {
for (var i in entrymap) {
if (window.noname_skin_list[i] !== entrymap[i]) {
diff = true;
break;
}
}
for (var i in noname_skin_list) {
if (window.noname_skin_list[i] !== entrymap[i]) {
diff = true;
break;
}
}
}
} else {
diff = true;
}
var next = function () {
exec("git diff --name-only", (error, stdout, stderr) => {
var updatelist =
"window.noname_update={\n\tversion:'" + updates.version + "',";
updatelist += "\n\tupdate:'" + (updates.update || "") + "',";
var apply = function (name, list) {
updatelist += "\n\t" + name + ":[\n";
for (var i = 0; i < list.length; i++) {
updatelist += "\t\t'" + list[i] + "'";
if (i < list.length - 1) {
updatelist += ",";
}
updatelist += "\n";
}
updatelist += "\t]";
};
if (updates.changeLog) {
apply("changeLog", updates.changeLog);
updatelist += ",";
}
if (updates.players) {
apply("players", updates.players);
updatelist += ",";
}
if (updates.cards) {
apply("cards", updates.cards);
updatelist += ",";
}
var changes = stdout.split("\n");
for (var i = 0; i < changes.length; i++) {
var extname = path.extname(changes[i]);
if (
!changes[i] ||
(extname != ".js" && extname != ".css") ||
changes[i] == "game/update.js"
) {
changes.splice(i--, 1);
}
}
var files;
if (newversion) {
files = [];
} else {
files = updates.files || [];
}
for (var i = 0; i < changes.length; i++) {
if (files.indexOf(changes[i]) === -1) {
files.push(changes[i]);
}
}
files.sort(function (a, b) {
if (a > b) return 1;
if (a < b) return -1;
return 0;
});
apply("files", files);
fs.writeFile(
"game/update.js",
updatelist + "\n};",
"utf-8",
function () {
console.log("updated update.js");
if (commit && typeof commit === "string") {
exec("git add . && git commit -am " + commit);
console.log("committed " + commit);
}
}
);
});
};
if (diff) {
var assetversion =
"window.noname_asset_list=[\n\t'" + updates.version + "'";
fs.writeFile(
"game/asset.js",
assetversion +
assetlist +
"\n];\n" +
skinlist.slice(0, skinlist.length - 2) +
"\n};",
"utf-8",
function () {
console.log("udpated asset.js");
next();
}
);
} else {
next();
}
});