2018-02-18 00:21:44 +02:00

91 lines
2.8 KiB
JavaScript

var fs = require('fs');
var dirname = './games/';
var output = {};
function matchRe(regexp, string) {
var isMatching = string.match(regexp);
if (isMatching) {
return isMatching[1].trim();
}
return '';
}
function getGameInfo(gamepath, mainFile, gamename) {
var gameinfo = {
name: gamename,
author: '',
version: '',
info: ''
};
var game = fs.readFileSync(gamepath + '/' + mainFile, 'utf-8');
gameinfo.name = matchRe(/\$Name\(ru\)\s*:\s*([^\$\n]+)/, game);
if (gameinfo.name === '') {
gameinfo.name = matchRe(/\$Name\s*:\s*([^\$\n]+)/, game);
if (gameinfo.name === '') {
gameinfo.name = gamename;
}
}
gameinfo.author = matchRe(/\$Author\s*:\s*([^\$\n]+)/, game);
gameinfo.version = matchRe(/\$Version\s*:\s*([^\$\n]+)/, game);
gameinfo.info = matchRe(/\$Info\s*:\s*([^\$\n]+)/, game);
return gameinfo;
}
function walkSync(dir, filelist, gamedir) {
var files = filelist;
fs.readdirSync(dir).forEach(function readDir(file) {
var fullpath = dir + '/' + file;
if (fs.statSync(fullpath).isDirectory()) {
files = walkSync(fullpath, files, gamedir);
} else if (file.match(/(jpg|jpeg|png|gif|bmp|tiff|tif)$/i)) {
files.push(fullpath.replace(gamedir + '/', ''));
}
});
return files;
}
fs.readdir(dirname, function readFn(err, filenames) {
if (err) {
return;
}
filenames.forEach(function processFn(filename) {
var gamepath = dirname + filename;
var gameInfo = {};
var images;
var hasTheme = false;
var stead = null;
var mainFile;
if (fs.lstatSync(gamepath).isDirectory()) {
if (fs.existsSync(gamepath + '/main.lua')) {
stead = 2; // stead 2.x
mainFile = 'main.lua';
}
if (fs.existsSync(gamepath + '/main3.lua')) {
stead = 3; // stead 3.x
mainFile = 'main3.lua';
}
if (stead) {
gameInfo = getGameInfo(gamepath, mainFile, filename);
images = walkSync(gamepath, [], gamepath);
if (fs.existsSync(gamepath + '/theme.ini')) {
hasTheme = true;
}
output[filename] = {
name: gameInfo.name,
details: {
version: gameInfo.version,
author: gameInfo.author,
info: gameInfo.info
},
stead: stead,
theme: hasTheme,
preload: images
};
}
}
});
fs.writeFile(dirname + 'games_list.json', JSON.stringify(output), {flag: 'w'});
});