clkinfo: added sched and ranges in weather
parent
a9b12f0dba
commit
c8ee05a4b6
|
|
@ -14,3 +14,4 @@
|
||||||
Improve timer message using formatDuration
|
Improve timer message using formatDuration
|
||||||
Fix wrong fallback for buzz pattern
|
Fix wrong fallback for buzz pattern
|
||||||
0.13: Ask to delete a timer after stopping it
|
0.13: Ask to delete a timer after stopping it
|
||||||
|
0.14: Added clkinfo here
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
(function() {
|
||||||
|
const alarm = require('sched');
|
||||||
|
const iconAlarmOn = atob("GBiBAAAAAAAAAAYAYA4AcBx+ODn/nAP/wAf/4A/n8A/n8B/n+B/n+B/n+B/n+B/h+B/4+A/+8A//8Af/4AP/wAH/gAB+AAAAAAAAAA==");
|
||||||
|
const iconAlarmOff =
|
||||||
|
atob("GBjBAP////8AAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg=");
|
||||||
|
//atob("GBjBAP//AAAAAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg=");
|
||||||
|
|
||||||
|
const iconTimerOn =
|
||||||
|
atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA=");
|
||||||
|
//atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA=");
|
||||||
|
const iconTimerOff =
|
||||||
|
atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg=");
|
||||||
|
//atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg=");
|
||||||
|
|
||||||
|
//from 0 to max, the higher the closer to fire (as in a progress bar)
|
||||||
|
function getAlarmValue(a){
|
||||||
|
let min = Math.round(alarm.getTimeToAlarm(a)/(60*1000));
|
||||||
|
if(!min) return 0; //not active or more than a day
|
||||||
|
return getAlarmMax(a)-min;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAlarmMax(a) {
|
||||||
|
if(a.timer)
|
||||||
|
return Math.round(a.timer/(60*1000));
|
||||||
|
//minutes cannot be more than a full day
|
||||||
|
return 1440;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAlarmIcon(a) {
|
||||||
|
if(a.on) {
|
||||||
|
if(a.timer) return iconTimerOn;
|
||||||
|
return iconAlarmOn;
|
||||||
|
} else {
|
||||||
|
if(a.timer) return iconTimerOff;
|
||||||
|
return iconAlarmOff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAlarmText(a){
|
||||||
|
if(a.timer) {
|
||||||
|
if(!a.on) return "off";
|
||||||
|
let time = Math.round(alarm.getTimeToAlarm(a)/(60*1000));
|
||||||
|
if(time > 60)
|
||||||
|
time = Math.round(time / 60) + "h";
|
||||||
|
else
|
||||||
|
time += "m";
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
return require("time_utils").formatTime(a.t);
|
||||||
|
}
|
||||||
|
|
||||||
|
var img = iconAlarmOn;
|
||||||
|
//get only alarms not created by other apps
|
||||||
|
var alarmItems = {
|
||||||
|
name: "Alarms",
|
||||||
|
img: img,
|
||||||
|
items: alarm.getAlarms().filter(a=>!a.appid)
|
||||||
|
.sort((a,b)=>alarm.getTimeToAlarm(a)-alarm.getTimeToAlarm(b))
|
||||||
|
//.sort((a,b)=>getAlarmMinutes(a)-getAlarmMinutes(b))
|
||||||
|
.map((a, i)=>({
|
||||||
|
name: null,
|
||||||
|
get: () => ({ text: getAlarmText(a), img: getAlarmIcon(a),
|
||||||
|
hasRange: true, v: getAlarmValue(a), min:0, max:getAlarmMax(a)}),
|
||||||
|
show: function() { alarmItems.items[i].emit("redraw"); },
|
||||||
|
hide: function () {},
|
||||||
|
run: function() { }
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
|
||||||
|
return alarmItems;
|
||||||
|
})
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "sched",
|
"id": "sched",
|
||||||
"name": "Scheduler",
|
"name": "Scheduler",
|
||||||
"version": "0.13",
|
"version": "0.14",
|
||||||
"description": "Scheduling library for alarms and timers",
|
"description": "Scheduling library for alarms and timers",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"type": "scheduler",
|
"type": "scheduler",
|
||||||
|
|
@ -13,7 +13,8 @@
|
||||||
{"name":"sched.js","url":"sched.js"},
|
{"name":"sched.js","url":"sched.js"},
|
||||||
{"name":"sched.img","url":"app-icon.js","evaluate":true},
|
{"name":"sched.img","url":"app-icon.js","evaluate":true},
|
||||||
{"name":"sched","url":"lib.js"},
|
{"name":"sched","url":"lib.js"},
|
||||||
{"name":"sched.settings.js","url":"settings.js"}
|
{"name":"sched.settings.js","url":"settings.js"},
|
||||||
|
{"name":"sched.clkinfo.js","url":"clkinfo.js"}
|
||||||
],
|
],
|
||||||
"data": [{"name":"sched.json"}, {"name":"sched.settings.json"}]
|
"data": [{"name":"sched.json"}, {"name":"sched.settings.json"}]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,34 +5,38 @@
|
||||||
wind: "?",
|
wind: "?",
|
||||||
};
|
};
|
||||||
|
|
||||||
var weatherJson = storage.readJSON('weather.json');
|
var weatherJson = require("Storage").readJSON('weather.json');
|
||||||
if(weatherJson !== undefined && weatherJson.weather !== undefined){
|
if(weatherJson !== undefined && weatherJson.weather !== undefined){
|
||||||
weather = weatherJson.weather;
|
weather = weatherJson.weather;
|
||||||
weather.temp = locale.temp(weather.temp-273.15);
|
weather.temp = require("locale").temp(weather.temp-273.15);
|
||||||
weather.hum = weather.hum + "%";
|
weather.hum = weather.hum + "%";
|
||||||
weather.wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/);
|
weather.wind = require("locale").speed(weather.wind).match(/^(\D*\d*)(.*)$/);
|
||||||
weather.wind = Math.round(weather.wind[1]) + "kph";
|
weather.wind = Math.round(weather.wind[1]) + "kph";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//FIXME ranges are somehow arbitrary
|
||||||
var weatherItems = {
|
var weatherItems = {
|
||||||
name: "Weather",
|
name: "Weather",
|
||||||
img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="),
|
img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="),
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
name: "temperature",
|
name: "temperature",
|
||||||
get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA==")}),
|
get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="),
|
||||||
|
hasRange: true, v: parseInt(weather.temp), min: -30, max: 55}),
|
||||||
show: function() { weatherItems.items[0].emit("redraw"); },
|
show: function() { weatherItems.items[0].emit("redraw"); },
|
||||||
hide: function () {}
|
hide: function () {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "humidity",
|
name: "humidity",
|
||||||
get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A==")}),
|
get: () => ({ text: weather.hum, img: atob("GBiBAAAEAAAMAAAOAAAfAAAfAAA/gAA/gAI/gAY/AAcfAA+AQA+A4B/A4D/B8D/h+D/j+H/n/D/n/D/n/B/H/A+H/AAH/AAD+AAA8A=="),
|
||||||
|
hasRange: true, v: parseInt(weather.hum), min: 0, max: 100}),
|
||||||
show: function() { weatherItems.items[1].emit("redraw"); },
|
show: function() { weatherItems.items[1].emit("redraw"); },
|
||||||
hide: function () {}
|
hide: function () {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "wind",
|
name: "wind",
|
||||||
get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA==")}),
|
get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="),
|
||||||
|
hasRange: true, v: parseInt(weather.wind), min: 0, max: 118}),
|
||||||
show: function() { weatherItems.items[2].emit("redraw"); },
|
show: function() { weatherItems.items[2].emit("redraw"); },
|
||||||
hide: function () {}
|
hide: function () {}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,15 @@ example.clkinfo.js :
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
let storage = require("Storage");
|
||||||
|
let stepGoal = undefined;
|
||||||
|
// Load step goal from health app and pedometer widget
|
||||||
|
let d = storage.readJSON("health.json", true) || {};
|
||||||
|
stepGoal = d != undefined && d.settings != undefined ? d.settings.stepGoal : undefined;
|
||||||
|
if (stepGoal == undefined) {
|
||||||
|
d = storage.readJSON("wpedom.json", true) || {};
|
||||||
|
stepGoal = d != undefined && d.settings != undefined ? d.settings.goal : 10000;
|
||||||
|
}
|
||||||
|
|
||||||
exports.load = function() {
|
exports.load = function() {
|
||||||
// info used for drawing...
|
// info used for drawing...
|
||||||
|
|
@ -81,7 +90,7 @@ exports.load = function() {
|
||||||
{ name : "Steps",
|
{ name : "Steps",
|
||||||
hasRange : true,
|
hasRange : true,
|
||||||
get : () => { let v = Bangle.getHealthStatus("day").steps; return {
|
get : () => { let v = Bangle.getHealthStatus("day").steps; return {
|
||||||
text : v, v : v, min : 0, max : 10000, // TODO: do we have a target step amount anywhere?
|
text : v, v : v, min : 0, max : stepGoal,
|
||||||
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==")
|
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==")
|
||||||
}},
|
}},
|
||||||
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
|
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue