fitbit-squared/app/index.js

164 lines
3.8 KiB
JavaScript

import document from "document";
import clock from "clock";
import { display } from "display";
import { vibration } from "haptics";
import { preferences } from "user-settings";
import * as messaging from "messaging";
import * as fs from "fs";
import * as digits from "../common/digits";
import * as colors from "../common/colors";
import * as themes from "../common/themes";
var starttime, endtime;
const debug = false;
const colorTemplate = false;
const colorCount = 25;
var colorDef = [
null,
themes.colors['whiteMarble'],
themes.colors['blackMarble']
];
var storedColorDef;
var fileSuccess = true;
console.log('reading color def');
try {
storedColorDef = fs.readFileSync("colordef.txt", "cbor");
}
catch(err) {
fileSuccess = false;
console.log('color def not found');
}
if (fileSuccess) {
colorDef = storedColorDef;
}
var storedColorSet;
var fileSuccess = true;
console.log('reading colors file');
try {
storedColorSet = fs.readFileSync("colors.txt", "cbor");
}
catch(err) {
fileSuccess = false;
console.log('colors file not found, scheduling initial color generation');
}
if (fileSuccess) {
colors.setCurrentColorSet(storedColorSet);
}
if (debug) {
let touchArea = document.getElementById('touchArea');
display.autoOff = false;
display.on = true;
colors.initColors(colorDef, colorCount);
touchArea.onclick = (e) => {
colors.initColors(colorDef, colorCount);
updateClock(true);
}
}
function updateClock(forceRedraw) {
starttime = new Date();
console.log('started updateClock with forceRedraw = '+forceRedraw);
let currDate = new Date();
let hours = currDate.getHours();
let displayHours = hours;
if (preferences.clockDisplay === '12h') {
displayHours = displayHours % 12;
displayHours = displayHours ? displayHours : 12;
}
let minutes = currDate.getMinutes();
let day = currDate.getDate();
let month = currDate.getMonth()+1;
let newDigits = [
Math.floor(displayHours/10),
displayHours%10,
Math.floor(minutes/10),
minutes%10,
Math.floor(day/10),
day%10,
Math.floor(month/10),
month%10,
];
if (debug) {
newDigits[0] = 1;
newDigits[1] = 7;
newDigits[2] = 0;
newDigits[3] = 4;
newDigits[4] = 1;
newDigits[5] = 3;
newDigits[6] = 0;
newDigits[7] = 7;
}
if (colorTemplate) {
newDigits[0] = 'Ÿ';
newDigits[1] = 'ÿ';
newDigits[2] = 'Ÿ';
newDigits[3] = 'ÿ';
}
endtime = new Date();
console.log('updateClock is ready for setDigits at '+(endtime-starttime)+' ms');
digits.setDigits(newDigits, forceRedraw);
endtime = new Date();
console.log('updateClock finished setDigits at '+(endtime-starttime)+' ms');
}
display.onchange = () => {
if (!display.on) {
colors.initColors(colorDef, colorCount);
updateClock(true);
}
}
clock.granularity = "minutes";
clock.ontick = () => updateClock();
updateClock();
messaging.peerSocket.onmessage = e => {
console.log("Message received -> "+e.data.key+": "+e.data.newValue);
display.poke();
vibration.start("bump");
let updateColors = false
switch (e.data.key) {
case 'digitColor':
colorDef[1] = themes.colors[e.data.newValue];
updateColors = true;
break;
case 'ornamentColor':
colorDef[2] = themes.colors[e.data.newValue];
updateColors = true;
break;
};
if (updateColors) {
colors.initColors(colorDef, colorCount);
updateClock(true);
vibration.start("bump");
fs.writeFileSync("colordef.txt", colorDef, "cbor");
}
}
messaging.peerSocket.onopen = () => {
console.log("Clockface opened socket");
};
messaging.peerSocket.close = () => {
console.log("Clockface closed socket");
};
messaging.peerSocket.onerror = (err) => {
console.log("Clockface socket error: " + err.code + " - " + err.message);
}
setTimeout(() => {
colors.initColors(colorDef, colorCount);
updateClock(true);
}, 200);