From 07d8e1078cf1a474d093b18f090b910eb52260e2 Mon Sep 17 00:00:00 2001 From: Nick Breland Date: Tue, 13 Jun 2023 22:02:03 +0100 Subject: [PATCH 1/5] Add Swatch Internet Time widget (widswatchbeats) --- apps/widswatchbeats/metadata.json | 18 +++++++++++++ apps/widswatchbeats/widget-icon.js | 1 + apps/widswatchbeats/widget.js | 41 ++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 apps/widswatchbeats/metadata.json create mode 100644 apps/widswatchbeats/widget-icon.js create mode 100644 apps/widswatchbeats/widget.js diff --git a/apps/widswatchbeats/metadata.json b/apps/widswatchbeats/metadata.json new file mode 100644 index 000000000..732db6a6d --- /dev/null +++ b/apps/widswatchbeats/metadata.json @@ -0,0 +1,18 @@ +{ + "id": "widswatchbeats", + "name": "Swatch Internet Time", + "icon": "widget.png", + "version": "0.01", + "description": "Displays the current .beat (Swatch Internet Time)", + "tags": "time,swatch,internet,beat,.beat,clock", + "storage": [{ + "name": "widswatchbeats.wid.js", + "url": "widget.js" + }, + { + "name": "widswatchbeats.img", + "url": "widget-icon.js", + "evaluate": true + } + ] +} diff --git a/apps/widswatchbeats/widget-icon.js b/apps/widswatchbeats/widget-icon.js new file mode 100644 index 000000000..efc1c1393 --- /dev/null +++ b/apps/widswatchbeats/widget-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("7FUwcB/4A/AH4A/AH4A/AH4A/AH4A/AAWAgAACj5F/ABP8J4cAgZG/KH4AD+A5Eh5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q18BWNC4p6bKD34AwcBCxAOEAAV/CKAjG4AOGEZhQK/wbFn4VGBwxiKCJEAg4ONKCy/FFgoACwA+NCJkAj5QqgAULCK8DKEaAHPoYAB8AuKCKJQjHxwRRKBZBDKFB9DKBoRRgEPKF/4CRgvDCJpQrDonAKH5QVn//+BQOg4RGKEk/8BQOgI1HHwQROBBBQaGoWAPpoILKBAIJAAKtIABpQGMoRQRHwoIRKEwgIKH5QfdJBQrgYJCI5ApFMQRQ/KDQAIKH5Q/FgpQaEZBQ/AA4aFKGoAIKBXgCJZQ/EA5Q/KBKeGKH4+HTxBQ/Hw+AKH4+OEwpQ/HxSzSKHEAn5QJgPAKH5QG/AKGv5Q6v4lLI4gABBAxQ/KBCqCKH4AGDRBQX5MkyVJAQRQuHYZQ/KH5Q/KCYgCKBI+HKH5QQHZJQrEBBQ/Hw4gIcCJQ/KH4XGwBQWCJYIFKEqqJHxxHLIgpQLBYpQRgEHA4xQCa5BQOgE/YoxQLGQpQSDpRQFHwQyFWZAAIKFcDCYf4MR5Q/KBgRDKHUfFYhiQ4BQSMpBQTjhQZCIhQInBQvFQn/8BQKCAn4KF8fwAbFg5QFCgoRKKA8BBAs/Cgi2HKCnwDYopFAAIOGCJINGh5QLMo5QUX4rLFZxcPCAwmFgZEGMppQC/JQJ/7sEj4pFHw59IIIIAHEwxEFKAxlFKAYAT8AvEABJBDHAwAE4AONAH4A/AH4A/AH4A/AEH4IH5QQA=")) diff --git a/apps/widswatchbeats/widget.js b/apps/widswatchbeats/widget.js new file mode 100644 index 000000000..dfb57cce4 --- /dev/null +++ b/apps/widswatchbeats/widget.js @@ -0,0 +1,41 @@ +(function() { + const WIDTH = 50; + const SEC_PER_BEAT = 86.4; + + let drawTimeout; + + function getSecondsSinceMidnight() { + const now = new Date(); + return now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds(); + } + + function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + const nextSecond = SEC_PER_BEAT - (getSecondsSinceMidnight() % SEC_PER_BEAT); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + WIDGETS.widswatchbeats.draw(); + }, nextSecond * 1000 + 1); // Add one ms to ensure we're past the beat + } + + function draw() { + const now = new Date(); + const seconds = now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds(); + const beats = Math.floor(seconds / SEC_PER_BEAT); + const beatsString = '@' + beats.toString().padStart(3, '0'); + + g.reset(); + g.setFontAlign(0, 0); + g.clearRect(this.x, this.y, this.x + WIDTH, this.y+22); + g.setFont("6x8", 2); + g.drawString(beatsString, this.x+WIDTH/2, this.y+12); + queueDraw(); + } + + WIDGETS.widswatchbeats = { + area: "tl", + width: WIDTH, + draw + }; + +})(); From 78b98315ca54d2c971ea1d49793fb40d1a307560 Mon Sep 17 00:00:00 2001 From: Nick Breland Date: Fri, 23 Jun 2023 10:13:22 +0100 Subject: [PATCH 2/5] Cleanup metadata, indentation, and smaller icon --- apps/widswatchbeats/metadata.json | 28 ++++++++++++---------------- apps/widswatchbeats/widget-icon.js | 2 +- apps/widswatchbeats/widget-icon.png | Bin 0 -> 403 bytes apps/widswatchbeats/widget.js | 4 ++-- 4 files changed, 15 insertions(+), 19 deletions(-) create mode 100644 apps/widswatchbeats/widget-icon.png diff --git a/apps/widswatchbeats/metadata.json b/apps/widswatchbeats/metadata.json index 732db6a6d..c02d0b940 100644 --- a/apps/widswatchbeats/metadata.json +++ b/apps/widswatchbeats/metadata.json @@ -1,18 +1,14 @@ { - "id": "widswatchbeats", - "name": "Swatch Internet Time", - "icon": "widget.png", - "version": "0.01", - "description": "Displays the current .beat (Swatch Internet Time)", - "tags": "time,swatch,internet,beat,.beat,clock", - "storage": [{ - "name": "widswatchbeats.wid.js", - "url": "widget.js" - }, - { - "name": "widswatchbeats.img", - "url": "widget-icon.js", - "evaluate": true - } - ] + "id": "widswatchbeats", + "name": "Swatch Internet Time", + "icon": "widget-icon.png", + "type": "widget", + "version": "0.01", + "description": "Displays the current .beat (e.g. @500 for midday)", + "tags": "widget,time,swatch,internet,beat,.beat,clock", + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name": "widswatchbeats.wid.js","url": "widget.js"}, + {"name": "widswatchbeats.img","url": "widget-icon.js","evaluate": true} + ] } diff --git a/apps/widswatchbeats/widget-icon.js b/apps/widswatchbeats/widget-icon.js index efc1c1393..727c8b969 100644 --- a/apps/widswatchbeats/widget-icon.js +++ b/apps/widswatchbeats/widget-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("7FUwcB/4A/AH4A/AH4A/AH4A/AH4A/AAWAgAACj5F/ABP8J4cAgZG/KH4AD+A5Eh5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q/KH5Q18BWNC4p6bKD34AwcBCxAOEAAV/CKAjG4AOGEZhQK/wbFn4VGBwxiKCJEAg4ONKCy/FFgoACwA+NCJkAj5QqgAULCK8DKEaAHPoYAB8AuKCKJQjHxwRRKBZBDKFB9DKBoRRgEPKF/4CRgvDCJpQrDonAKH5QVn//+BQOg4RGKEk/8BQOgI1HHwQROBBBQaGoWAPpoILKBAIJAAKtIABpQGMoRQRHwoIRKEwgIKH5QfdJBQrgYJCI5ApFMQRQ/KDQAIKH5Q/FgpQaEZBQ/AA4aFKGoAIKBXgCJZQ/EA5Q/KBKeGKH4+HTxBQ/Hw+AKH4+OEwpQ/HxSzSKHEAn5QJgPAKH5QG/AKGv5Q6v4lLI4gABBAxQ/KBCqCKH4AGDRBQX5MkyVJAQRQuHYZQ/KH5Q/KCYgCKBI+HKH5QQHZJQrEBBQ/Hw4gIcCJQ/KH4XGwBQWCJYIFKEqqJHxxHLIgpQLBYpQRgEHA4xQCa5BQOgE/YoxQLGQpQSDpRQFHwQyFWZAAIKFcDCYf4MR5Q/KBgRDKHUfFYhiQ4BQSMpBQTjhQZCIhQInBQvFQn/8BQKCAn4KF8fwAbFg5QFCgoRKKA8BBAs/Cgi2HKCnwDYopFAAIOGCJINGh5QLMo5QUX4rLFZxcPCAwmFgZEGMppQC/JQJ/7sEj4pFHw59IIIIAHEwxEFKAxlFKAYAT8AvEABJBDHAwAE4AONAH4A/AH4A/AH4A/AEH4IH5QQA=")) +require("heatshrink").decompress(atob("mEwhG0AH4A/AH4A/AH4A/ACW7AAwum4XQAA3CF8vJ64AG5Iv/F/4v/F/4v/F/4lb4XJAA/QF4/QCRHCFyG7EpAAT6G7F/4v/F/4v/F/4vf2nC5IAHHJHQCRHCFyAAK5IvH5IlbF/4v/F/4v/F/4v/ABPC6AAG4Qvl2m7AAwumAH4A/AH4A/AH4As")) diff --git a/apps/widswatchbeats/widget-icon.png b/apps/widswatchbeats/widget-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..726a57825680d492930734647df29322aa12a945 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I6p}rHd>I(3)EF2VS{N990fib~ zFffz?6~0PfV6d9Oz#v{QXIG#NP(m)iC&cwX1H*q_-v3fk|BH+NKYjYYvGG3;G&KA_ zZ~#bG^n8;Bs$@*^c6Z_Ycys9+Acwug)7O>#Ih#0#rS5^?+1WrLKTj9O5R22v2@-h? zft(yH8$1klGc+=aab7b~;5eXkkZ+QP#3i9a51&4LDyq;~rm*;mfZoDMZA^38Rqdv1_o9J2JOLzKA~vH%}>cptHiD08()k)Bpeg literal 0 HcmV?d00001 diff --git a/apps/widswatchbeats/widget.js b/apps/widswatchbeats/widget.js index dfb57cce4..7f2427c74 100644 --- a/apps/widswatchbeats/widget.js +++ b/apps/widswatchbeats/widget.js @@ -1,7 +1,7 @@ (function() { const WIDTH = 50; const SEC_PER_BEAT = 86.4; - + let drawTimeout; function getSecondsSinceMidnight() { @@ -23,7 +23,7 @@ const seconds = now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds(); const beats = Math.floor(seconds / SEC_PER_BEAT); const beatsString = '@' + beats.toString().padStart(3, '0'); - + g.reset(); g.setFontAlign(0, 0); g.clearRect(this.x, this.y, this.x + WIDTH, this.y+22); From 757649c427b243e6fb5fd39cf51b658eb7dafbc5 Mon Sep 17 00:00:00 2001 From: Nick Breland Date: Fri, 23 Jun 2023 10:15:53 +0100 Subject: [PATCH 3/5] Add 'Widget' to name --- apps/widswatchbeats/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widswatchbeats/metadata.json b/apps/widswatchbeats/metadata.json index c02d0b940..787199b8e 100644 --- a/apps/widswatchbeats/metadata.json +++ b/apps/widswatchbeats/metadata.json @@ -1,6 +1,6 @@ { "id": "widswatchbeats", - "name": "Swatch Internet Time", + "name": "Swatch Internet Time Widget", "icon": "widget-icon.png", "type": "widget", "version": "0.01", From 30fbf1e4c96e7e6c7e6b1f188db876b408784987 Mon Sep 17 00:00:00 2001 From: Nick Breland Date: Fri, 23 Jun 2023 15:09:34 +0100 Subject: [PATCH 4/5] Remove image line from metadata --- apps/widswatchbeats/metadata.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/widswatchbeats/metadata.json b/apps/widswatchbeats/metadata.json index 787199b8e..5c8229966 100644 --- a/apps/widswatchbeats/metadata.json +++ b/apps/widswatchbeats/metadata.json @@ -8,7 +8,6 @@ "tags": "widget,time,swatch,internet,beat,.beat,clock", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ - {"name": "widswatchbeats.wid.js","url": "widget.js"}, - {"name": "widswatchbeats.img","url": "widget-icon.js","evaluate": true} + {"name": "widswatchbeats.wid.js","url": "widget.js"} ] } From d869fd6ade26e1e3d112d9514cfbff6e61ee2b4d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 23 Jun 2023 15:21:06 +0100 Subject: [PATCH 5/5] Delete widget-icon.js --- apps/widswatchbeats/widget-icon.js | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/widswatchbeats/widget-icon.js diff --git a/apps/widswatchbeats/widget-icon.js b/apps/widswatchbeats/widget-icon.js deleted file mode 100644 index 727c8b969..000000000 --- a/apps/widswatchbeats/widget-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEwhG0AH4A/AH4A/AH4A/ACW7AAwum4XQAA3CF8vJ64AG5Iv/F/4v/F/4v/F/4lb4XJAA/QF4/QCRHCFyG7EpAAT6G7F/4v/F/4v/F/4vf2nC5IAHHJHQCRHCFyAAK5IvH5IlbF/4v/F/4v/F/4v/ABPC6AAG4Qvl2m7AAwumAH4A/AH4A/AH4As"))