From 4ed167d1b66ee94be5ecaf7e1a26a0afcb35697a Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 13:08:59 +0200 Subject: [PATCH 01/19] Drink counter - init --- apps/drinkcounter/ChangeLog | 1 + apps/drinkcounter/README.md | 12 +++++++ apps/drinkcounter/app.js | 48 +++++++++++++++++++++++++ apps/drinkcounter/app.png | Bin 0 -> 419 bytes apps/drinkcounter/drinkcounter-icon.js | 1 + apps/drinkcounter/metadata.json | 17 +++++++++ 6 files changed, 79 insertions(+) create mode 100644 apps/drinkcounter/ChangeLog create mode 100644 apps/drinkcounter/README.md create mode 100644 apps/drinkcounter/app.js create mode 100644 apps/drinkcounter/app.png create mode 100644 apps/drinkcounter/drinkcounter-icon.js create mode 100644 apps/drinkcounter/metadata.json diff --git a/apps/drinkcounter/ChangeLog b/apps/drinkcounter/ChangeLog new file mode 100644 index 000000000..bb80ab4d7 --- /dev/null +++ b/apps/drinkcounter/ChangeLog @@ -0,0 +1 @@ +0.10: Initial release \ No newline at end of file diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md new file mode 100644 index 000000000..298c82743 --- /dev/null +++ b/apps/drinkcounter/README.md @@ -0,0 +1,12 @@ +# Drink Counter + +Counts drinks you had for science. Calculates BAC. + +## Usage + + + + +## Creator + +Hank - contact at http://forum.espruino.com diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js new file mode 100644 index 000000000..dcd1e8e76 --- /dev/null +++ b/apps/drinkcounter/app.js @@ -0,0 +1,48 @@ +Bangle.setLCDPower(1); +Bangle.setLCDTimeout(0); +g.reset(); +c = 1; + + +var icoBeer = require("heatshrink").decompress(atob("lEoxH+AG2BAAoecEpAoWC4fXAAIGGAAowTDxAmJE4YGGE5QeJE5QHHE7owJE0pQKE7pQJE86fnE5QJSE5YUHBAIJQYxIpFAAvGBBAJIExYoGDgIACBBApFExonCDYoAOFSAnbFJYnE6vVDYYFHAwakQE4YaFAoQGJEIYoME7QoEE7ogFE/4neTBgntY84n/E+7HUE64mDE8IAFEw4nDTBifIE9gmId7gALE5IGCAooGDE6gASE8yaME7gmOFIgAREqIAhA==")); +var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiXGAAIllAAiXeEAPXAQQDCFBYmTEgYqDFBZNWAIZRME6IfBEAYuEE5J2UwIAaJ5QncFBB3DB4YGCACQnKTQgoXE5bIEE6qfKPAZRFA4MUABgmNPAonBCgQnPExgpFPIgoNEyBSF4wGBFBgmSABCjJTZwoXEzwoHE0AoFE0QnCFAQmhKAonjFAInCE0Qn/E/4n/E/4n/wInDFEAhBEwQoDFLYdCEwooEFTAjHAAwoYIYgAMPDglT")); +var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); + +function setColor(delta){ + c+=delta; + c = Math.max(c,0); + c = Math.min(c,2); + if (c<1){ + g.setColor(c,0,0); + Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); + }else{ + g.setColor(1,c-1,c-1); + Bangle.setLCDBrightness(1); + } + g.fillRect(0,0,g.getWidth(),g.getHeight()); +} + +function updownHandler(direction){ + if (direction == undefined){ + c=1; + setColor(0); + } else { + setColor(-direction * 0.1); + } +} + +setColor(0); + + g.drawImage(icoBeer,0,100); + g.drawImage(icoCocktail,40,100); + g.drawImage(icoShot,80,100); + +// Bangle 1: +// BTN1: light up toward white +// BTN3: light down to red +// BTN2: reset +// Bangle 2: +// Swipe up: light up toward white +// Swipe down: light down to red +// BTN1: reset +Bangle.setUI("updown", updownHandler); diff --git a/apps/drinkcounter/app.png b/apps/drinkcounter/app.png new file mode 100644 index 0000000000000000000000000000000000000000..b6aaecef9fae7df7f30af7adf4351e7ec61986dc GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*Fy#0|7oEuK)l4U$tr#i1;501VG{c z|3g>(X9)ezu{z_%djex0i+v90$D&= zpk5FYBpM3V0MrRo4zd8K6KDs}VvtE76<}eYp+G$l%R!caOaWR9v;gEfkcL$tgMhYy zOb0p$=ro|Co6j2@0-8C`)5S5w;`Gs}5BZu6I9e>{HGHqXb@a+aqjgnfCy()W@8l2W zUzIkyQSf?IlJ+N&E+V<`^VnEI#QIe+!y6gG&8%vatS0(2>Zr>mdKI;Vst0P*{_8~^|S literal 0 HcmV?d00001 diff --git a/apps/drinkcounter/drinkcounter-icon.js b/apps/drinkcounter/drinkcounter-icon.js new file mode 100644 index 000000000..8228b2616 --- /dev/null +++ b/apps/drinkcounter/drinkcounter-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("KCiI/tfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19eBgYGBgYGB19fX19fX19fX19fX19fX19fX19fX19fXgYGBgYHX14GBgYGBgYGBgYHX19fX19fX19fX19fX19fX19fX14GBgYHX19eBgYGB19fX19fX19fXgYGBgYGBgYGB19fX19fX19fX19eBgdfX19fX19eB19fX19fX19fX14GBgdfX19eBgYHX19fX19fX19fXgdfX19fX19fX19fX19fX19fX19eBgdfX19fX14GB19fX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fX14GB19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fXgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19eB19fX19fX19eB19fX19fX19fX14GB19fX19fX14GBgdfX19fX19eBgYHX19fX19eBgdfX19fX19fX19fX14GBgYGBgYGBxoGBgYGBgYGBxsaBgYGBgYGBgdfX19fX19fX19fX19fXgYGBgYHGxsbGxoGBgYHGxsbGxsaBgYGBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsbGgYGBgYHX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGxoGBgYGBgYHX19fX19fX19fXgYHGxsbV1cbGxsbV1cbGxsbV1dXGxsaBgYGBgYGBgdfX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX14GBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxtXV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxsaBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfXgYGBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYGBgYGBgYHX19fX19fX19eBgcbV1dXVxsbG1dXV1cbGxtXV1dXGxoGBgYGBgYGB19fX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxsaBgYGBgYGB19fX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19fX19fX19fX19fX19eBgcbG1dXVxsbGxtXVxsbGxtXV1cbGxoGB19fX19fX19fX19fX19fXgYHGxsbGxsbGxsbGxsbGxsbGxsbGxsaBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsaBgYHX19fX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGgYHX19fX19fX19fX19fX19fX19eBgYGBgYGBgYGBgYGBgYGBgYGBgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19c=")) diff --git a/apps/drinkcounter/metadata.json b/apps/drinkcounter/metadata.json new file mode 100644 index 000000000..5930c6b5a --- /dev/null +++ b/apps/drinkcounter/metadata.json @@ -0,0 +1,17 @@ +{ + "id": "drinkcounter", + "name": "Drink Counter", + "shortName": "Drink Counter", + "version": "0.10", + "description": "Counts drinks you had for science.", + "allow_emulator":true, + "icon": "app.png", + "type": "app", + "tags": "health", + "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"drinkcounter.app.js","url":"app.js"}, + {"name":"drinkcounter.img","url":"drinkcounter-icon.js","evaluate":true} + ] +} \ No newline at end of file From 22a722346c7232576f5010c3f822c2702bc219a6 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 13:13:40 +0200 Subject: [PATCH 02/19] tabs --- apps/drinkcounter/app.js | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index dcd1e8e76..64000ce2f 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -9,30 +9,29 @@ var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiX var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); function setColor(delta){ - c+=delta; - c = Math.max(c,0); - c = Math.min(c,2); - if (c<1){ - g.setColor(c,0,0); - Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); - }else{ - g.setColor(1,c-1,c-1); - Bangle.setLCDBrightness(1); - } - g.fillRect(0,0,g.getWidth(),g.getHeight()); + c+=delta; + c = Math.max(c,0); + c = Math.min(c,2); + if (c<1){ + g.setColor(c,0,0); + Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); + }else{ + g.setColor(1,c-1,c-1); + Bangle.setLCDBrightness(1); + } + g.fillRect(0,0,g.getWidth(),g.getHeight()); } function updownHandler(direction){ - if (direction == undefined){ - c=1; - setColor(0); - } else { - setColor(-direction * 0.1); - } +if (direction == undefined){ + c=1; + setColor(0); + } else { + setColor(-direction * 0.1); + } } setColor(0); - g.drawImage(icoBeer,0,100); g.drawImage(icoCocktail,40,100); g.drawImage(icoShot,80,100); From c3382032c20b92d453482ab2a6865b2d30e73c12 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 13:17:51 +0200 Subject: [PATCH 03/19] png --- apps/drinkcounter/app.png | Bin 419 -> 302 bytes apps/drinkcounter/drinkcounter-icon.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/drinkcounter/app.png b/apps/drinkcounter/app.png index b6aaecef9fae7df7f30af7adf4351e7ec61986dc..daf04c14ac34e42a503fde302e03349c906efd2a 100644 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s>?NMQuI$g)*}3`61^gat2MTc( zctjR6FvuMQVaCImA;CaFmUKs7M+SzC{oH>NS%G|>0G|-o|NsB5TD9u`Dh41uWzVIP zK=GxXE{-7;x86>@%h#a5(fYIUe|g?gMN1pE;?>>fT#c;fOS5=>c`YD*_w&qJw~)g} z**$MRJ*}AclCj`KF2mkAsxw$J7$=-N_?A^rYvF3E!<)9f*AhFi#C?@_SD=p6vhrD0 zy^<_P?rvmW^=O`!#za{Sxv$-4J=hko9MEUp#o(d-*YQDQr19E=8-708WXH_**(X9)ezu{z_%djex0i+v90$D&= zpk5FYBpM3V0MrRo4zd8K6KDs}VvtE76<}eYp+G$l%R!caOaWR9v;gEfkcL$tgMhYy zOb0p$=ro|Co6j2@0-8C`)5S5w;`Gs}5BZu6I9e>{HGHqXb@a+aqjgnfCy()W@8l2W zUzIkyQSf?IlJ+N&E+V<`^VnEI#QIe+!y6gG&8%vatS0(2>Zr>mdKI;Vst0P*{_8~^|S diff --git a/apps/drinkcounter/drinkcounter-icon.js b/apps/drinkcounter/drinkcounter-icon.js index 8228b2616..27bce0f0e 100644 --- a/apps/drinkcounter/drinkcounter-icon.js +++ b/apps/drinkcounter/drinkcounter-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("KCiI/tfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19eBgYGBgYGB19fX19fX19fX19fX19fX19fX19fX19fXgYGBgYHX14GBgYGBgYGBgYHX19fX19fX19fX19fX19fX19fX14GBgYHX19eBgYGB19fX19fX19fXgYGBgYGBgYGB19fX19fX19fX19eBgdfX19fX19eB19fX19fX19fX14GBgdfX19eBgYHX19fX19fX19fXgdfX19fX19fX19fX19fX19fX19eBgdfX19fX14GB19fX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19fX19fX19fX19fX19fX19fX19fX14GB19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXgdfX19fX19fXgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19eB19fX19fX19fX19fX19fX19fX19fX19fX19fX14HX19fX19fX19fXgdfX19fX19fX14HX19fX19fX19eB19fX19fX19eB19fX19fX19fX14GB19fX19fX14GBgdfX19fX19eBgYHX19fX19eBgdfX19fX19fX19fX14GBgYGBgYGBxoGBgYGBgYGBxsaBgYGBgYGBgdfX19fX19fX19fX19fXgYGBgYHGxsbGxoGBgYHGxsbGxsaBgYGBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsbGgYGBgYHX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGxoGBgYGBgYHX19fX19fX19fXgYHGxsbV1cbGxsbV1cbGxsbV1dXGxsaBgYGBgYGBgdfX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX14GBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxoGBgdfX14GBgYHX19fX19fX14GBxtXV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGxoGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxsaBgdfX14GBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19eBgYGB19fX19fX19eBgcbG1dXVxsbG1dXV1cbGxtXV1dXGgYGB19fXgYGBgdfX19fX19fXgYHGxtXV1cbGxtXV1dXGxsbV1dXVxoGBgdfXgYGBgYHX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1caBgYGBgYGBgYHX19fX19fX19eBgcbV1dXVxsbG1dXV1cbGxtXV1dXGxoGBgYGBgYGB19fX19fX19fXgYHG1dXV1cbGxtXV1dXGxsbV1dXVxsaBgYGBgYGB19fX19fX19fX14GBxsbV1dXGxsbV1dXVxsbG1dXV1cbGgYHX19fX19fX19fX19fX19eBgcbG1dXVxsbGxtXVxsbGxtXV1cbGxoGB19fX19fX19fX19fX19fXgYHGxsbGxsbGxsbGxsbGxsbGxsbGxsaBgdfX19fX19fX19fX19fX14GBxsbGxsbGxsbGxsbGxsbGxsbGxsaBgYHX19fX19fX19fX19fX19eBgcbGxsbGxsbGxsbGxsbGxsbGxsbGgYHX19fX19fX19fX19fX19fX19eBgYGBgYGBgYGBgYGBgYGBgYGBgdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19c=")) +require("heatshrink").decompress(atob("mEwxH+64A/AH4A/AH4ABwIAFE0gtIGDwfGExg4bChAcKFIwwUIbYvnDjQucMCQvdDyIvvX94SKBKQvTCY4IBBKDuRDwwAE4wIIBJClWEgoACBBAxFaq4jGABwyYF7YxTF4nV6ojDAo4GDYjAvDEQoFCAxIpDGCgvaGAgvlFAov/F+y4MF+rvvF/4v/d9gvXFwYvpAAouPF4a4MX5Av0FyCPWF4QqRF5wGCAooGDF7gASF9y6UF7guWGIgARFrIA/AH4A/AEo")) From 927608be5474aaa8ae07f959edf0275beefc99e7 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 16:40:53 +0200 Subject: [PATCH 04/19] Adding time and beer. --- apps/drinkcounter/app.js | 157 +++++++++++++++++++++++++++++++-------- 1 file changed, 124 insertions(+), 33 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 64000ce2f..0f09d59c8 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -1,47 +1,138 @@ -Bangle.setLCDPower(1); -Bangle.setLCDTimeout(0); -g.reset(); + c = 1; +setting = require("Storage").readJSON("setting.json",1); +E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ +var _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; +var ampm = "AM"; +let drag; var icoBeer = require("heatshrink").decompress(atob("lEoxH+AG2BAAoecEpAoWC4fXAAIGGAAowTDxAmJE4YGGE5QeJE5QHHE7owJE0pQKE7pQJE86fnE5QJSE5YUHBAIJQYxIpFAAvGBBAJIExYoGDgIACBBApFExonCDYoAOFSAnbFJYnE6vVDYYFHAwakQE4YaFAoQGJEIYoME7QoEE7ogFE/4neTBgntY84n/E+7HUE64mDE8IAFEw4nDTBifIE9gmId7gALE5IGCAooGDE6gASE8yaME7gmOFIgAREqIAhA==")); var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiXGAAIllAAiXeEAPXAQQDCFBYmTEgYqDFBZNWAIZRME6IfBEAYuEE5J2UwIAaJ5QncFBB3DB4YGCACQnKTQgoXE5bIEE6qfKPAZRFA4MUABgmNPAonBCgQnPExgpFPIgoNEyBSF4wGBFBgmSABCjJTZwoXEzwoHE0AoFE0QnCFAQmhKAonjFAInCE0Qn/E/4n/E/4n/wInDFEAhBEwQoDFLYdCEwooEFTAjHAAwoYIYgAMPDglT")); var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); +var drawTimeout; +var activeDrink = 0; +var drinks = [0,0,0]; -function setColor(delta){ - c+=delta; - c = Math.max(c,0); - c = Math.min(c,2); - if (c<1){ - g.setColor(c,0,0); - Bangle.setLCDBrightness(c >= 0.1 ? c : 0.1); - }else{ - g.setColor(1,c-1,c-1); - Bangle.setLCDBrightness(1); - } - g.fillRect(0,0,g.getWidth(),g.getHeight()); -} - -function updownHandler(direction){ -if (direction == undefined){ - c=1; - setColor(0); +function updateTime(){ + var d = new Date(); + var da = d.toString().split(" "); + var time = da[4].split(":"); + var hours = time[0]; + var minutes = time[1]; + if (_12hour){ + //do 12 hour stuff + if (hours > 12) { + ampm = "PM"; + hours = hours - 12; + if (hours < 10) hours = doublenum(hours); + } else { + ampm = "AM"; + } } else { - setColor(-direction * 0.1); - } + ampm = "" + } + g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,0,176,20); //Clear + g.setFontAlign(0,0); // center font + g.setBgColor(g.theme.bg).setColor(g.theme.fg); + g.setFont("Vector",14); + g.drawString("Time: " + hours + ":" + minutes + " " + ampm,100,10); + queueDrawTime(); } -setColor(0); +function queueDrawTime() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + updateTime(); + }, 20000 - (Date.now() % 20000)); +} + +function updateDrinks(){ + g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,145,176,176); //Clear + g.setFont("Vector",20).setColor(g.theme.fg); + g.drawString(drinks[activeDrink], (40 * (activeDrink + 1)) -20, 165); + console.log(drinks[activeDrink] + " drinks of drink #" + activeDrink); + +} + +function addDrink(){ + drinks[activeDrink] = drinks[activeDrink] + 1; + updateDrinks(); +} + +function removeDrink(){ + if (drinks[activeDrink] > 0) drinks[activeDrink] = drinks[activeDrink] - 1; + updateDrinks(); +} + + + +function initDragEvents() { + Bangle.on("drag", e => { + + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + if (Math.abs(dx)>Math.abs(dy)+10) { + // horizontal + if (dx < dy) { + console.log("left " + dx + " " + dy); + } else { + console.log("right " + dx + " " + dy); + } + } else if (Math.abs(dy)>Math.abs(dx)+10) { + // vertical + if (dx < dy) { + console.log("down " + dx + " " + dy); + removeDrink(); + } else { + console.log("up " + dx + " " + dy); + addDrink(); + } + + } + } +}); +} + + + +// Todo +// Add first drink time + + + + +g.reset(); +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + + + +g.setBgColor(g.theme.bg); g.drawImage(icoBeer,0,100); g.drawImage(icoCocktail,40,100); g.drawImage(icoShot,80,100); + + -// Bangle 1: -// BTN1: light up toward white -// BTN3: light down to red -// BTN2: reset -// Bangle 2: -// Swipe up: light up toward white -// Swipe down: light down to red -// BTN1: reset -Bangle.setUI("updown", updownHandler); + + + + +//Bangle.setUI("updown", updownHandler); + + + +if (drawTimeout) clearTimeout(drawTimeout); +drawTimeout = undefined; +updateTime(); +queueDrawTime(); +initDragEvents(); +updateDrinks(); + + From 4338cdda73a429ff8791f975bdc648c560ad490c Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 18:23:28 +0200 Subject: [PATCH 05/19] clearRect --- apps/drinkcounter/app.js | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 0f09d59c8..7494c17ca 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -1,6 +1,4 @@ -c = 1; - setting = require("Storage").readJSON("setting.json",1); E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ var _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; @@ -32,11 +30,10 @@ function updateTime(){ } else { ampm = "" } - g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,0,176,20); //Clear + g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font g.setBgColor(g.theme.bg).setColor(g.theme.fg); - g.setFont("Vector",14); - g.drawString("Time: " + hours + ":" + minutes + " " + ampm,100,10); + g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,100,34); queueDrawTime(); } @@ -49,9 +46,8 @@ function queueDrawTime() { } function updateDrinks(){ - g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,145,176,176); //Clear - g.setFont("Vector",20).setColor(g.theme.fg); - g.drawString(drinks[activeDrink], (40 * (activeDrink + 1)) -20, 165); + g.setBgColor(g.theme.bg).clearRect(0,145,176,176); //Clear + g.setFont("Vector",20).setColor(g.theme.fg).drawString(drinks[activeDrink], (40 * (activeDrink + 1)) - 20, 155); console.log(drinks[activeDrink] + " drinks of drink #" + activeDrink); } @@ -70,7 +66,6 @@ function removeDrink(){ function initDragEvents() { Bangle.on("drag", e => { - if (!drag) { // start dragging drag = {x: e.x, y: e.y}; } else if (!e.b) { // released @@ -92,7 +87,6 @@ function initDragEvents() { console.log("up " + dx + " " + dy); addDrink(); } - } } }); @@ -114,25 +108,19 @@ Bangle.drawWidgets(); g.setBgColor(g.theme.bg); - g.drawImage(icoBeer,0,100); - g.drawImage(icoCocktail,40,100); - g.drawImage(icoShot,80,100); +g.drawImage(icoBeer,0,100); +g.drawImage(icoCocktail,40,100); +g.drawImage(icoShot,80,100); - - - -//Bangle.setUI("updown", updownHandler); - - if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; updateTime(); queueDrawTime(); initDragEvents(); -updateDrinks(); +//updateDrinks(); From 55675446fa62f428879598a51667b917934cfbd4 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 18:45:16 +0200 Subject: [PATCH 06/19] Drinks selectable --- apps/drinkcounter/app.js | 41 ++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 7494c17ca..03303d7a5 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -1,3 +1,6 @@ +g.reset().clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); setting = require("Storage").readJSON("setting.json",1); E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ @@ -11,6 +14,7 @@ var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+ var drawTimeout; var activeDrink = 0; var drinks = [0,0,0]; +const maxDrinks = 2; // 3 drinks function updateTime(){ var d = new Date(); @@ -30,7 +34,7 @@ function updateTime(){ } else { ampm = "" } - g.setBgColor(g.theme.bg).setColor(g.theme.bg).fillRect(0,24,176,44); //Clear + g.setBgColor(g.theme.bg).clearRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font g.setBgColor(g.theme.bg).setColor(g.theme.fg); g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,100,34); @@ -46,10 +50,18 @@ function queueDrawTime() { } function updateDrinks(){ + g.setBgColor(g.theme.bg).clearRect(0,145,176,176); //Clear - g.setFont("Vector",20).setColor(g.theme.fg).drawString(drinks[activeDrink], (40 * (activeDrink + 1)) - 20, 155); - console.log(drinks[activeDrink] + " drinks of drink #" + activeDrink); - + for (let i = 0; i <= maxDrinks; i++) { + if (i == activeDrink) { + g.setColor(g.theme.fg).fillRect((40 * (i + 1)) - 40 ,145,(40 * (i + 1)) - 40 + 40,176); + g.setColor(g.theme.bg); + } else { + g.setColor(g.theme.fg); + } + g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); + console.log(drinks[activeDrink] + " drinks of drink #" + i + " - Active: " + activeDrink); + } } function addDrink(){ @@ -62,6 +74,15 @@ function removeDrink(){ updateDrinks(); } +function previousDrink(){ + if (activeDrink > 0) activeDrink = activeDrink - 1; + updateDrinks(); +} + +function nextDrink(){ + if (activeDrink < maxDrinks) activeDrink = activeDrink + 1; + updateDrinks(); +} function initDragEvents() { @@ -75,8 +96,10 @@ function initDragEvents() { // horizontal if (dx < dy) { console.log("left " + dx + " " + dy); + previousDrink(); } else { console.log("right " + dx + " " + dy); + nextDrink(); } } else if (Math.abs(dy)>Math.abs(dx)+10) { // vertical @@ -100,12 +123,6 @@ function initDragEvents() { -g.reset(); -g.clear(); -Bangle.loadWidgets(); -Bangle.drawWidgets(); - - g.setBgColor(g.theme.bg); g.drawImage(icoBeer,0,100); @@ -121,6 +138,6 @@ drawTimeout = undefined; updateTime(); queueDrawTime(); initDragEvents(); -//updateDrinks(); - +updateDrinks(); + From 4e1f52ea26e4cc1533ec34998daf6e0e60b4fc24 Mon Sep 17 00:00:00 2001 From: Hank Date: Thu, 7 Jul 2022 19:31:30 +0200 Subject: [PATCH 07/19] added ebac --- apps/drinkcounter/app.js | 82 +++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 14 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 03303d7a5..b1061b381 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -15,6 +15,61 @@ var drawTimeout; var activeDrink = 0; var drinks = [0,0,0]; const maxDrinks = 2; // 3 drinks +var firstDrinkTime = null; + + + +//static float get_ebac() +//{ +// float sum_drinks = getSumDrinks(drinks); +// +// int day1 = current_time.tm_yday; +// int hour1 = current_time.tm_hour; +// int min1 = current_time.tm_min; +// long int combine1 = min1+hour1*60+day1*24*60; +// +// int day2 = settings.first_drink_time.tm_yday; +// int hour2 = settings.first_drink_time.tm_hour; +// int min2 = settings.first_drink_time.tm_min; +// long int combine2 = min2+hour2*60+day2*24*60; +// +// unsigned int time_diff = abs(combine1 - combine2); +// +// if(settings.beer_size==1) +// sum_drinks+=*(drinks[0].num_drinks)/0.33*0.25-*(drinks[0].num_drinks); +// if(settings.beer_size==2) +// sum_drinks+=*(drinks[0].num_drinks)/0.33*0.5-*(drinks[0].num_drinks); +// if(settings.beer_size==3) +// sum_drinks+=*(drinks[0].num_drinks)*3.0-*(drinks[0].num_drinks); +// +// float bw = settings.sex==0 ? 0.58f:0.49f; +// float scale_factor = settings.unit==0? 1.0f:0.453592f; // 0 = kg, 1 = pounds +// float multiplication = settings.output==0? 10.f:1.f; //0 = %o, 1 = % +// return( ((0.806f * sum_drinks * 1.2f)/(bw*(float)settings.weight*scale_factor) - (0.017f * (time_diff/60.f)))*multiplication); +//} + +function drawEbac(){ + if (firstDrinkTime) { + var sum_drinks = drinks[0] + drinks[1] + drinks[2]; + + // TODO: Settings + var bw = 0.58; //bw = settings.sex==0 ? 0.58f:0.49f; + var weight = 80 * 0.453592; //* scale factor: 1.0f:0.453592f; // 0 = kg, 1 = pounds + var multiplication = 10; //10.f:1.f; //0 = %o, 1 = % + + var currentTime = new Date(); + var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); + + console.log("timediff: " + time_diff); + + ebac = Math.round(((0.806 * sum_drinks * 1.2)/(bw*weight) - (0.017 * (time_diff/60)))*multiplication * 100) / 100 + console.log("BAC: " + ebac); + g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear + g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); + } +} + + function updateTime(){ var d = new Date(); @@ -37,7 +92,7 @@ function updateTime(){ g.setBgColor(g.theme.bg).clearRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font g.setBgColor(g.theme.bg).setColor(g.theme.fg); - g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,100,34); + g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,90,34); queueDrawTime(); } @@ -50,21 +105,30 @@ function queueDrawTime() { } function updateDrinks(){ - g.setBgColor(g.theme.bg).clearRect(0,145,176,176); //Clear for (let i = 0; i <= maxDrinks; i++) { if (i == activeDrink) { - g.setColor(g.theme.fg).fillRect((40 * (i + 1)) - 40 ,145,(40 * (i + 1)) - 40 + 40,176); + g.setColor(g.theme.fg).fillRect((40 * (i + 1)) - 40 ,145,(40 * (i + 1)),176); g.setColor(g.theme.bg); } else { g.setColor(g.theme.fg); } g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); - console.log(drinks[activeDrink] + " drinks of drink #" + i + " - Active: " + activeDrink); + console.log(drinks[i] + " drinks of drink #" + i + " - Active: " + activeDrink); } + drawEbac(); } function addDrink(){ + if (!firstDrinkTime){ + firstDrinkTime = new Date(); + var dafirstDrinkTime = firstDrinkTime.toString().split(" "); + var firstDrinkTimeTime = dafirstDrinkTime[4].split(":"); + var firstDrinkTimeHours = firstDrinkTimeTime[0]; + var firstDrinkTimeMinutes = firstDrinkTimeTime[1]; + console.log("FIRST drink @ " + firstDrinkTime + " = " + firstDrinkTime.toString()); + g.setFontAlign(0,0).setFont("Vector",15).drawString("1st drink @ " + firstDrinkTimeHours + ":" + firstDrinkTimeMinutes, 90, 34 + 20 ); + } drinks[activeDrink] = drinks[activeDrink] + 1; updateDrinks(); } @@ -116,20 +180,10 @@ function initDragEvents() { } - -// Todo -// Add first drink time - - - - - g.setBgColor(g.theme.bg); g.drawImage(icoBeer,0,100); g.drawImage(icoCocktail,40,100); g.drawImage(icoShot,80,100); - - From eb68aa4a4c3f80416f73be9123e83bcd0d92bf53 Mon Sep 17 00:00:00 2001 From: Hank Date: Fri, 8 Jul 2022 07:41:11 +0200 Subject: [PATCH 08/19] New BAC calculation --- apps/drinkcounter/README.md | 1 + apps/drinkcounter/app.js | 49 +++++++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md index 298c82743..9787c1b92 100644 --- a/apps/drinkcounter/README.md +++ b/apps/drinkcounter/README.md @@ -4,6 +4,7 @@ Counts drinks you had for science. Calculates BAC. ## Usage +Swipe left/right to select drink. Swipe up/down to add/remove drinks. diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index b1061b381..317fc906e 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -48,21 +48,54 @@ var firstDrinkTime = null; // return( ((0.806f * sum_drinks * 1.2f)/(bw*(float)settings.weight*scale_factor) - (0.017f * (time_diff/60.f)))*multiplication); //} -function drawEbac(){ +//function drawEbac(){ +// if (firstDrinkTime) { +// var sum_drinks = drinks[0] + drinks[1] + drinks[2]; +// +// // TODO: Settings +// var bw = 0.58; //bw = settings.sex==0 ? 0.58f:0.49f; +// var weight = 80 * 0.453592; //* scale factor: 1.0f:0.453592f; // 0 = kg, 1 = pounds +// var multiplication = 10; //10.f:1.f; //0 = %o, 1 = % +// +// var currentTime = new Date(); +// var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); +// +// console.log("timediff: " + time_diff); +// +// ebac = Math.round(((0.806 * sum_drinks * 1.2)/(bw*weight) - (0.017 * (time_diff/60)))*multiplication * 100) / 100 +// console.log("BAC: " + ebac); +// g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear +// g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); +// } +//} + + +// Beer: 0.3L 12g - 0.5L 20g +// Radler: 0.3L 6g - 0.5L 10g +// Wine: 0.2L 16g +// Jäger Shot: 0.02L 5.6g +// sex: Women 60 - Men 70 (Percent) + + +// Formula: Alcohol in g /(Body weight in kg x sex) – (0,15 x Hours) = bac per mille +// Example: 5 Beer (0.3L=12g), 80KG, Male (70%), 5 hours +// (5 * 12) / (80 / 100 * 70) - (0.15 * 5) + +function drawBac(){ if (firstDrinkTime) { var sum_drinks = drinks[0] + drinks[1] + drinks[2]; // TODO: Settings - var bw = 0.58; //bw = settings.sex==0 ? 0.58f:0.49f; - var weight = 80 * 0.453592; //* scale factor: 1.0f:0.453592f; // 0 = kg, 1 = pounds - var multiplication = 10; //10.f:1.f; //0 = %o, 1 = % + var sex = 70; // TODO + var weight = 80; // kg, TODO: pounds + var alcoholInG = 12; // TODO var currentTime = new Date(); var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); console.log("timediff: " + time_diff); - - ebac = Math.round(((0.806 * sum_drinks * 1.2)/(bw*weight) - (0.017 * (time_diff/60)))*multiplication * 100) / 100 + ebac = Math.round( ((sum_drinks * alcoholInG) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100 + console.log("BAC: " + ebac); g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); @@ -87,7 +120,7 @@ function updateTime(){ ampm = "AM"; } } else { - ampm = "" + ampm = ""; } g.setBgColor(g.theme.bg).clearRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font @@ -116,7 +149,7 @@ function updateDrinks(){ g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); console.log(drinks[i] + " drinks of drink #" + i + " - Active: " + activeDrink); } - drawEbac(); + drawBac(); } function addDrink(){ From 51d1fab4e4709270ffe97a0f4a6fea3148ff1396 Mon Sep 17 00:00:00 2001 From: Hank Date: Fri, 8 Jul 2022 18:41:58 +0200 Subject: [PATCH 09/19] Readme --- apps/drinkcounter/ChangeLog | 2 +- apps/drinkcounter/README.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/drinkcounter/ChangeLog b/apps/drinkcounter/ChangeLog index bb80ab4d7..596ed8040 100644 --- a/apps/drinkcounter/ChangeLog +++ b/apps/drinkcounter/ChangeLog @@ -1 +1 @@ -0.10: Initial release \ No newline at end of file +0.10: Initial release - still work in progress \ No newline at end of file diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md index 9787c1b92..708f350e9 100644 --- a/apps/drinkcounter/README.md +++ b/apps/drinkcounter/README.md @@ -1,5 +1,6 @@ # Drink Counter +Development still in progress. Still missing config page etv. This is only a demo for now! Counts drinks you had for science. Calculates BAC. ## Usage From b0be12c03b330773ce6593469c4e9540f69fcf56 Mon Sep 17 00:00:00 2001 From: Hank Date: Fri, 8 Jul 2022 18:48:35 +0200 Subject: [PATCH 10/19] Readme --- apps/drinkcounter/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md index 708f350e9..ea0c6f3c9 100644 --- a/apps/drinkcounter/README.md +++ b/apps/drinkcounter/README.md @@ -1,6 +1,6 @@ # Drink Counter -Development still in progress. Still missing config page etv. This is only a demo for now! +Development still in progress. Still need to make config page etc. This is only a demo for now that calculates a 0.33L Beer for a 80kg male for the BAC! Counts drinks you had for science. Calculates BAC. ## Usage From efdff0f4a41b5e73827c08cf8d56725da631b51c Mon Sep 17 00:00:00 2001 From: Hank Date: Sat, 9 Jul 2022 17:20:14 +0200 Subject: [PATCH 11/19] 0.15 - first working version --- apps/drinkcounter/ChangeLog | 3 +- apps/drinkcounter/README.md | 4 +- apps/drinkcounter/app.js | 133 ++++++++++--------------- apps/drinkcounter/app.png | Bin 302 -> 0 bytes apps/drinkcounter/drinkcounter-icon.js | 2 +- apps/drinkcounter/drinkcounter.png | Bin 0 -> 811 bytes apps/drinkcounter/metadata.json | 13 ++- apps/drinkcounter/settings.js | 58 +++++++++++ 8 files changed, 124 insertions(+), 89 deletions(-) delete mode 100644 apps/drinkcounter/app.png create mode 100644 apps/drinkcounter/drinkcounter.png create mode 100644 apps/drinkcounter/settings.js diff --git a/apps/drinkcounter/ChangeLog b/apps/drinkcounter/ChangeLog index 596ed8040..51cade4c5 100644 --- a/apps/drinkcounter/ChangeLog +++ b/apps/drinkcounter/ChangeLog @@ -1 +1,2 @@ -0.10: Initial release - still work in progress \ No newline at end of file +0.10: Initial release - still work in progress +0.15: Added settings and calculations \ No newline at end of file diff --git a/apps/drinkcounter/README.md b/apps/drinkcounter/README.md index ea0c6f3c9..f1700531b 100644 --- a/apps/drinkcounter/README.md +++ b/apps/drinkcounter/README.md @@ -1,14 +1,12 @@ # Drink Counter -Development still in progress. Still need to make config page etc. This is only a demo for now that calculates a 0.33L Beer for a 80kg male for the BAC! -Counts drinks you had for science. Calculates BAC. +Development still in progress. Counts drinks you had for science. Calculates BAC. ## Usage Swipe left/right to select drink. Swipe up/down to add/remove drinks. - ## Creator Hank - contact at http://forum.espruino.com diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 317fc906e..534d78ccc 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -1,7 +1,9 @@ g.reset().clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); +require("Font8x16").add(Graphics); +const SETTINGSFILE = "drinkcounter.json"; setting = require("Storage").readJSON("setting.json",1); E.setTimeZone(setting.timezone); // timezone = 1 for MEZ, = 2 for MESZ var _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; @@ -17,97 +19,69 @@ var drinks = [0,0,0]; const maxDrinks = 2; // 3 drinks var firstDrinkTime = null; +var confBeerSize; +var confSex; +var confWeight; +var confWeightUnit; - -//static float get_ebac() -//{ -// float sum_drinks = getSumDrinks(drinks); -// -// int day1 = current_time.tm_yday; -// int hour1 = current_time.tm_hour; -// int min1 = current_time.tm_min; -// long int combine1 = min1+hour1*60+day1*24*60; -// -// int day2 = settings.first_drink_time.tm_yday; -// int hour2 = settings.first_drink_time.tm_hour; -// int min2 = settings.first_drink_time.tm_min; -// long int combine2 = min2+hour2*60+day2*24*60; -// -// unsigned int time_diff = abs(combine1 - combine2); -// -// if(settings.beer_size==1) -// sum_drinks+=*(drinks[0].num_drinks)/0.33*0.25-*(drinks[0].num_drinks); -// if(settings.beer_size==2) -// sum_drinks+=*(drinks[0].num_drinks)/0.33*0.5-*(drinks[0].num_drinks); -// if(settings.beer_size==3) -// sum_drinks+=*(drinks[0].num_drinks)*3.0-*(drinks[0].num_drinks); -// -// float bw = settings.sex==0 ? 0.58f:0.49f; -// float scale_factor = settings.unit==0? 1.0f:0.453592f; // 0 = kg, 1 = pounds -// float multiplication = settings.output==0? 10.f:1.f; //0 = %o, 1 = % -// return( ((0.806f * sum_drinks * 1.2f)/(bw*(float)settings.weight*scale_factor) - (0.017f * (time_diff/60.f)))*multiplication); -//} - -//function drawEbac(){ -// if (firstDrinkTime) { -// var sum_drinks = drinks[0] + drinks[1] + drinks[2]; -// -// // TODO: Settings -// var bw = 0.58; //bw = settings.sex==0 ? 0.58f:0.49f; -// var weight = 80 * 0.453592; //* scale factor: 1.0f:0.453592f; // 0 = kg, 1 = pounds -// var multiplication = 10; //10.f:1.f; //0 = %o, 1 = % -// -// var currentTime = new Date(); -// var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); -// -// console.log("timediff: " + time_diff); -// -// ebac = Math.round(((0.806 * sum_drinks * 1.2)/(bw*weight) - (0.017 * (time_diff/60)))*multiplication * 100) / 100 -// console.log("BAC: " + ebac); -// g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear -// g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); -// } -//} - - +var drinksAlcohol = [12,16,5.6]; // in gramm // Beer: 0.3L 12g - 0.5L 20g // Radler: 0.3L 6g - 0.5L 10g // Wine: 0.2L 16g // Jäger Shot: 0.02L 5.6g + // sex: Women 60 - Men 70 (Percent) - - // Formula: Alcohol in g /(Body weight in kg x sex) – (0,15 x Hours) = bac per mille // Example: 5 Beer (0.3L=12g), 80KG, Male (70%), 5 hours // (5 * 12) / (80 / 100 * 70) - (0.15 * 5) function drawBac(){ if (firstDrinkTime) { - var sum_drinks = drinks[0] + drinks[1] + drinks[2]; + var sum_drinks = (drinks[0] * drinksAlcohol[0]) + (drinks[1] * drinksAlcohol[1]) + (drinks[2] * drinksAlcohol[2]); - // TODO: Settings - var sex = 70; // TODO - var weight = 80; // kg, TODO: pounds - var alcoholInG = 12; // TODO + if (confSex == "male") { + sex = 70; + } else { + sex = 60; + } + var weight = confWeight; + + if (confWeightUnit == "US Pounds") { + weight = weight * 0.45359237; + } var currentTime = new Date(); - var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); + var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); // in hours! - console.log("timediff: " + time_diff); - ebac = Math.round( ((sum_drinks * alcoholInG) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100 + //console.log("timediff: " + time_diff); + ebac = Math.round( ((sum_drinks) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100 - console.log("BAC: " + ebac); + //console.log("BAC: " + ebac + " weight: " + confWeight + " weightInKilo: " + weight + " Unit: " + confWeightUnit); g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear - g.setFontAlign(0,0).setFont("Vector",15).setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); + g.setFontAlign(0,0).setFont("8x16").setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); } } +// Load settings +function loadMySettings() { + // Helper function default setting + function def (value, def) {return value !== undefined ? value : def;} + + var settings = require('Storage').readJSON(SETTINGSFILE, true) || {}; + confBeerSize = def(settings.beerSize, "0.3L"); + confSex = def(settings.sex, "male"); + confWeight = def(settings.weight, 80); + confWeightUnit = def(settings.weightUnit, "Kilo"); + //console.log("Read config - weight: " + confWeight); +} + function updateTime(){ - var d = new Date(); - var da = d.toString().split(" "); - var time = da[4].split(":"); + var d = require("locale").time(new Date(), 1); + + //console.log(d); + var time = d.split(":"); var hours = time[0]; var minutes = time[1]; if (_12hour){ @@ -125,7 +99,7 @@ function updateTime(){ g.setBgColor(g.theme.bg).clearRect(0,24,176,44); //Clear g.setFontAlign(0,0); // center font g.setBgColor(g.theme.bg).setColor(g.theme.fg); - g.setFont("Vector",14).drawString("Time: " + hours + ":" + minutes + " " + ampm,90,34); + g.setFont("8x16").drawString("Time: " + hours + ":" + minutes + " " + ampm,90,34); queueDrawTime(); } @@ -147,7 +121,7 @@ function updateDrinks(){ g.setColor(g.theme.fg); } g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); - console.log(drinks[i] + " drinks of drink #" + i + " - Active: " + activeDrink); + //console.log(drinks[i] + " drinks of drink #" + i + " - Active: " + activeDrink); } drawBac(); } @@ -155,12 +129,11 @@ function updateDrinks(){ function addDrink(){ if (!firstDrinkTime){ firstDrinkTime = new Date(); - var dafirstDrinkTime = firstDrinkTime.toString().split(" "); - var firstDrinkTimeTime = dafirstDrinkTime[4].split(":"); - var firstDrinkTimeHours = firstDrinkTimeTime[0]; - var firstDrinkTimeMinutes = firstDrinkTimeTime[1]; - console.log("FIRST drink @ " + firstDrinkTime + " = " + firstDrinkTime.toString()); - g.setFontAlign(0,0).setFont("Vector",15).drawString("1st drink @ " + firstDrinkTimeHours + ":" + firstDrinkTimeMinutes, 90, 34 + 20 ); + var firstDrinkTimeTime = require("locale").time(new Date(), 1); + //console.log("FIRST drink @ " + firstDrinkTime + " = " + firstDrinkTime.toString()); + + g.setFont("8x16"); + g.setFontAlign(0,0).drawString("1st drink @ " + firstDrinkTimeTime, 90, 34 + 20 ); } drinks[activeDrink] = drinks[activeDrink] + 1; updateDrinks(); @@ -192,19 +165,19 @@ function initDragEvents() { if (Math.abs(dx)>Math.abs(dy)+10) { // horizontal if (dx < dy) { - console.log("left " + dx + " " + dy); + //console.log("left " + dx + " " + dy); previousDrink(); } else { - console.log("right " + dx + " " + dy); + //console.log("right " + dx + " " + dy); nextDrink(); } } else if (Math.abs(dy)>Math.abs(dx)+10) { // vertical if (dx < dy) { - console.log("down " + dx + " " + dy); + //console.log("down " + dx + " " + dy); removeDrink(); } else { - console.log("up " + dx + " " + dy); + //console.log("up " + dx + " " + dy); addDrink(); } } @@ -212,7 +185,7 @@ function initDragEvents() { }); } - +loadMySettings(); g.setBgColor(g.theme.bg); g.drawImage(icoBeer,0,100); g.drawImage(icoCocktail,40,100); diff --git a/apps/drinkcounter/app.png b/apps/drinkcounter/app.png deleted file mode 100644 index daf04c14ac34e42a503fde302e03349c906efd2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s>?NMQuI$g)*}3`61^gat2MTc( zctjR6FvuMQVaCImA;CaFmUKs7M+SzC{oH>NS%G|>0G|-o|NsB5TD9u`Dh41uWzVIP zK=GxXE{-7;x86>@%h#a5(fYIUe|g?gMN1pE;?>>fT#c;fOS5=>c`YD*_w&qJw~)g} z**$MRJ*}AclCj`KF2mkAsxw$J7$=-N_?A^rYvF3E!<)9f*AhFi#C?@_SD=p6vhrD0 zy^<_P?rvmW^=O`!#za{Sxv$-4J=hko9MEUp#o(d-*YQDQr19E=8-708WXH_**?G!+_U0d2mwsQ?rH!8@~KYor1xdgxIak=AcUkkhp_+y?#g*x0|@|X4WrJ6PfZB% zFj~1DP-V1=?twn%z%TrHk^+E+Q6a2UYEDw-OqGjTbQF4kmwkqQhabwCFphzpk~U6L{mkUyyB1@xF3E-DI{ z+T;C-(@>1G9++`GG>rBoAgcsm4yPG|c!yLRfXYjmrb6jPo?%+wmIvoWa{z~#rF3B) zo4r8db4$?hMkXo1xC4N5RmOi?(5Uhn1MKk8Fgbw3FK}THI zF`M^Z%S!<=yz5QNQRsu#(p&sHc(qao;7|n6{6KRk^^yi4{gHA#0oeQ{bkH`yOXw{s zy-WzO;LEcE9{245u;|kF6-S6^e*F=z$d|vL=_<6crap$EOlp8kU4N~l?XCV9)u*bg pse3Wzn*ywqdN;5E=-WW7{sX5I?zh@CCI|ok002ovPDHLkV1l{0VWj{7 literal 0 HcmV?d00001 diff --git a/apps/drinkcounter/metadata.json b/apps/drinkcounter/metadata.json index 5930c6b5a..d648d893f 100644 --- a/apps/drinkcounter/metadata.json +++ b/apps/drinkcounter/metadata.json @@ -2,16 +2,21 @@ "id": "drinkcounter", "name": "Drink Counter", "shortName": "Drink Counter", - "version": "0.10", + "version": "0.15", "description": "Counts drinks you had for science.", "allow_emulator":true, - "icon": "app.png", + "icon": "drinkcounter.png", "type": "app", "tags": "health", - "supports": ["BANGLEJS","BANGLEJS2"], + "supports": ["BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"drinkcounter.app.js","url":"app.js"}, - {"name":"drinkcounter.img","url":"drinkcounter-icon.js","evaluate":true} + {"name":"drinkcounter.img","url":"drinkcounter-icon.js","evaluate":true}, + {"name":"drinkcounter.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"drinkcounter.settings.json"}, + {"name":"drinkcounter.json"} ] } \ No newline at end of file diff --git a/apps/drinkcounter/settings.js b/apps/drinkcounter/settings.js new file mode 100644 index 000000000..9d213f4d2 --- /dev/null +++ b/apps/drinkcounter/settings.js @@ -0,0 +1,58 @@ +(function(back) { + var FILE = "drinkcounter.json"; + var settings = Object.assign({ + secondsOnUnlock: false, + }, require('Storage').readJSON(FILE, true) || {}); + + function writeSettings() { + require('Storage').writeJSON(FILE, settings); + } + + // Helper method which uses int-based menu item for set of string values + function stringItems(startvalue, writer, values) { + return { + value: (startvalue === undefined ? 0 : values.indexOf(startvalue)), + format: v => values[v], + min: 0, + max: values.length - 1, + wrap: true, + step: 1, + onchange: v => { + writer(values[v]); + writeSettings(); + } + }; + } + + // Helper method which breaks string set settings down to local settings object + function stringInSettings(name, values) { + return stringItems(settings[name], v => settings[name] = v, values); + } + + var mainmenu = { + "": { + "title": "Drink counter" + }, + "< Back": () => back(), + + "Beer size": stringInSettings("beerSize", ["0.3L", "0.5L"]), + + + "Sex": stringInSettings("sex", ["male", "female"]), + + 'Weight': { + value: 0|settings.weight, + min: 40, max: 500, + onchange: v => { + settings.weight = v; + writeSettings(); + } + }, + "Weight unit": stringInSettings("weightUnit", ["Kilo", "US Pounds"]) + + + }; + + E.showMenu(mainmenu); + +}); From 9430b2faef319a79b23dec4d7765769a71e8adbc Mon Sep 17 00:00:00 2001 From: Hank Date: Sat, 9 Jul 2022 19:23:22 +0200 Subject: [PATCH 12/19] 0.20: Added status saving --- apps/drinkcounter/ChangeLog | 3 +- apps/drinkcounter/app.js | 94 +++++++++++++++++++++++++++------ apps/drinkcounter/metadata.json | 2 +- 3 files changed, 80 insertions(+), 19 deletions(-) diff --git a/apps/drinkcounter/ChangeLog b/apps/drinkcounter/ChangeLog index 51cade4c5..69faa7904 100644 --- a/apps/drinkcounter/ChangeLog +++ b/apps/drinkcounter/ChangeLog @@ -1,2 +1,3 @@ 0.10: Initial release - still work in progress -0.15: Added settings and calculations \ No newline at end of file +0.15: Added settings and calculations +0.20: Added status saving \ No newline at end of file diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 534d78ccc..ea49cdbef 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -10,20 +10,39 @@ var _12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||fal var ampm = "AM"; let drag; -var icoBeer = require("heatshrink").decompress(atob("lEoxH+AG2BAAoecEpAoWC4fXAAIGGAAowTDxAmJE4YGGE5QeJE5QHHE7owJE0pQKE7pQJE86fnE5QJSE5YUHBAIJQYxIpFAAvGBBAJIExYoGDgIACBBApFExonCDYoAOFSAnbFJYnE6vVDYYFHAwakQE4YaFAoQGJEIYoME7QoEE7ogFE/4neTBgntY84n/E+7HUE64mDE8IAFEw4nDTBifIE9gmId7gALE5IGCAooGDE6gASE8yaME7gmOFIgAREqIAhA==")); -var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiXGAAIllAAiXeEAPXAQQDCFBYmTEgYqDFBZNWAIZRME6IfBEAYuEE5J2UwIAaJ5QncFBB3DB4YGCACQnKTQgoXE5bIEE6qfKPAZRFA4MUABgmNPAonBCgQnPExgpFPIgoNEyBSF4wGBFBgmSABCjJTZwoXEzwoHE0AoFE0QnCFAQmhKAonjFAInCE0Qn/E/4n/E/4n/wInDFEAhBEwQoDFLYdCEwooEFTAjHAAwoYIYgAMPDglT")); -var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); +var icoBeer = require("heatshrink").decompress(atob("lEoxH+AG2BAAoecEpAoWC4fXAAIGGAAowTDxAmJE4YGGE5QeJE5QHHE7owJE0pQKE7pQJE86fnE5QJSE5YUHBAIJQYxIpFAAvGBBAJIExYoGDgIACBBApFExonCDYoAOFSAnbFJYnE6vVDYYFHAwakQE4YaFAoQGJEIYoME7QoEE7ogFE/4neTBgntY84n/E+7HUE64mDE8IAFEw4nDTBifIE9gmId7gALE5IGCAooGDE6gASE8yaME7gmOFIgAREqIAhA==")); +var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiXGAAIllAAiXeEAPXAQQDCFBYmTEgYqDFBZNWAIZRME6IfBEAYuEE5J2UwIAaJ5QncFBB3DB4YGCACQnKTQgoXE5bIEE6qfKPAZRFA4MUABgmNPAonBCgQnPExgpFPIgoNEyBSF4wGBFBgmSABCjJTZwoXEzwoHE0AoFE0QnCFAQmhKAonjFAInCE0Qn/E/4n/E/4n/wInDFEAhBEwQoDFLYdCEwooEFTAjHAAwoYIYgAMPDglT")); +var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); +var icoResetB = require("heatshrink").decompress(atob("j0exH+AH4AGq0rgErqwbWwIbBAAcrwI3TRxQfQG4oAHlYcSOYOBAAJ7CDx5WEJ4+BBgacKB4cr1gOI1g+DPZINDDhIeCHoY6LUxoRLOoSkOJoZ5HBRRaHGAZrFWAZYMlYACcAkrCwQdQaQj1HDqD+FWwwdRcQgUHSqP+DgYTGHgYdOPQQwHQoY8PGIJmMPJzCPDxIoPYQhcHBgJmPYQtWwIABFAg9UABA8PNgI+FAAcrUKZUBEAcrLwK8XqwaB1jZYAGAA==")) +var icoResetW = require("heatshrink").decompress(atob("j0exH+AH4AGwOs6+swIbWqwbBAAesqw3TDQgAFD6A3FAA+sDiRzBqwABPYQePCIhPHqwMDThQPD1krBxErFgZ7JBoYcJDwQ9DHRamNCJbMCUhxNDPI6ENPI6IGHQRYN1gACU4YABCwQdQaQj1HDqAREWw4dRcQgUHUBQAHDgYTGHgYdOPQQwHQoY8PGIJmMPJzCPDxIoPYQhcHBgJmPYQuBwNWAQJHNHpQAIHh5sBHwoAD1ihTKoIgD1hdBXi54ClbZYAGA=")) var drawTimeout; var activeDrink = 0; var drinks = [0,0,0]; const maxDrinks = 2; // 3 drinks var firstDrinkTime = null; +var firstDrinkTimeTime = null; var confBeerSize; var confSex; var confWeight; var confWeightUnit; + +var drinkStatus = require("Storage").open("drinkcounter.status.json", "r"); + +var test = drinkStatus.read(drinkStatus.getLength()); + +if(test!== undefined) { + drinkStatus = JSON.parse(test); + console.log("read status: " + test); +} else { + drinkStatus = { + drinks: [0,0,0] + }; + console.log("no status file - applying default"); +} + + var drinksAlcohol = [12,16,5.6]; // in gramm // Beer: 0.3L 12g - 0.5L 20g // Radler: 0.3L 6g - 0.5L 10g @@ -54,7 +73,7 @@ function drawBac(){ var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); // in hours! //console.log("timediff: " + time_diff); - ebac = Math.round( ((sum_drinks) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100 + ebac = Math.round( ((sum_drinks) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100; //console.log("BAC: " + ebac + " weight: " + confWeight + " weightInKilo: " + weight + " Unit: " + confWeightUnit); g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear @@ -111,6 +130,7 @@ function queueDrawTime() { }, 20000 - (Date.now() % 20000)); } + function updateDrinks(){ g.setBgColor(g.theme.bg).clearRect(0,145,176,176); //Clear for (let i = 0; i <= maxDrinks; i++) { @@ -121,21 +141,36 @@ function updateDrinks(){ g.setColor(g.theme.fg); } g.setFont("Vector",20).drawString(drinks[i], (40 * (i + 1)) - 20, 160); - //console.log(drinks[i] + " drinks of drink #" + i + " - Active: " + activeDrink); + g.setColor(g.theme.fg); + drinkStatus.drinks[i] = drinks[i]; } + + if (g.theme.dark) { + g.drawImage(icoResetW,145,145); + } else { + g.drawImage(icoResetB,145,145); + } + + settings_file = require("Storage").open("drinkcounter.status.json", "w"); + settings_file.write(JSON.stringify(drinkStatus)); + drawBac(); } +function updateFirstDrinkTime(){ + if (firstDrinkTime){ + g.setFont("8x16"); + g.setFontAlign(0,0).drawString("1st drink @ " + firstDrinkTimeTime, 90, 34 + 20 ); + } +} + function addDrink(){ if (!firstDrinkTime){ firstDrinkTime = new Date(); - var firstDrinkTimeTime = require("locale").time(new Date(), 1); - //console.log("FIRST drink @ " + firstDrinkTime + " = " + firstDrinkTime.toString()); - - g.setFont("8x16"); - g.setFontAlign(0,0).drawString("1st drink @ " + firstDrinkTimeTime, 90, 34 + 20 ); - } + firstDrinkTimeTime = require("locale").time(new Date(), 1); + } drinks[activeDrink] = drinks[activeDrink] + 1; + updateFirstDrinkTime(); updateDrinks(); } @@ -154,6 +189,12 @@ function nextDrink(){ updateDrinks(); } +function showDrinks() { + g.setBgColor(g.theme.bg); + g.drawImage(icoBeer,0,100); + g.drawImage(icoCocktail,40,100); + g.drawImage(icoShot,80,100); +} function initDragEvents() { Bangle.on("drag", e => { @@ -180,17 +221,37 @@ function initDragEvents() { //console.log("up " + dx + " " + dy); addDrink(); } - } + } else { + //console.log("tap " + e.x + " " + e.y); + if (e.x > 145 && e.y > 145) { + g.clearRect(0,34,176,176); //Clear + resetDrinks = E.showPrompt("Reset drinks?", { + title: "Confirm", + buttons: { Yes: true, No: false }, + }); + resetDrinks.then((confirm) => { + if (confirm) { + for (let i = 0; i <= maxDrinks; i++) { + drinks[i] = 0; + } + console.log("reset to default"); + } + console.log("reset " + confirm); + firstDrinkTime = null; + showDrinks(); + updateDrinks(); + updateTime(); + updateFirstDrinkTime(); + }); + } + } } }); } loadMySettings(); -g.setBgColor(g.theme.bg); -g.drawImage(icoBeer,0,100); -g.drawImage(icoCocktail,40,100); -g.drawImage(icoShot,80,100); +showDrinks(); if (drawTimeout) clearTimeout(drawTimeout); @@ -200,4 +261,3 @@ queueDrawTime(); initDragEvents(); updateDrinks(); - diff --git a/apps/drinkcounter/metadata.json b/apps/drinkcounter/metadata.json index d648d893f..665921fce 100644 --- a/apps/drinkcounter/metadata.json +++ b/apps/drinkcounter/metadata.json @@ -2,7 +2,7 @@ "id": "drinkcounter", "name": "Drink Counter", "shortName": "Drink Counter", - "version": "0.15", + "version": "0.20", "description": "Counts drinks you had for science.", "allow_emulator":true, "icon": "drinkcounter.png", From 3fe261821deea51fad2f7e940d0b9d0d53ce9fa6 Mon Sep 17 00:00:00 2001 From: Hank Date: Sat, 9 Jul 2022 19:55:54 +0200 Subject: [PATCH 13/19] Fixes --- apps/drinkcounter/app.js | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index ea49cdbef..95b9e5de7 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -28,19 +28,26 @@ var confWeight; var confWeightUnit; +// Load Status =============== var drinkStatus = require("Storage").open("drinkcounter.status.json", "r"); - var test = drinkStatus.read(drinkStatus.getLength()); - if(test!== undefined) { drinkStatus = JSON.parse(test); console.log("read status: " + test); -} else { + for (let i = 0; i <= maxDrinks; i++) { + drinks[i] = drinkStatus.drinks[i]; + } + firstDrinkTime = Date.parse(drinkStatus.firstDrinkTime); + console.log("read firstDrinkTime: " + firstDrinkTime); + if (firstDrinkTime) firstDrinkTimeTime = require("locale").time(new Date(firstDrinkTime), 1); + console.log("read firstDrinkTimeTime: " + firstDrinkTimeTime); +} else { drinkStatus = { drinks: [0,0,0] }; console.log("no status file - applying default"); } +// Load Status =============== var drinksAlcohol = [12,16,5.6]; // in gramm @@ -68,14 +75,17 @@ function drawBac(){ if (confWeightUnit == "US Pounds") { weight = weight * 0.45359237; } - + var currentTime = new Date(); var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); // in hours! - - //console.log("timediff: " + time_diff); + console.log("currentTime: " + currentTime) + console.log("firstDrinkTime: " + firstDrinkTime) + + console.log("timediff: " + time_diff); ebac = Math.round( ((sum_drinks) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100; - //console.log("BAC: " + ebac + " weight: " + confWeight + " weightInKilo: " + weight + " Unit: " + confWeightUnit); + console.log("BAC: " + ebac + " weight: " + confWeight + " weightInKilo: " + weight + " Unit: " + confWeightUnit); + console.log("sum_drinks: " + sum_drinks); g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear g.setFontAlign(0,0).setFont("8x16").setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); } @@ -151,6 +161,7 @@ function updateDrinks(){ g.drawImage(icoResetB,145,145); } + drinkStatus.firstDrinkTime = firstDrinkTime; settings_file = require("Storage").open("drinkcounter.status.json", "w"); settings_file.write(JSON.stringify(drinkStatus)); @@ -166,8 +177,9 @@ function updateFirstDrinkTime(){ function addDrink(){ if (!firstDrinkTime){ - firstDrinkTime = new Date(); + firstDrinkTime = new Date(); firstDrinkTimeTime = require("locale").time(new Date(), 1); + console.log("init drinking! " + firstDrinkTime); } drinks[activeDrink] = drinks[activeDrink] + 1; updateFirstDrinkTime(); @@ -260,4 +272,5 @@ updateTime(); queueDrawTime(); initDragEvents(); updateDrinks(); +updateFirstDrinkTime(); From 874320cb63555511cdeb50326c6d18786537c089 Mon Sep 17 00:00:00 2001 From: Hank Date: Sat, 9 Jul 2022 19:58:39 +0200 Subject: [PATCH 14/19] Fixes --- apps/drinkcounter/app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 95b9e5de7..495f384fc 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -75,7 +75,6 @@ function drawBac(){ if (confWeightUnit == "US Pounds") { weight = weight * 0.45359237; } - var currentTime = new Date(); var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); // in hours! console.log("currentTime: " + currentTime) From 3c328101623056e5f1254ae79843740caf87db4f Mon Sep 17 00:00:00 2001 From: Hank Date: Sat, 9 Jul 2022 20:03:20 +0200 Subject: [PATCH 15/19] Adding status file to metadata --- apps/drinkcounter/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/drinkcounter/metadata.json b/apps/drinkcounter/metadata.json index 665921fce..30a4cc243 100644 --- a/apps/drinkcounter/metadata.json +++ b/apps/drinkcounter/metadata.json @@ -17,6 +17,7 @@ ], "data": [ {"name":"drinkcounter.settings.json"}, - {"name":"drinkcounter.json"} + {"name":"drinkcounter.json"}, + {"name":"drinkcounter.status.json"} ] } \ No newline at end of file From 17e3cc71cc4a2b07209695bf03af109077c71a50 Mon Sep 17 00:00:00 2001 From: Hank Date: Sat, 9 Jul 2022 20:05:24 +0200 Subject: [PATCH 16/19] Adding more description --- apps/drinkcounter/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/drinkcounter/metadata.json b/apps/drinkcounter/metadata.json index 30a4cc243..e99956297 100644 --- a/apps/drinkcounter/metadata.json +++ b/apps/drinkcounter/metadata.json @@ -3,7 +3,7 @@ "name": "Drink Counter", "shortName": "Drink Counter", "version": "0.20", - "description": "Counts drinks you had for science.", + "description": "Counts drinks you had for science. Calculates blood alcohol content (BAC)", "allow_emulator":true, "icon": "drinkcounter.png", "type": "app", From f4fb4cd12f7aff7f84e4e2e3ca02f81b9bcea3da Mon Sep 17 00:00:00 2001 From: Hank Date: Sat, 9 Jul 2022 20:10:27 +0200 Subject: [PATCH 17/19] Fix init setting --- apps/drinkcounter/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/drinkcounter/settings.js b/apps/drinkcounter/settings.js index 9d213f4d2..336229b73 100644 --- a/apps/drinkcounter/settings.js +++ b/apps/drinkcounter/settings.js @@ -41,7 +41,7 @@ "Sex": stringInSettings("sex", ["male", "female"]), 'Weight': { - value: 0|settings.weight, + value: 80|settings.weight, min: 40, max: 500, onchange: v => { settings.weight = v; From 631f435ec41a21ea8914282477b9aa1d01263224 Mon Sep 17 00:00:00 2001 From: Hank Date: Sun, 10 Jul 2022 11:14:03 +0200 Subject: [PATCH 18/19] Improving image - disable logging --- apps/drinkcounter/app.js | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/apps/drinkcounter/app.js b/apps/drinkcounter/app.js index 495f384fc..47a4feb13 100644 --- a/apps/drinkcounter/app.js +++ b/apps/drinkcounter/app.js @@ -13,8 +13,7 @@ let drag; var icoBeer = require("heatshrink").decompress(atob("lEoxH+AG2BAAoecEpAoWC4fXAAIGGAAowTDxAmJE4YGGE5QeJE5QHHE7owJE0pQKE7pQJE86fnE5QJSE5YUHBAIJQYxIpFAAvGBBAJIExYoGDgIACBBApFExonCDYoAOFSAnbFJYnE6vVDYYFHAwakQE4YaFAoQGJEIYoME7QoEE7ogFE/4neTBgntY84n/E+7HUE64mDE8IAFEw4nDTBifIE9gmId7gALE5IGCAooGDE6gASE8yaME7gmOFIgAREqIAhA==")); var icoCocktail = require("heatshrink").decompress(atob("lEoxH+AH4AJtgABEkgmiEiXGAAIllAAiXeEAPXAQQDCFBYmTEgYqDFBZNWAIZRME6IfBEAYuEE5J2UwIAaJ5QncFBB3DB4YGCACQnKTQgoXE5bIEE6qfKPAZRFA4MUABgmNPAonBCgQnPExgpFPIgoNEyBSF4wGBFBgmSABCjJTZwoXEzwoHE0AoFE0QnCFAQmhKAonjFAInCE0Qn/E/4n/E/4n/wInDFEAhBEwQoDFLYdCEwooEFTAjHAAwoYIYgAMPDglT")); var icoShot = require("heatshrink").decompress(atob("lEoxH+AH4A/AH4A/AH4AqwIAgE+HXADRPME8ZQM5AnSZBQkGAAYngEYonfJA5QQE8zGJFAYfKFBwmKE4iYIE7rpIeYgAJE5woEEpQKHTxhQIIpJaHJxgn/E8zGQZBAnQYxxQRFQYnlFgon5FCYmDE6LjHZRQmPE5AAOE/4njFCTGQKCwmRKAgATE54oWEyAqTDZY")); -var icoResetB = require("heatshrink").decompress(atob("j0exH+AH4AGq0rgErqwbWwIbBAAcrwI3TRxQfQG4oAHlYcSOYOBAAJ7CDx5WEJ4+BBgacKB4cr1gOI1g+DPZINDDhIeCHoY6LUxoRLOoSkOJoZ5HBRRaHGAZrFWAZYMlYACcAkrCwQdQaQj1HDqD+FWwwdRcQgUHSqP+DgYTGHgYdOPQQwHQoY8PGIJmMPJzCPDxIoPYQhcHBgJmPYQtWwIABFAg9UABA8PNgI+FAAcrUKZUBEAcrLwK8XqwaB1jZYAGAA==")) -var icoResetW = require("heatshrink").decompress(atob("j0exH+AH4AGwOs6+swIbWqwbBAAesqw3TDQgAFD6A3FAA+sDiRzBqwABPYQePCIhPHqwMDThQPD1krBxErFgZ7JBoYcJDwQ9DHRamNCJbMCUhxNDPI6ENPI6IGHQRYN1gACU4YABCwQdQaQj1HDqAREWw4dRcQgUHUBQAHDgYTGHgYdOPQQwHQoY8PGIJmMPJzCPDxIoPYQhcHBgJmPYQuBwNWAQJHNHpQAIHh5sBHwoAD1ihTKoIgD1hdBXi54ClbZYAGA=")) +var icoReset = require("heatshrink").decompress(atob("j0egILI8ACBh4DC/4DBh4DCv8f4ED8EPwEPEQMAvEAnkB4EA+AKBCAM8DYOA8EB//HwED/wXBg/wnAOC+EAjkDDoMgg+AJoRFCEIIAB/kHgEB/l8FwP/DYIDBC4MD/ASBgYeCAAw")); var drawTimeout; var activeDrink = 0; var drinks = [0,0,0]; @@ -33,19 +32,19 @@ var drinkStatus = require("Storage").open("drinkcounter.status.json", "r"); var test = drinkStatus.read(drinkStatus.getLength()); if(test!== undefined) { drinkStatus = JSON.parse(test); - console.log("read status: " + test); + //console.log("read status: " + test); for (let i = 0; i <= maxDrinks; i++) { drinks[i] = drinkStatus.drinks[i]; } firstDrinkTime = Date.parse(drinkStatus.firstDrinkTime); - console.log("read firstDrinkTime: " + firstDrinkTime); + //console.log("read firstDrinkTime: " + firstDrinkTime); if (firstDrinkTime) firstDrinkTimeTime = require("locale").time(new Date(firstDrinkTime), 1); - console.log("read firstDrinkTimeTime: " + firstDrinkTimeTime); + //console.log("read firstDrinkTimeTime: " + firstDrinkTimeTime); } else { drinkStatus = { drinks: [0,0,0] }; - console.log("no status file - applying default"); + //console.log("no status file - applying default"); } // Load Status =============== @@ -77,14 +76,14 @@ function drawBac(){ } var currentTime = new Date(); var time_diff = Math.floor(((currentTime - firstDrinkTime) % 86400000) / 3600000); // in hours! - console.log("currentTime: " + currentTime) - console.log("firstDrinkTime: " + firstDrinkTime) + //console.log("currentTime: " + currentTime) + //console.log("firstDrinkTime: " + firstDrinkTime) - console.log("timediff: " + time_diff); + //console.log("timediff: " + time_diff); ebac = Math.round( ((sum_drinks) / (weight / 100 * sex) - (0.15 * time_diff) ) * 100) / 100; - console.log("BAC: " + ebac + " weight: " + confWeight + " weightInKilo: " + weight + " Unit: " + confWeightUnit); - console.log("sum_drinks: " + sum_drinks); + //console.log("BAC: " + ebac + " weight: " + confWeight + " weightInKilo: " + weight + " Unit: " + confWeightUnit); + //console.log("sum_drinks: " + sum_drinks); g.clearRect(0,34 + 20 + 8,176,34 + 20 + 20 + 8); //Clear g.setFontAlign(0,0).setFont("8x16").setColor(g.theme.fg).drawString("BAC: " + ebac, 90, 74); } @@ -154,11 +153,8 @@ function updateDrinks(){ drinkStatus.drinks[i] = drinks[i]; } - if (g.theme.dark) { - g.drawImage(icoResetW,145,145); - } else { - g.drawImage(icoResetB,145,145); - } + g.setBgColor(g.theme.bg).setColor(g.theme.fg); + g.drawImage(icoReset,145,145); drinkStatus.firstDrinkTime = firstDrinkTime; settings_file = require("Storage").open("drinkcounter.status.json", "w"); @@ -178,7 +174,7 @@ function addDrink(){ if (!firstDrinkTime){ firstDrinkTime = new Date(); firstDrinkTimeTime = require("locale").time(new Date(), 1); - console.log("init drinking! " + firstDrinkTime); + //console.log("init drinking! " + firstDrinkTime); } drinks[activeDrink] = drinks[activeDrink] + 1; updateFirstDrinkTime(); @@ -245,9 +241,9 @@ function initDragEvents() { for (let i = 0; i <= maxDrinks; i++) { drinks[i] = 0; } - console.log("reset to default"); + //console.log("reset to default"); } - console.log("reset " + confirm); + //console.log("reset " + confirm); firstDrinkTime = null; showDrinks(); updateDrinks(); From 947f5afdc95c8030eadebc9e4819a006cf0d314f Mon Sep 17 00:00:00 2001 From: Hank Date: Sun, 10 Jul 2022 11:16:58 +0200 Subject: [PATCH 19/19] Added Screenshot --- apps/drinkcounter/metadata.json | 1 + apps/drinkcounter/screenshot_drnkcnt.png | Bin 0 -> 3326 bytes 2 files changed, 1 insertion(+) create mode 100644 apps/drinkcounter/screenshot_drnkcnt.png diff --git a/apps/drinkcounter/metadata.json b/apps/drinkcounter/metadata.json index e99956297..3d1a167f0 100644 --- a/apps/drinkcounter/metadata.json +++ b/apps/drinkcounter/metadata.json @@ -8,6 +8,7 @@ "icon": "drinkcounter.png", "type": "app", "tags": "health", + "screenshots": [{"url":"screenshot_drnkcnt.png"}], "supports": ["BANGLEJS2"], "readme": "README.md", "storage": [ diff --git a/apps/drinkcounter/screenshot_drnkcnt.png b/apps/drinkcounter/screenshot_drnkcnt.png new file mode 100644 index 0000000000000000000000000000000000000000..7547eb63ff08ab157abf0c472151c6b077dccdfa GIT binary patch literal 3326 zcmb_f`8O1N7ypi7>`Q2|(?e0HRF)KxCA;j6VtP_!vW$`J#!{$gv1gd4MH8Y;ckgc&ZiP!rlJnwn$Iro0f{o&pp?&qA(`P^iCTXSInX#oI$u*FpqhkdO4 zZ}P$RYemC%k9~lk9n6hEdB5xr0E8MXOpKgDJr?sOGMTDEruut(Ln9=Mt9)j&aYQ~` zbk2J%K2)s+cZkDt!hXbT@$$r-U<0DjAG{4X0f4}W!688QLS&#kh>sl<0F1$@_*HO3 zD8U7QL=gonFAx|8J`sc(#^9oeFZ>1vGCGIHgm*(e;rf+ctgcVvM=%l=hE+{fO>2 z8dnAL5b=$U%E(2XD?9(o9U954C%Uw}SD^KZ=covSym=7=whFuJK@kFN<$vAb?VYUo ztcA^VWoeAcs?-Ct$II)5w`t;xnY>@+FOeYYpNyPVo;0T|vYB7++^g$bc>|`tSLT^t z79s2wSb2stUIh#9kBINfI6C=YAh-0P=2;FDp+YRkx+h}4bOGd}Cah)S1$3Q_-v+&@ zhgh#y1>bA1uE|{2kkM9~J*40|7cVsVGFET2HrD@})3}W+pp+00zg94~@k$Gwd*g{B z;ufk3r1s&iCzNBs!A*bU&}X$Lyct7Wox64WtRUAv&F1Z+EoA67oCmP$IJehq_m5tL znT^JCfi3v&GvP&CpwaPiFu?@^BJsON+8iNZQcbbhvlM`KmzZa?_e2Mk4Mi1Zp^Lh3wyLMDeqFWg+A?!C27m_oMuE#KWBCP1*XnOdfT!T3fpkiSjwXh`3J*H3ldhfKCu z-U|q}5iZlXS2k8pIpqYSL{B9KTP!|$*<7WHDU?z8LH38lwM;e5PnO(U?jaxNCT<7i zYW?liw9f6O<#CdkiT;aar185=%IzOR*AS<(h-pXiAu)VZC+PjQOn#<>H`R-1yPjL) z$;p8(RC%GNpM5a2kPF~(91jS?sQhK$@s6wSj->@cIU2FPE24V3nb)eR1*~Exx;SI}sT%$;d}Z^n z!(UB@ALuG72V|j6jRjKm6hazBFemAQ9$cD_&fh_5*7$msO&QENmLI8;@#l3zq5<&( z?ue=qgNCcStju#$;Iwyuc~XFAp!_gJL1P%G^O$mBYr8W>UvUn;|F#GzH?s0uad6p) zdsOoW9;K)M5;M#Z!0@Jvkre|O7JzmCYE<&L2+-$J|Mub9aVZrOS>nUQ&8D&4uks#d zZO(!O_v3=Hx|3(HlIs3g+I((8iC&63m-R>^+2%%$(boa;jX`N#a}_+d51vriZj!i@ z3Cu;MclJ&IjM0_*-FUuW>u=8-RK()gB_q2xTq8p23nXnOVy3)-H#E}G%QC}o&$;uNbXLmD6X9lU zl)OZ>5ti{gg7W@n-bj&uo!56K?O<<|=rzQZGU7BKY*?=0sxJ&ElUh#&(Z#Y(d%v*y z9!lf;Ql?S$RQt-oEl?KkQ*0;9bYf{Blep_zwNuaRl?Ho0oOF|F?0sb@(AcUadc3B{zh{P4bH3S6JWs0`tS;tRoPccBwUbzYsy3^ zGGNb_zvE5`b?9J2WDL@Qk{^6%WPD>eWM=;PFt#>NlICSM;W5WcT`EE85zIVX+XY`< z@{Bs(Rek6;mUM_0>eN?~dt=&XLHI#+Ma`!Mim_6Ef~nqz2(tg1^_qvR&Kw;b)TwLz zgV7%1#Rd@O#AXLJu-b<{j!DGs{ko#T~tC*BZUy zltL%ib6Q)7aJs zU#3NCwpr21V>ZmNw({}<_Ur&tCoW0qITkAU0kc_HyCB)QF1zIp9eAAeh}4vdP)hS(;3M3nKkHv<%$A@K znfI_B>(&8l6kgDSjBh! zv29Z${$l1vXU5AL{D&6Qd=a}}yQ@XRQ-AHkDiROUq;i^bTB8+&FWAM5{WMz@ACnQV z zW{Uv`k(7AH+IMR+$kYRJ`@Syq&(7gUo=o1Y(Xfi$fbYk1U2(rgb|HvFK7imoka7%E zUTbWX0hHwIijuZ*2qJG|gwkdd7^swx?4sv0A_nvmXeZjc29>ORHqO8`AeB%q_>kOV zpviIRe4FJX^I0 zIjv(bvsVJBER~$6g*YjMWn^-J^i-2#!+liy+9-@zyK>3GW`fGYSi`^il&g?(WpstPcAWjN8f_K{PE=4^@ zqlg9HT|y{#W#>!M;%X&`(rowzr0*>>ELEUVrxk2jae?y5OnIxFS>`!XNlgTd;`?{< zs-3v+??T(YpmBku?*1e+1D-j|*S%dK?9#6HtuTT8x&2i(wtwv*Z|K?;p>(l|i3uoT zY50A3%}*h=P$(p@4OU-f*(0uv3Q#e-Kk7T3pyJj-B~oNsU??lPpPka(4y3T;14;`? zs?s^@qLC~-u%|<)@-1WIHFrbuT+b77SZyT3ENJx`LKG3T48L5U zxKyPkyqgqq3&@|@er=;^)wgon1m@APdBC7IVH6u{ZY>K293Cv_W;%a_|AHbC-OO$- z$-T3E?Ssco!rTjvgOH@Z%>omrI^UL z$UOME2ZBg}o4A8AiJ|6OrT!~zv`2$BMl^WM&SyNQo}1Vn?pvk=MGhOoLhMOYZV)mk fAvJ1bQjolds?s3miaa*je`tV(sjW%5F(U3i0@hEp literal 0 HcmV?d00001