adding terminal clock app

pull/1474/head
Stiralbios 2022-02-13 16:07:23 +01:00
parent 405de6d6c0
commit ef4ac921d3
9 changed files with 227 additions and 0 deletions

View File

@ -0,0 +1 @@
0.01: New App!

View File

@ -0,0 +1,3 @@
# Terminal clock
A clock displayed as a terminal cli. It can display the time, date, hrm, activity and steps

View File

@ -0,0 +1 @@
E.toArrayBuffer(atob("MDCEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d3ZmZgAAAAAAAAAAAAAAAAAAAAAAAGZmZ3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3d3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAAAABnd3d3d3cAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAAAABnd3dwAAAAAAAAAAAAAAAAAAAAAAAGZmZ3d3dwAAAAAAAAAAAAAAAAAAAAAAAHd3d3ZmZgAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d2AAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d2AAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="))

140
apps/terminal_clock/app.js Normal file
View File

@ -0,0 +1,140 @@
var locale = require("locale");
var fontColor = "#00FF00";
var startY = 30;
var paddingY = 2;
var font6x8At4Size = 32;
var font6x8At2Size = 18;
var heartRate = 0;
function setFontSize(pos){
if(pos == 1)
g.setFont("6x8", 4);
else
g.setFont("6x8", 2);
}
function clearField(pos){
var yStartPos = startY +
paddingY * (pos - 1) +
font6x8At4Size * Math.min(1, pos-1) +
font6x8At2Size * Math.max(0, pos-2);
var yEndPos = startY +
paddingY * (pos - 1) +
font6x8At4Size * Math.min(1, pos) +
font6x8At2Size * Math.max(0, pos-1);
g.clearRect(0, yStartPos, 240, yEndPos);
}
function clearWatchIfNeeded(now){
if(now.getMinutes() % 10 == 0)
g.clearRect(0, 0, 240, 240);
}
function drawLine(line, pos){
setFontSize(pos);
var yPos = startY +
paddingY * (pos - 1) +
font6x8At4Size * Math.min(1, pos-1) +
font6x8At2Size * Math.max(0, pos-2);
g.drawString(line, 5, yPos, true);
}
function drawTime(now, pos){
var h = now.getHours();
var m = now.getMinutes();
var time = ">" + (""+h).substr(-2) + ":" + ("0"+m).substr(-2);
drawLine(time, pos);
}
function drawDate(now, pos){
var dow = locale.dow(now, 1);
var date = locale.date(now, 1).substr(0,6) + locale.date(now, 1).substr(-2);
var locale_date = ">" + dow + " " + date;
drawLine(locale_date, pos);
}
function drawInput(now, pos){
clearField(pos);
drawLine(">", pos);
}
function drawStepCount(pos){
var health = Bangle.getHealthStatus("day");
var steps_formated = ">Steps: " + health.steps;
drawLine(steps_formated, pos);
}
function drawHRM(pos){
clearField(pos);
if(heartRate != 0)
drawLine(">HR: " + parseInt(heartRate), pos);
else
drawLine(">HR: unknown", pos);
}
function drawActivity(pos){
clearField(pos);
var health = Bangle.getHealthStatus('last');
var steps_formated = ">Activity: " + parseInt(health.movement/10);
drawLine(steps_formated, pos);
}
function draw(){
// console.log("in draw");
// console.log(settings);
var curPos = 1;
g.reset();
g.setFontAlign(-1, -1);
g.setColor(fontColor);
var now = new Date();
clearWatchIfNeeded(now); // mostly to not have issues when changing days
drawTime(now, curPos);
curPos++;
if(settings.showDate == "Yes"){
drawDate(now, curPos);
curPos++;
}
if(settings.showHRM == "Yes"){
drawHRM(curPos);
curPos++;
}
if(settings.showActivity == "Yes"){
drawActivity(curPos);
curPos++;
}
if(settings.showStepCount == "Yes"){
drawStepCount(curPos);
curPos++;
}
drawInput(now, curPos);
}
Bangle.on('HRM',function(hrmInfo) {
if(hrmInfo.confidence >= settings.HRMinConfidence)
heartRate = hrmInfo.bpm;
});
// Clear the screen once, at startup
g.clear();
// load the settings
var settings = Object.assign({
// default values
HRMinConfidence: 40,
showDate: "Yes",
showHRM: "Yes",
showActivity: "Yes",
showStepCount: "Yes",
}, require('Storage').readJSON("terminal_clock.json", true) || {});
// draw immediately at first
draw();
// Show launcher when middle button pressed
Bangle.setUI("clock");
// Load widgets
Bangle.loadWidgets();
Bangle.drawWidgets();
var secondInterval = setInterval(draw, 10000);

Binary file not shown.

After

Width:  |  Height:  |  Size: 1022 B

View File

@ -0,0 +1,21 @@
{ "id": "terminal_clock",
"name": "Terminal Clock",
"shortName":"Terminal Clock",
"icon": "icon.png",
"version":"0.01",
"type": "clock",
"supports": ["BANGLEJS","BANGLEJS2"],
"description": "A terminal clock displaying multiple informations",
"storage": [
{"name": "terminal_clock.app.js","url": "app.js"},
{"name": "terminal_clock.settings.js", "url": "settings.js"},
{"name": "terminal_clock.img","url": "app-icon.js","evaluate": true}
],
"data": [
{"name": "terminal_clock.json"},
],
"screenshots": [
{"url": "screenshot1.png"},
{"url": "screenshot2.png"}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,61 @@
(function(back) {
var FILE = "terminal_clock.json";
// Load settings
var settings = Object.assign({
HRMinConfidence: 40,
showDate: "Yes",
showHRM: "Yes",
showActivity: "Yes",
showStepCount: "Yes",
}, require('Storage').readJSON(FILE, true) || {});
function writeSettings() {
require('Storage').writeJSON(FILE, settings);
}
// Show the menu
E.showMenu({
"" : { "title" : "Terminal Clock" },
"< Back" : () => back(),
'HR confidence': {
value: 40|settings.HRMinConfidence, // 0| converts undefined to 0
min: 0, max: 100,
onchange: v => {
settings.HRMinConfidence = v;
writeSettings();
}
},
'Show date': {
value: !!settings.showDate,
format: v => v?"Yes":"No",
onchange: v => {
settings.showDate = v;
writeSettings();
}
},
'Show HRM': {
value: !!settings.showHRM,
format: v => v?"Yes":"No",
onchange: v => {
settings.showHRM = v;
writeSettings();
}
},
'Show Activity': {
value: !!settings.showActivity,
format: v => v?"Yes":"No",
onchange: v => {
settings.showActivity = v;
writeSettings();
}
},
'Show Steps': {
value: !!settings.showStepCount,
format: v => v?"Yes":"No",
onchange: v => {
settings.showStepCount = v;
writeSettings();
}
}
});
})