BangleApps/bin/thumbnailer.js

85 lines
2.6 KiB
JavaScript
Executable File

#!/usr/bin/node
var EMULATOR = "banglejs1";
var appId;
if (process.argv.length!=3) {
console.log("USAGE:");
console.log(" bin/thumbnailer.jd APP_ID");
process.exit(1);
}
appId = process.argv[2];
imageFn = "out.png";
if (!require("fs").existsSync(__dirname + "/../../EspruinoWebIDE")) {
console.log("You need to:");
console.log(" git clone https://github.com/espruino/EspruinoWebIDE");
console.log("At the same level as this project");
process.exit(1);
}
eval(require("fs").readFileSync(__dirname + "/../../EspruinoWebIDE/emu/emulator_"+EMULATOR+".js").toString());
eval(require("fs").readFileSync(__dirname + "/../../EspruinoWebIDE/emu/emu_"+EMULATOR+".js").toString());
eval(require("fs").readFileSync(__dirname + "/../../EspruinoWebIDE/emu/common.js").toString());
var SETTINGS = {
pretokenise : true
};
var Const = {
};
module = undefined;
eval(require("fs").readFileSync(__dirname + "/../core/lib/espruinotools.js").toString());
eval(require("fs").readFileSync(__dirname + "/../core/js/utils.js").toString());
eval(require("fs").readFileSync(__dirname + "/../core/js/appinfo.js").toString());
var apps = JSON.parse(require("fs").readFileSync(__dirname+"/../apps.json"));
var app = apps.find(a=>a.id==appId);
if (!app) ERROR(`App ${JSON.stringify(appId)} not found`);
if (app.custom) ERROR(`App ${JSON.stringify(appId)} requires HTML customisation`);
jsRXCallback = function() {};
jsUpdateGfx = function() {};
// wait until loaded...
setTimeout(function() {
console.log("Loaded...");
jsInit();
jsIdle(true); // not automatic
AppInfo.getFiles(app, {
fileGetter:function(url) {
console.log(__dirname+"/"+url);
return Promise.resolve(require("fs").readFileSync(__dirname+"/../"+url).toString("binary"));
}, settings : SETTINGS}).then(files => {
//console.log(files);
var command = "Bangle.factoryReset()\n";
command += files.map(f=>f.cmd).join("\n")+"\n";
command += `load("${appId}.app.js")\n`;
//console.log(command);
console.log("Uploading...");
jsTransmitString(command);
console.log("Done.");
jsIdle();
jsIdle();
jsIdle();
jsStopIdle();
var rgba = new Uint8Array(GFX_WIDTH*GFX_HEIGHT*4);
jsGetGfxContents(rgba);
var Jimp = require("jimp");
let image = new Jimp(GFX_WIDTH, GFX_HEIGHT, function (err, image) {
if (err) throw err;
let buffer = image.bitmap.data;
buffer.set(rgba);
image.write(imageFn, (err) => {
if (err) throw err;
console.log("Image written as "+imageFn);
});
});
});
});