mirror of https://github.com/espruino/BangleApps
added option to buzz on prime, with settings
parent
91f0564c0d
commit
6687986dab
|
@ -1,5 +1,7 @@
|
||||||
const h = g.getHeight();
|
const h = g.getHeight();
|
||||||
const w = g.getWidth();
|
const w = g.getWidth();
|
||||||
|
const SETTINGS_FILE = "pastel.json";
|
||||||
|
let settings;
|
||||||
|
|
||||||
Graphics.prototype.setFontLato = function(scale) {
|
Graphics.prototype.setFontLato = function(scale) {
|
||||||
// Actual height 41 (43 - 3)
|
// Actual height 41 (43 - 3)
|
||||||
|
@ -23,6 +25,11 @@ Graphics.prototype.setFontLatoSmall = function(scale) {
|
||||||
return this;
|
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!"
|
// creates a list of prime factors of n and outputs them as a string, if n is prime outputs "Prime Time!"
|
||||||
function primeFactors(n) {
|
function primeFactors(n) {
|
||||||
const factors = [];
|
const factors = [];
|
||||||
|
@ -55,24 +62,41 @@ function timeToInt(t) {
|
||||||
function draw() {
|
function draw() {
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
var timeStr = require("locale").time(date,1);
|
var timeStr = require("locale").time(date,1);
|
||||||
var primeStr = primeFactors(timeToInt(timeStr));
|
var intTime = timeToInt(timeStr);
|
||||||
|
var primeStr = primeFactors(intTime);
|
||||||
|
|
||||||
g.reset();
|
g.reset();
|
||||||
g.setColor(0,0,0);
|
g.setColor(0,0,0);
|
||||||
g.fillRect(Bangle.appRect);
|
g.fillRect(Bangle.appRect);
|
||||||
|
|
||||||
//g.setFont("6x8", w/30);
|
|
||||||
g.setFontLato();
|
g.setFontLato();
|
||||||
g.setFontAlign(0, 0);
|
g.setFontAlign(0, 0);
|
||||||
g.setColor(100,100,100);
|
g.setColor(100,100,100);
|
||||||
g.drawString(timeStr, w/2, h/2);
|
g.drawString(timeStr, w/2, h/2);
|
||||||
|
|
||||||
//g.setFont("6x8", w/60);
|
|
||||||
g.setFontLatoSmall();
|
g.setFontLatoSmall();
|
||||||
g.drawString(primeStr, w/2, 3*h/4);
|
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();
|
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
|
// timeout used to update every minute
|
||||||
var drawTimeout;
|
var drawTimeout;
|
||||||
|
|
||||||
|
@ -96,6 +120,7 @@ Bangle.on('lcdPower',on=>{
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
loadSettings();
|
||||||
g.clear();
|
g.clear();
|
||||||
// Show launcher when middle button pressed
|
// Show launcher when middle button pressed
|
||||||
Bangle.setUI("clock");
|
Bangle.setUI("clock");
|
||||||
|
|
|
@ -10,6 +10,9 @@
|
||||||
"readme": "README.md",
|
"readme": "README.md",
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"primetimelato.app.js","url":"app.js"},
|
{"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"}]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in New Issue