Refactored into clkinfo.js files
parent
2c1b29eb53
commit
24972e3128
|
|
@ -3,3 +3,4 @@
|
||||||
0.03: Disable past events display from settings
|
0.03: Disable past events display from settings
|
||||||
0.04: Added awareness of allDay field
|
0.04: Added awareness of allDay field
|
||||||
0.05: Displaying calendar colour and name
|
0.05: Displaying calendar colour and name
|
||||||
|
0.06: Added clkinfo for clocks.
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
(function() {
|
||||||
|
var agendaItems = {
|
||||||
|
name: "Agenda",
|
||||||
|
img: atob("GBiBAf////////85z/AAAPAAAPgAAP////AAAPAAAPAAAPAAAOAAAeAAAeAAAcAAA8AAAoAABgAADP//+P//8PAAAPAAAPgAAf///w=="),
|
||||||
|
items: []
|
||||||
|
};
|
||||||
|
|
||||||
|
var now = new Date();
|
||||||
|
var agenda = storage.readJSON("android.calendar.json")
|
||||||
|
.filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000)
|
||||||
|
.sort((a,b)=>a.timestamp - b.timestamp);
|
||||||
|
|
||||||
|
agenda.forEach((entry, i) => {
|
||||||
|
|
||||||
|
var title = entry.title.slice(0,14);
|
||||||
|
var date = new Date(entry.timestamp*1000);
|
||||||
|
var dateStr = locale.date(date).replace(/\d\d\d\d/,"");
|
||||||
|
dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : "";
|
||||||
|
|
||||||
|
agendaItems.items.push({
|
||||||
|
name: "agendaEntry-" + i,
|
||||||
|
get: () => ({ text: title + "\n" + dateStr, img: null}),
|
||||||
|
show: function() { agendaItems.items[i].emit("redraw"); },
|
||||||
|
hide: function () {}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return agendaItems;
|
||||||
|
})
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "agenda",
|
"id": "agenda",
|
||||||
"name": "Agenda",
|
"name": "Agenda",
|
||||||
"version": "0.05",
|
"version": "0.06",
|
||||||
"description": "Simple agenda",
|
"description": "Simple agenda",
|
||||||
"icon": "agenda.png",
|
"icon": "agenda.png",
|
||||||
"screenshots": [{"url":"screenshot_agenda_overview.png"}, {"url":"screenshot_agenda_event1.png"}, {"url":"screenshot_agenda_event2.png"}],
|
"screenshots": [{"url":"screenshot_agenda_overview.png"}, {"url":"screenshot_agenda_event1.png"}, {"url":"screenshot_agenda_event2.png"}],
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"agenda.app.js","url":"agenda.js"},
|
{"name":"agenda.app.js","url":"agenda.js"},
|
||||||
{"name":"agenda.settings.js","url":"settings.js"},
|
{"name":"agenda.settings.js","url":"settings.js"},
|
||||||
|
{"name":"agenda.clkinfo.js","url":"agenda.clkinfo.js"},
|
||||||
{"name":"agenda.img","url":"agenda-icon.js","evaluate":true}
|
{"name":"agenda.img","url":"agenda-icon.js","evaluate":true}
|
||||||
],
|
],
|
||||||
"data": [{"name":"agenda.settings.json"}]
|
"data": [{"name":"agenda.settings.json"}]
|
||||||
|
|
|
||||||
|
|
@ -18,4 +18,5 @@
|
||||||
0.18: Set timer for an agenda entry by simply clicking in the middle of the screen. Only one timer can be set.
|
0.18: Set timer for an agenda entry by simply clicking in the middle of the screen. Only one timer can be set.
|
||||||
0.19: Fix - Compatibility with "Digital clock widget"
|
0.19: Fix - Compatibility with "Digital clock widget"
|
||||||
0.20: Better handling of async data such as getPressure.
|
0.20: Better handling of async data such as getPressure.
|
||||||
0.21: On the default menu the week of year can be shown.
|
0.21: On the default menu the week of year can be shown.
|
||||||
|
0.22: Use the new clkinfo module for the menu.
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
*/
|
*/
|
||||||
const locale = require('locale');
|
const locale = require('locale');
|
||||||
const storage = require('Storage');
|
const storage = require('Storage');
|
||||||
// const clock_info = require("clock_info");
|
const clock_info = require("clock_info");
|
||||||
|
|
||||||
/************
|
/************
|
||||||
* Statics
|
* Statics
|
||||||
|
|
@ -82,215 +82,42 @@ function imgLock(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----clock_info ------------------------------------------------------
|
// Custom bwItems menu - therefore, its added here and not in a clkinfo.js file.
|
||||||
function loadClockInfo() {
|
var bwItems = {
|
||||||
// info used for drawing...
|
|
||||||
var hrm = "--";
|
|
||||||
var alt = "--";
|
|
||||||
var interval = null;
|
|
||||||
// callbacks (needed for easy removal of listeners)
|
|
||||||
function batteryUpdateHandler() { bangleItems[0].emit("redraw"); }
|
|
||||||
function stepUpdateHandler() { bangleItems[1].emit("redraw"); }
|
|
||||||
function hrmUpdateHandler() { bangleItems[2].emit("redraw"); }
|
|
||||||
function altUpdateHandler() {
|
|
||||||
Bangle.getPressure().then(data=>{
|
|
||||||
if (!data) return;
|
|
||||||
alt = Math.round(data.altitude) + "m";
|
|
||||||
bangleItems[3].emit("redraw");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function deleteInterval(inter){
|
|
||||||
if(inter){
|
|
||||||
clearInterval(inter);
|
|
||||||
}
|
|
||||||
delete inter;
|
|
||||||
}
|
|
||||||
// actual items
|
|
||||||
var items = [{
|
|
||||||
name: "Bangle",
|
|
||||||
img: atob("GBiBAf8B//4B//4B//4B//4A//x4//n+f/P/P+fPn+fPn+fP3+/Px+/Px+fn3+fzn+f/n/P/P/n+f/x4//4A//4B//4B//4B//8B/w=="),
|
|
||||||
items: [
|
|
||||||
{ name : "Battery",
|
|
||||||
get : () => ({
|
|
||||||
text : E.getBattery() + "%",
|
|
||||||
img : atob(Bangle.isCharging() ? "GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==" : "GBiBAAAAAAAAAAAAAAAAAAAAAD//+P///IAAAr//Ar//Ar//A7//A7//A7//A7//Ar//AoAAAv///D//+AAAAAAAAAAAAAAAAAAAAA==") }),
|
|
||||||
show : function() {
|
|
||||||
deleteInterval(interval);
|
|
||||||
interval = setInterval(()=>this.emit('redraw'), 60000);
|
|
||||||
Bangle.on("charging", batteryUpdateHandler);
|
|
||||||
batteryUpdateHandler();
|
|
||||||
},
|
|
||||||
hide : function() {
|
|
||||||
deleteInterval(interval);
|
|
||||||
Bangle.removeListener("charging", batteryUpdateHandler);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{ name : "Steps", get : () => ({
|
|
||||||
text : Bangle.getHealthStatus("day").steps,
|
|
||||||
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==") }),
|
|
||||||
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
|
|
||||||
hide : function() { Bangle.removeListener("step", stepUpdateHandler); },
|
|
||||||
},
|
|
||||||
{ name : "HRM", get : () => ({
|
|
||||||
text : Math.round(Bangle.getHealthStatus("last").bpm) + " bpm",
|
|
||||||
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==") }),
|
|
||||||
show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus("last").bpm); hrmUpdateHandler(); },
|
|
||||||
hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = "--"; },
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}];
|
|
||||||
var bangleItems = items[0].items;
|
|
||||||
|
|
||||||
if (Bangle.getPressure){ // Altimeter may not exist
|
|
||||||
bangleItems.push({ name : "Altitude", get : () => ({
|
|
||||||
text : alt,
|
|
||||||
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAAACAAAGAAAPAAEZgAOwwAPwQAZgYAwAMBgAGBAACDAADGAABv///////wAAAAAAAAAAAAAAAAAAAA==") }),
|
|
||||||
show : function() { deleteInterval(); interval = setInterval(altUpdateHandler, 60000); alt = "--"; altUpdateHandler(); },
|
|
||||||
hide : function() { deleteInterval(); },
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// now load extra data from a third party files
|
|
||||||
require("Storage").list(/clkinfo.js$/).forEach(fn => {
|
|
||||||
items = items.concat(eval(require("Storage").read(fn))());
|
|
||||||
});
|
|
||||||
|
|
||||||
// return it all!
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
// ----clock_info ------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Custom menus
|
|
||||||
var clockItems = {
|
|
||||||
name: null,
|
name: null,
|
||||||
img: null,
|
img: null,
|
||||||
items: [
|
items: [
|
||||||
{ name: "WeekOfYear",
|
{ name: "WeekOfYear",
|
||||||
get: () => ({ text: "Week " + weekOfYear(), img: null}),
|
get: () => ({ text: "Week " + weekOfYear(), img: null}),
|
||||||
show: function() { clockItems.items[0].emit("redraw"); },
|
show: function() { bwItems.items[0].emit("redraw"); },
|
||||||
hide: function () {}
|
hide: function () {}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function weekOfYear() {
|
||||||
// ----agenda_clock_info ------------------------------------------------------
|
var date = new Date();
|
||||||
var agendaItems = {
|
date.setHours(0, 0, 0, 0);
|
||||||
name: "Agenda",
|
// Thursday in current week decides the year.
|
||||||
img: atob("GBiBAf////////85z/AAAPAAAPgAAP////AAAPAAAPAAAPAAAOAAAeAAAeAAAcAAA8AAAoAABgAADP//+P//8PAAAPAAAPgAAf///w=="),
|
date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
|
||||||
items: []
|
// January 4 is always in week 1.
|
||||||
};
|
var week1 = new Date(date.getFullYear(), 0, 4);
|
||||||
|
// Adjust to Thursday in week 1 and count number of weeks from date to week1.
|
||||||
var now = new Date();
|
return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000
|
||||||
var agenda = storage.readJSON("android.calendar.json")
|
- 3 + (week1.getDay() + 6) % 7) / 7);
|
||||||
.filter(ev=>ev.timestamp + ev.durationInSeconds > now/1000)
|
|
||||||
.sort((a,b)=>a.timestamp - b.timestamp);
|
|
||||||
|
|
||||||
agenda.forEach((entry, i) => {
|
|
||||||
|
|
||||||
var title = entry.title.slice(0,14);
|
|
||||||
var date = new Date(entry.timestamp*1000);
|
|
||||||
var dateStr = locale.date(date).replace(/\d\d\d\d/,"");
|
|
||||||
dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : "";
|
|
||||||
|
|
||||||
agendaItems.items.push({
|
|
||||||
name: "agendaEntry-" + i,
|
|
||||||
get: () => ({ text: title + "\n" + dateStr, img: null}),
|
|
||||||
show: function() { agendaItems.items[i].emit("redraw"); },
|
|
||||||
hide: function () {}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
// ----agenda_clock_info ------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----weather_clock_info ------------------------------------------------------
|
|
||||||
var weather = {
|
|
||||||
temp: "?",
|
|
||||||
hum: "?",
|
|
||||||
wind: "?",
|
|
||||||
};
|
|
||||||
|
|
||||||
var weatherJson = storage.readJSON('weather.json');
|
|
||||||
if(weatherJson !== undefined && weatherJson.weather !== undefined){
|
|
||||||
weather = weatherJson.weather;
|
|
||||||
weather.temp = locale.temp(weather.temp-273.15);
|
|
||||||
weather.hum = weather.hum + "%";
|
|
||||||
weather.wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/);
|
|
||||||
weather.wind = Math.round(weather.wind[1]) + "kph";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var weatherItems = {
|
|
||||||
name: "Weather",
|
|
||||||
img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="),
|
|
||||||
items: [
|
|
||||||
{
|
|
||||||
name: "temperature",
|
|
||||||
get: () => ({ text: weather.temp, img: atob("GBiBAf/D//+B//8Y//88//88//88//88//88//8k//8k//8k//8k//8k//8k//4kf/5mf/zDP/yBP/yBP/zDP/5mf/48f/8A///D/w==")}),
|
|
||||||
show: function() { weatherItems.items[0].emit("redraw"); },
|
|
||||||
hide: function () {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "humidity",
|
|
||||||
get: () => ({ text: weather.hum, img: atob("GBiBAf/7///z///x///g///g///Af//Af/3Af/nA//jg//B/v/B/H+A/H8A+D8AeB8AcB4AYA8AYA8AYA+A4A/B4A//4A//8B///Dw==")}),
|
|
||||||
show: function() { weatherItems.items[1].emit("redraw"); },
|
|
||||||
hide: function () {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "wind",
|
|
||||||
get: () => ({ text: weather.wind, img: atob("GBiBAf4f//wP//nn//Pn//Pzg//nAf/meIAOfAAefP///P//+fAAAfAAB////////wAAP4AAH///z///z//nz//nz//zj//wH//8Pw==")}),
|
|
||||||
show: function() { weatherItems.items[2].emit("redraw"); },
|
|
||||||
hide: function () {}
|
|
||||||
},
|
|
||||||
]
|
|
||||||
};
|
|
||||||
// ----weather_clock_info ------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// ----ha_clock_info ------------------------------------------------------
|
|
||||||
var ha = require("ha.lib.js");
|
|
||||||
var triggers = ha.getTriggers();
|
|
||||||
|
|
||||||
var haItems = {
|
|
||||||
name: "Home",
|
|
||||||
img: atob("GBiBAf/////////n///D//+B//8A//48T/wkD/gkD/A8D+AYB8AYA4eZ4QyZMOyZN+fb5+D/B+B+B+A8B+AYB+AYB+AYB+AYB+A8Bw=="),
|
|
||||||
items: [
|
|
||||||
// {
|
|
||||||
// name: "item1",
|
|
||||||
// get: () => ({ text: "Item1", img: atob("GBiBAf/D//+B//8Y//88//88//88//88//88//8k//8k//8k//8k//8k//8k//4kf/5mf/zDP/yBP/yBP/zDP/5mf/48f/8A///D/w==")}),
|
|
||||||
// show: function() { haItems.items[0].emit("redraw"); },
|
|
||||||
// hide: function () {}
|
|
||||||
// },
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
triggers.forEach((trigger, i) => {
|
|
||||||
haItems.items.push({
|
|
||||||
name: "haTrigger-" + i,
|
|
||||||
get: () => ({ text: trigger.display, img: trigger.getIcon()}),
|
|
||||||
show: function() { haItems.items[i].emit("redraw"); },
|
|
||||||
hide: function () {},
|
|
||||||
run: function() {
|
|
||||||
ha.sendTrigger("TRIGGER_BW");
|
|
||||||
ha.sendTrigger(trigger.trigger);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// ----ha_clock_info ------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
// Still missing
|
|
||||||
var timerItems = {};
|
|
||||||
|
|
||||||
|
|
||||||
// Load menu
|
// Load menu
|
||||||
var menu = loadClockInfo();
|
var menu = clock_info.load();
|
||||||
menu = menu.concat(agendaItems);
|
menu = menu.concat(bwItems);
|
||||||
menu = menu.concat(weatherItems);
|
|
||||||
menu = menu.concat(haItems);
|
|
||||||
menu = menu.concat(clockItems);
|
// Ensure that our settings are still in range (e.g. app uninstall). Otherwise reset the position it.
|
||||||
|
if(settings.menuPosX >= menu.length || settings.menuPosY > menu[settings.menuPosX].items.length ){
|
||||||
|
settings.menuPosX = 0;
|
||||||
|
settings.menuPosY = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Set draw functions for each item
|
// Set draw functions for each item
|
||||||
menu.forEach((menuItm, x) => {
|
menu.forEach((menuItm, x) => {
|
||||||
|
|
@ -328,19 +155,6 @@ function isFullscreen(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function weekOfYear() {
|
|
||||||
var date = new Date();
|
|
||||||
date.setHours(0, 0, 0, 0);
|
|
||||||
// Thursday in current week decides the year.
|
|
||||||
date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
|
|
||||||
// January 4 is always in week 1.
|
|
||||||
var week1 = new Date(date.getFullYear(), 0, 4);
|
|
||||||
// Adjust to Thursday in week 1 and count number of weeks from date to week1.
|
|
||||||
return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000
|
|
||||||
- 3 + (week1.getDay() + 6) % 7) / 7);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************
|
/************
|
||||||
* DRAW
|
* DRAW
|
||||||
*/
|
*/
|
||||||
|
|
@ -363,7 +177,7 @@ function drawDate(){
|
||||||
|
|
||||||
// Draw date
|
// Draw date
|
||||||
y = parseInt(y/2)+4;
|
y = parseInt(y/2)+4;
|
||||||
y += isFullscreen() ? 0 : 13;
|
y += isFullscreen() ? 0 : 8;
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
var dateStr = date.getDate();
|
var dateStr = date.getDate();
|
||||||
dateStr = ("0" + dateStr).substr(-2);
|
dateStr = ("0" + dateStr).substr(-2);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "bwclk",
|
"id": "bwclk",
|
||||||
"name": "BW Clock",
|
"name": "BW Clock",
|
||||||
"version": "0.21",
|
"version": "0.22",
|
||||||
"description": "A very minimalistic clock to mainly show date and time.",
|
"description": "A very minimalistic clock to mainly show date and time.",
|
||||||
"readme": "README.md",
|
"readme": "README.md",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
0.01: Release
|
0.01: Release
|
||||||
0.02: Includeas the ha.lib.js library that can be used by other apps or clocks.
|
0.02: Includeas the ha.lib.js library that can be used by other apps or clocks.
|
||||||
|
0.03: Added clkinfo for clocks.
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
(function() {
|
||||||
|
var ha = require("ha.lib.js");
|
||||||
|
var triggers = ha.getTriggers();
|
||||||
|
|
||||||
|
var haItems = {
|
||||||
|
name: "Home",
|
||||||
|
img: atob("GBiBAf/////////n///D//+B//8A//48T/wkD/gkD/A8D+AYB8AYA4eZ4QyZMOyZN+fb5+D/B+B+B+A8B+AYB+AYB+AYB+AYB+A8Bw=="),
|
||||||
|
items: []
|
||||||
|
};
|
||||||
|
|
||||||
|
triggers.forEach((trigger, i) => {
|
||||||
|
haItems.items.push({
|
||||||
|
name: "haTrigger-" + i,
|
||||||
|
get: () => ({ text: trigger.display, img: trigger.getIcon()}),
|
||||||
|
show: function() { haItems.items[i].emit("redraw"); },
|
||||||
|
hide: function () {},
|
||||||
|
run: function() {
|
||||||
|
ha.sendTrigger("TRIGGER_BW");
|
||||||
|
ha.sendTrigger(trigger.trigger);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return haItems;
|
||||||
|
})
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "ha",
|
"id": "ha",
|
||||||
"name": "HomeAssistant",
|
"name": "HomeAssistant",
|
||||||
"version": "0.02",
|
"version": "0.03",
|
||||||
"description": "Integrates your BangleJS into HomeAssistant.",
|
"description": "Integrates your BangleJS into HomeAssistant.",
|
||||||
"icon": "ha.png",
|
"icon": "ha.png",
|
||||||
"type": "app",
|
"type": "app",
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"ha.app.js","url":"ha.app.js"},
|
{"name":"ha.app.js","url":"ha.app.js"},
|
||||||
{"name":"ha.lib.js","url":"ha.lib.js"},
|
{"name":"ha.lib.js","url":"ha.lib.js"},
|
||||||
|
{"name":"ha.clkinfo.js","url":"ha.clkinfo.js"},
|
||||||
{"name":"ha.img","url":"ha.icon.js","evaluate":true}
|
{"name":"ha.img","url":"ha.icon.js","evaluate":true}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,3 +13,4 @@
|
||||||
0.14: Use weather condition code for icon selection
|
0.14: Use weather condition code for icon selection
|
||||||
0.15: Fix widget icon
|
0.15: Fix widget icon
|
||||||
0.16: Don't mark app as clock
|
0.16: Don't mark app as clock
|
||||||
|
0.17: Added clkinfo for clocks.
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
(function() {
|
||||||
|
var weather = {
|
||||||
|
temp: "?",
|
||||||
|
hum: "?",
|
||||||
|
wind: "?",
|
||||||
|
};
|
||||||
|
|
||||||
|
var weatherJson = storage.readJSON('weather.json');
|
||||||
|
if(weatherJson !== undefined && weatherJson.weather !== undefined){
|
||||||
|
weather = weatherJson.weather;
|
||||||
|
weather.temp = locale.temp(weather.temp-273.15);
|
||||||
|
weather.hum = weather.hum + "%";
|
||||||
|
weather.wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/);
|
||||||
|
weather.wind = Math.round(weather.wind[1]) + "kph";
|
||||||
|
}
|
||||||
|
|
||||||
|
var weatherItems = {
|
||||||
|
name: "Weather",
|
||||||
|
img: atob("GBiBAf+///u5//n7//8f/9wHP8gDf/gB//AB/7AH/5AcP/AQH/DwD/uAD84AD/4AA/wAAfAAAfAAAfAAAfgAA/////+bP/+zf/+zfw=="),
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
name: "temperature",
|
||||||
|
get: () => ({ text: weather.temp, img: atob("GBiBAf/D//+B//8Y//88//88//88//88//88//8k//8k//8k//8k//8k//8k//4kf/5mf/zDP/yBP/yBP/zDP/5mf/48f/8A///D/w==")}),
|
||||||
|
show: function() { weatherItems.items[0].emit("redraw"); },
|
||||||
|
hide: function () {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "humidity",
|
||||||
|
get: () => ({ text: weather.hum, img: atob("GBiBAf/7///z///x///g///g///Af//Af/3Af/nA//jg//B/v/B/H+A/H8A+D8AeB8AcB4AYA8AYA8AYA+A4A/B4A//4A//8B///Dw==")}),
|
||||||
|
show: function() { weatherItems.items[1].emit("redraw"); },
|
||||||
|
hide: function () {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "wind",
|
||||||
|
get: () => ({ text: weather.wind, img: atob("GBiBAf4f//wP//nn//Pn//Pzg//nAf/meIAOfAAefP///P//+fAAAfAAB////////wAAP4AAH///z///z//nz//nz//zj//wH//8Pw==")}),
|
||||||
|
show: function() { weatherItems.items[2].emit("redraw"); },
|
||||||
|
hide: function () {}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
return weatherItems;
|
||||||
|
})
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "weather",
|
"id": "weather",
|
||||||
"name": "Weather",
|
"name": "Weather",
|
||||||
"version": "0.16",
|
"version": "0.17",
|
||||||
"description": "Show Gadgetbridge weather report",
|
"description": "Show Gadgetbridge weather report",
|
||||||
"icon": "icon.png",
|
"icon": "icon.png",
|
||||||
"screenshots": [{"url":"screenshot.png"}],
|
"screenshots": [{"url":"screenshot.png"}],
|
||||||
|
|
@ -13,7 +13,8 @@
|
||||||
{"name":"weather.wid.js","url":"widget.js"},
|
{"name":"weather.wid.js","url":"widget.js"},
|
||||||
{"name":"weather","url":"lib.js"},
|
{"name":"weather","url":"lib.js"},
|
||||||
{"name":"weather.img","url":"icon.js","evaluate":true},
|
{"name":"weather.img","url":"icon.js","evaluate":true},
|
||||||
{"name":"weather.settings.js","url":"settings.js"}
|
{"name":"weather.settings.js","url":"settings.js"},
|
||||||
|
{"name":"weather.clkinfo.js","url":"clkinfo.js"}
|
||||||
],
|
],
|
||||||
"data": [{"name":"weather.json"}]
|
"data": [{"name":"weather.json"}]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,57 +37,74 @@ exports.load = function() {
|
||||||
// info used for drawing...
|
// info used for drawing...
|
||||||
var hrm = "--";
|
var hrm = "--";
|
||||||
var alt = "--";
|
var alt = "--";
|
||||||
|
var interval = null;
|
||||||
// callbacks (needed for easy removal of listeners)
|
// callbacks (needed for easy removal of listeners)
|
||||||
function batteryUpdateHandler() { items[0].emit("redraw"); }
|
function batteryUpdateHandler() { bangleItems[0].emit("redraw"); }
|
||||||
function stepUpdateHandler() { items[1].emit("redraw"); }
|
function stepUpdateHandler() { bangleItems[1].emit("redraw"); }
|
||||||
function hrmUpdateHandler() { items[2].emit("redraw"); }
|
function hrmUpdateHandler() { bangleItems[2].emit("redraw"); }
|
||||||
function altUpdateHandler() {
|
function altUpdateHandler() {
|
||||||
Bangle.getPressure().then(data=>{
|
Bangle.getPressure().then(data=>{
|
||||||
if (!data) return;
|
if (!data) return;
|
||||||
alt = Math.round(data.altitude) + "m";
|
alt = Math.round(data.altitude) + "m";
|
||||||
items[3].emit("redraw");
|
bangleItems[3].emit("redraw");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function deleteInterval(inter){
|
||||||
|
if(inter){
|
||||||
|
clearInterval(inter);
|
||||||
|
}
|
||||||
|
delete inter;
|
||||||
|
}
|
||||||
// actual items
|
// actual items
|
||||||
var items = [
|
var items = [{
|
||||||
|
name: "Bangle",
|
||||||
|
img: atob("GBiBAf8B//4B//4B//4B//4A//x4//n+f/P/P+fPn+fPn+fP3+/Px+/Px+fn3+fzn+f/n/P/P/n+f/x4//4A//4B//4B//4B//8B/w=="),
|
||||||
|
items: [
|
||||||
{ name : "Battery",
|
{ name : "Battery",
|
||||||
get : () => ({
|
get : () => ({
|
||||||
text : E.getBattery() + "%",
|
text : E.getBattery() + "%",
|
||||||
img : atob(Bangle.isCharging() ? "GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==" : "GBiBAAAAAAAAAAAAAAAAAAAAAD//+P///IAAAr//Ar//Ar//A7//A7//A7//A7//Ar//AoAAAv///D//+AAAAAAAAAAAAAAAAAAAAA==") }),
|
img : atob(Bangle.isCharging() ? "GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==" : "GBiBAAAAAAAAAAAAAAAAAAAAAD//+P///IAAAr//Ar//Ar//A7//A7//A7//A7//Ar//AoAAAv///D//+AAAAAAAAAAAAAAAAAAAAA==") }),
|
||||||
show : function() {
|
show : function() {
|
||||||
this.interval = setInterval(()=>this.emit('redraw'), 60000);
|
deleteInterval(interval);
|
||||||
|
interval = setInterval(()=>this.emit('redraw'), 60000);
|
||||||
Bangle.on("charging", batteryUpdateHandler);
|
Bangle.on("charging", batteryUpdateHandler);
|
||||||
|
batteryUpdateHandler();
|
||||||
},
|
},
|
||||||
hide : function() {
|
hide : function() {
|
||||||
clearInterval(this.interval);
|
deleteInterval(interval);
|
||||||
delete this.interval;
|
|
||||||
Bangle.removeListener("charging", batteryUpdateHandler);
|
Bangle.removeListener("charging", batteryUpdateHandler);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ name : "Steps", get : () => ({
|
{ name : "Steps", get : () => ({
|
||||||
text : Bangle.getHealthStatus("day").steps,
|
text : Bangle.getHealthStatus("day").steps,
|
||||||
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); },
|
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
|
||||||
hide : function() { Bangle.removeListener("step", stepUpdateHandler); },
|
hide : function() { Bangle.removeListener("step", stepUpdateHandler); },
|
||||||
},
|
},
|
||||||
{ name : "HRM", get : () => ({
|
{ name : "HRM", get : () => ({
|
||||||
text : Math.round(Bangle.getHealthStatus("last").bpm) + " bpm",
|
text : Math.round(Bangle.getHealthStatus("last").bpm) + " bpm",
|
||||||
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==") }),
|
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==") }),
|
||||||
show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus("last").bpm); },
|
show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus("last").bpm); hrmUpdateHandler(); },
|
||||||
hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = "--"; },
|
hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = "--"; },
|
||||||
}
|
}
|
||||||
];
|
],
|
||||||
if (Bangle.getPressure) // Altimeter may not exist
|
}];
|
||||||
items.push({ name : "Altitude", get : () => ({
|
var bangleItems = items[0].items;
|
||||||
|
|
||||||
|
if (Bangle.getPressure){ // Altimeter may not exist
|
||||||
|
bangleItems.push({ name : "Altitude", get : () => ({
|
||||||
text : alt,
|
text : alt,
|
||||||
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAAACAAAGAAAPAAEZgAOwwAPwQAZgYAwAMBgAGBAACDAADGAABv///////wAAAAAAAAAAAAAAAAAAAA==") }),
|
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAAACAAAGAAAPAAEZgAOwwAPwQAZgYAwAMBgAGBAACDAADGAABv///////wAAAAAAAAAAAAAAAAAAAA==") }),
|
||||||
show : function() { this.interval = setInterval(altUpdateHandler, 60000); alt = "--"; altUpdateHandler(); },
|
show : function() { deleteInterval(interval); interval = setInterval(altUpdateHandler, 60000); alt = "--"; altUpdateHandler(); },
|
||||||
hide : function() { clearInterval(this.interval); delete this.interval; },
|
hide : function() { deleteInterval(interval); },
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// now load extra data from a third party files
|
// now load extra data from a third party files
|
||||||
require("Storage").list(/clkinfo.js$/).forEach(fn => {
|
require("Storage").list(/clkinfo.js$/).forEach(fn => {
|
||||||
items = items.concat(eval(require("Storage").read(fn))());
|
items = items.concat(eval(require("Storage").read(fn))());
|
||||||
});
|
});
|
||||||
|
|
||||||
// return it all!
|
// return it all!
|
||||||
return items;
|
return items;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue