From 9691d0bb0466535af2858f6876b39f1ddef80dc1 Mon Sep 17 00:00:00 2001 From: The Dod Date: Wed, 12 Jan 2022 19:19:16 +0200 Subject: [PATCH] RAM efficient version of `fourTwentyTz.js` As suggested by @gfwilliams here: https://github.com/espruino/BangleApps/pull/1152#issuecomment-1009739110 Also make `apps.json` entry more accurate, and play nice with dark theme. --- apps.json | 5 +- apps/ftclock/ChangeLog | 1 + apps/ftclock/app.js | 3 +- apps/ftclock/fourTwenty.js | 12 +- apps/ftclock/fourTwentyTz.js | 492 +++------------------------------ apps/ftclock/mkFourTwentyTz.js | 17 +- 6 files changed, 57 insertions(+), 473 deletions(-) diff --git a/apps.json b/apps.json index 4c6f3bdcf..761e9d363 100644 --- a/apps.json +++ b/apps.json @@ -5169,14 +5169,13 @@ { "id": "ftclock", "name": "Four Twenty Clock", - "version": "0.01", + "version": "0.02", "description": "A clock that tells when and where it's going to be 4:20 next", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}, {"url":"screenshot1.png"}], "type": "clock", "tags": "clock", - "supports": ["BANGLEJS","BANGLEJS2"], - "allow_emulator": true, + "supports": ["BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"ftclock.app.js","url":"app.js"}, diff --git a/apps/ftclock/ChangeLog b/apps/ftclock/ChangeLog index 9db0e26c5..c944dd9ac 100644 --- a/apps/ftclock/ChangeLog +++ b/apps/ftclock/ChangeLog @@ -1 +1,2 @@ 0.01: first release +0.02: RAM efficient version of `fourTwentyTz.js` (as suggested by @gfwilliams). diff --git a/apps/ftclock/app.js b/apps/ftclock/app.js index 1aed8da54..b12db10f1 100644 --- a/apps/ftclock/app.js +++ b/apps/ftclock/app.js @@ -17,14 +17,13 @@ function queueDraw() { function draw() { g.reset(); - g.setBgColor("#ffffff"); let date = new Date(); let timeStr = require("locale").time(date,1); let next420 = getNextFourTwenty(); g.clearRect(0,26,g.getWidth(),g.getHeight()); g.setColor("#00ff00").setFontAlign(0,-1).setFont("Teletext10x18Ascii",2); g.drawString(next420.minutes? timeStr: `\0${leaf_img}${timeStr}\0${leaf_img}`, g.getWidth()/2, 28); - g.setColor("#000000"); + g.setColor(g.theme.fg); g.setFontAlign(-1,-1).setFont("Teletext10x18Ascii"); g.drawString(g.wrapString(next420.text, g.getWidth()-8).join("\n"),4,60); diff --git a/apps/ftclock/fourTwenty.js b/apps/ftclock/fourTwenty.js index ac15f40e6..b2a2aa8fb 100644 --- a/apps/ftclock/fourTwenty.js +++ b/apps/ftclock/fourTwenty.js @@ -1,4 +1,6 @@ -let timezones = require("fourTwentyTz").timezones; +let ftz = require("fourTwentyTz"), + offsets = ftz.offsets, + timezones = ftz.timezones; function get420offset() { let current_time = Math.floor((Date.now()%(24*3600*1000))/60000); @@ -24,10 +26,10 @@ function makeFourTwentyText(minutes, places) { function getNextFourTwenty() { let offs = get420offset(); - for (let i=0; i { if (err) { console.log("Can't open output file"); @@ -65,8 +69,17 @@ fs.createReadStream(__dirname+'/country.csv') fs.write(fd, "// Generated by mkFourTwentyTz.js\n", handleWrite); fs.write(fd, `// ${Date()}\n`, handleWrite); fs.write(fd, "// Data source: https://timezonedb.com/files/timezonedb.csv.zip\n", handleWrite); - fs.write(fd, "exports.timezones = ", handleWrite); - fs.write(fd, JSON.stringify(offsdict, null, 4), handleWrite); + fs.write(fd, "exports.offsets = ", handleWrite); + fs.write(fd, JSON.stringify(offsets), handleWrite); + fs.write(fd, ";\n", handleWrite); + fs.write(fd, "exports.timezones = function(offs) {\n", handleWrite); + fs.write(fd, " switch (offs) {\n", handleWrite); + for (o in offsdict) { + fs.write(fd, ` case ${o}: return ${JSON.stringify(offsdict[o])};\n`, handleWrite); + } + fs.write(fd, " default: return [\"Houston, we have a bug.\"];\n", handleWrite); + fs.write(fd, " };\n", handleWrite); + fs.write(fd, "};\n", handleWrite); console.log('Done.'); }); })