From 6687986dab82d30b184a8f1f72d27fcbe0296d87 Mon Sep 17 00:00:00 2001 From: hugh Date: Sat, 5 Nov 2022 15:07:04 +0000 Subject: [PATCH] added option to buzz on prime, with settings --- apps/primetimelato/app.js | 31 ++++++++++++++++++++++++++--- apps/primetimelato/metadata.json | 7 +++++-- apps/primetimelato/settings.js | 34 ++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 apps/primetimelato/settings.js diff --git a/apps/primetimelato/app.js b/apps/primetimelato/app.js index 2031fd53b..e03e8fa51 100644 --- a/apps/primetimelato/app.js +++ b/apps/primetimelato/app.js @@ -1,5 +1,7 @@ const h = g.getHeight(); const w = g.getWidth(); +const SETTINGS_FILE = "pastel.json"; +let settings; Graphics.prototype.setFontLato = function(scale) { // Actual height 41 (43 - 3) @@ -22,6 +24,11 @@ Graphics.prototype.setFontLatoSmall = function(scale) { ); return this; }; + +function loadSettings() { + settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; + settings.buzz_on_prime = (settings.buzz_on_prime === undefined ? false : settings.buzz_on_prime); +} // creates a list of prime factors of n and outputs them as a string, if n is prime outputs "Prime Time!" function primeFactors(n) { @@ -55,24 +62,41 @@ function timeToInt(t) { function draw() { var date = new Date(); var timeStr = require("locale").time(date,1); - var primeStr = primeFactors(timeToInt(timeStr)); + var intTime = timeToInt(timeStr); + var primeStr = primeFactors(intTime); g.reset(); g.setColor(0,0,0); g.fillRect(Bangle.appRect); - //g.setFont("6x8", w/30); g.setFontLato(); g.setFontAlign(0, 0); g.setColor(100,100,100); g.drawString(timeStr, w/2, h/2); - //g.setFont("6x8", w/60); g.setFontLatoSmall(); g.drawString(primeStr, w/2, 3*h/4); + // Buzz if Prime Time and between 8am and 8pm + if (settings.buzz_on_prime && primeStr == "Prime Time!" && intTime >= 800 && intTime <= 2000) + buzzer(2); queueDraw(); } +// timeout for multi-buzzer +var buzzTimeout; + +// n buzzes +function buzzer(n) { + if (n-- < 1) return; + Bangle.buzz(250); + + if (buzzTimeout) clearTimeout(buzzTimeout); + buzzTimeout = setTimeout(function() { + buzzTimeout = undefined; + buzzer(n); + }, 500); +} + // timeout used to update every minute var drawTimeout; @@ -96,6 +120,7 @@ Bangle.on('lcdPower',on=>{ }); +loadSettings(); g.clear(); // Show launcher when middle button pressed Bangle.setUI("clock"); diff --git a/apps/primetimelato/metadata.json b/apps/primetimelato/metadata.json index 88beed6ac..eaecf94f5 100644 --- a/apps/primetimelato/metadata.json +++ b/apps/primetimelato/metadata.json @@ -10,6 +10,9 @@ "readme": "README.md", "storage": [ {"name":"primetimelato.app.js","url":"app.js"}, - {"name":"primetimelato.img","url":"icon.js","evaluate":true} - ] + {"name":"primetimelato.img","url":"icon.js","evaluate":true}, + {"name":"primetimelato.settings.js","url":"settings.js"} + + ], + "data": [{"name":"primetimelato.json"}] } diff --git a/apps/primetimelato/settings.js b/apps/primetimelato/settings.js new file mode 100644 index 000000000..19702ed84 --- /dev/null +++ b/apps/primetimelato/settings.js @@ -0,0 +1,34 @@ +(function(back) { + const SETTINGS_FILE = "primetimelato.json"; + + // initialize with default settings... + let s = { + 'buzz_on_prime': true, + } + + // ...and overwrite them with any saved values + // This way saved values are preserved if a new version adds more settings + const storage = require('Storage') + let settings = storage.readJSON(SETTINGS_FILE, 1) || {} + const saved = settings || {} + for (const key in saved) { + s[key] = saved[key] + } + + function save() { + settings = s + storage.write(SETTINGS_FILE, settings) + } + + E.showMenu({ + '': { 'title': 'Prime Time Lato' }, + '< Back': back, + 'Buzz on Prime': { + value: !!s.buzz_on_prime, + onchange: v => { + s.buzz_on_prime = v; + save(); + }, + } + }) +})