1
0
Fork 0
BangleApps/apps/weather/clkinfo.js

103 lines
3.9 KiB
JavaScript

(function() {
var weather;
var weatherLib = require("weather");
function updateWeather() {
weather = weatherLib.get();
if(weather){
weather.temp = require("locale").temp(weather.temp-273.15);
weather.hum = weather.hum + "%";
weather.wind = require("locale").speed(weather.wind).match(/^(\D*\d*)(.*)$/);
weather.wind = Math.round(weather.wind[1]) + "kph";
} else {
weather = {
temp: "?",
hum: "?",
wind: "?",
txt: "?",
};
}
}
updateWeather();
function weatherIcon(code) {
var ovr = Graphics.createArrayBuffer(24,24,1,{msb:true});
weatherLib.drawIcon({code:code},12,12,12,ovr,true);
var img = ovr.asImage();
img.transparent = 0;
return img;
}
function _updater() {
updateWeather();
this.emit("redraw");
}
//FIXME ranges are somehow arbitrary
var weatherItems = {
name: "Weather",
img: atob("GBiBAABAAARGAAYEAADgACP4wDf8gAf+AA/+AE/4AG/jwA/v4A8P8AR/8DH/8AH//AP//g///g///g///gf//AAAAABkwABMgABMgA=="),
items: [
{
//TODO get this configurable
name: "conditionWithData",
hasRange : true,
get: () => ({ text: weather.temp, img: weatherIcon(weather.code),
color: weatherLib.getColor(weather.code),
v: parseInt(weather.temp), min: -30, max: 55}),
show: function() {
this.updater = _updater.bind(this);
weatherLib.on("update", this.updater);
},
hide: function () { weatherLib.removeListener("update", this.updater); }
},
{
name: "condition",
get: () => ({ text: weather.txt, img: weatherIcon(weather.code),
color: weatherLib.getColor(weather.code),
v: weather.code}),
show: function() {
this.updater = _updater.bind(this);
weatherLib.on("update", this.updater);
},
hide: function () { weatherLib.removeListener("update", this.updater); }
},
{
name: "temperature",
hasRange : true,
get: () => ({ text: weather.temp, img: atob("GBiBAAA8AAB+AADnAADDAADDAADDAADDAADDAADbAADbAADbAADbAADbAADbAAHbgAGZgAM8wAN+wAN+wAM8wAGZgAHDgAD/AAA8AA=="),
v: parseInt(weather.temp), min: -30, max: 55}),
show: function() {
this.updater = _updater.bind(this);
weatherLib.on("update", this.updater);
},
hide: function () { weatherLib.removeListener("update", this.updater); }
},
{
name: "humidity",
hasRange : true,
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=="),
v: parseInt(weather.hum), min: 0, max: 100}),
show: function() {
this.updater = _updater.bind(this);
weatherLib.on("update", this.updater);
},
hide: function () { weatherLib.removeListener("update", this.updater); }
},
{
name: "wind",
hasRange : true,
get: () => ({ text: weather.wind, img: atob("GBiBAAHgAAPwAAYYAAwYAAwMfAAY/gAZh3/xg//hgwAAAwAABg///g//+AAAAAAAAP//wH//4AAAMAAAMAAYMAAYMAAMcAAP4AADwA=="),
v: parseInt(weather.wind), min: 0, max: 118}),
show: function() {
this.updater = _updater.bind(this);
weatherLib.on("update", this.updater);
},
hide: function () { weatherLib.removeListener("update", this.updater); }
},
]
};
return weatherItems;
})