diff --git a/apps.json b/apps.json index c7abcf9f0..f7bec7695 100644 --- a/apps.json +++ b/apps.json @@ -3598,5 +3598,18 @@ "storage": [ {"name":"menusmall.boot.js","url":"boot.js"} ] +}, +{ "id": "ffcniftya", + "name": "Nifty-A Clock", + "icon": "app.png", + "version":"0.01", + "description": "A nifty clock with time and date", + "tags":"clock,b2", + "type":"clock", + "allow_emulator":true, + "storage": [ + {"name":"ffcniftya.app.js","url":"app.js"}, + {"name":"ffcniftya.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/ffcniftya/ChangeLog b/apps/ffcniftya/ChangeLog new file mode 100644 index 000000000..18bc264a3 --- /dev/null +++ b/apps/ffcniftya/ChangeLog @@ -0,0 +1 @@ +0.01: New Clock Nifty A diff --git a/apps/ffcniftya/app-icon.js b/apps/ffcniftya/app-icon.js new file mode 100644 index 000000000..f0a2393b1 --- /dev/null +++ b/apps/ffcniftya/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkEIf4A5gX/+AGEn//mIWLgP/C4gGCAAMgC5UvC4sDC4YICkIhBgMQiEBE4Uxn4XDj//iEAn/yA4ICBgUikEikYXBBAIXEn/xJYURAYMygERkQHBiYLBKYIXF+AVDC4czgUSmIXBCQgED+ZeBR4YXBLYICDC5CPGC4IAIC40zmaPDC4MSLQQXK+ayCR4QXCiRoEC44ECh4bCC4MTiTDBC6ZHOC5B3NLYcvC4kBgL5BAAUikT+BfIIrB/8ykf/eYQXBkUTI4cBW4YQCgQGDmAXDkJfEC46GBAoJKCR4geCAAMRAAZRDAoIODO4UBPRIAJR5QXWgKNCTApNDC5Mv/6/DAwR3GAAyHCC4anJIo3/+bvEa4Uia4oXHkEvC4cvIgUf+YXKHYIvEAgcPC5QSGC5UBSwYXJLYQXFkUhgABBC5Ef/4mBl4XEmETmIXKgaXBmYCBC4cTkMxiQXJS4IACL4p3MgESCwJHFR5oxCiB3FkERC5cSToQXFmUyiAZFR48Bn7zCAQMjkfykQkBN4n/XgKPBAAQgCUQIfBUwYXHFgIGCdI4XDmYADmIIEkAWJAH4A4A==")) \ No newline at end of file diff --git a/apps/ffcniftya/app.js b/apps/ffcniftya/app.js new file mode 100644 index 000000000..0b8865bec --- /dev/null +++ b/apps/ffcniftya/app.js @@ -0,0 +1,95 @@ +const locale = require("locale"); +const is12Hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"]; + +/* Clock *********************************************/ +const scale = g.getWidth() / 176; + +const widget = 24; + +const viewport = { + width: g.getWidth(), + height: g.getHeight(), +} + +const center = { + x: viewport.width / 2, + y: Math.round(((viewport.height - widget) / 2) + widget), +} + +function d02(value) { + return ('0' + value).substr(-2); +} + +function draw() { + g.reset(); + g.clearRect(0, widget, viewport.width, viewport.height); + const now = new Date(); + + const hour = d02(now.getHours() - (is12Hour && now.getHours() > 12 ? 12 : 0)); + const minutes = d02(now.getMinutes()); + const day = d02(now.getDay()); + const month = d02(now.getMonth() + 1); + const year = now.getFullYear(); + + const month2 = locale.month(now, 3); + const day2 = locale.dow(now, 3); + + g.setFontAlign(1, 0).setFont("Vector", 90 * scale); + g.drawString(hour, center.x + 32 * scale, center.y - 31 * scale); + g.drawString(minutes, center.x + 32 * scale, center.y + 46 * scale); + + g.fillRect(center.x + 30 * scale, center.y - 72 * scale, center.x + 32 * scale, center.y + 74 * scale); + + g.setFontAlign(-1, 0).setFont("Vector", 16 * scale); + g.drawString(year, center.x + 40 * scale, center.y - 62 * scale); + g.drawString(month, center.x + 40 * scale, center.y - 44 * scale); + g.drawString(day, center.x + 40 * scale, center.y - 26 * scale); + g.drawString(month2, center.x + 40 * scale, center.y + 48 * scale); + g.drawString(day2, center.x + 40 * scale, center.y + 66 * scale); +} + + +/* Minute Ticker *************************************/ + +let tickTimer; + +function clearTickTimer() { + if (tickTimer) { + clearTimeout(tickTimer); + tickTimer = undefined; + } +} + +function queueNextTick() { + clearTickTimer(); + tickTimer = setTimeout(tick, 60000 - (Date.now() % 60000)); + // tickTimer = setTimeout(tick, 3000); +} + +function tick() { + draw(); + queueNextTick(); +} + +/* Init **********************************************/ + +// Clear the screen once, at startup +g.clear(); +// Start ticking +tick(); + +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower', (on) => { + if (on) { + tick(); // Start ticking + } else { + clearTickTimer(); // stop ticking + } +}); + +// Load widgets +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +// Show launcher when middle button pressed +Bangle.setUI("clock"); \ No newline at end of file diff --git a/apps/ffcniftya/app.png b/apps/ffcniftya/app.png new file mode 100644 index 000000000..1cd8a49b7 Binary files /dev/null and b/apps/ffcniftya/app.png differ