Merge branch 'espruino:master' into master
commit
beac243db6
|
|
@ -845,7 +845,7 @@
|
||||||
{
|
{
|
||||||
"id": "weather",
|
"id": "weather",
|
||||||
"name": "Weather",
|
"name": "Weather",
|
||||||
"version": "0.13",
|
"version": "0.14",
|
||||||
"description": "Show Gadgetbridge weather report",
|
"description": "Show Gadgetbridge weather report",
|
||||||
"icon": "icon.png",
|
"icon": "icon.png",
|
||||||
"screenshots": [{"url":"screenshot.png"}],
|
"screenshots": [{"url":"screenshot.png"}],
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ ${track.map(pt=>` <gx:value>${pt.distance}</gx:value>\n`).join("")}
|
||||||
|
|
||||||
function saveGPX(track, title) {
|
function saveGPX(track, title) {
|
||||||
var gpx = `<?xml version="1.0" encoding="UTF-8"?>
|
var gpx = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<gpx creator="Bangle.js" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
|
<gpx creator="Bangle.js" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
|
||||||
<metadata>
|
<metadata>
|
||||||
<time>${track[0].date.toISOString()}</time>
|
<time>${track[0].date.toISOString()}</time>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ function saveKML(track,title) {
|
||||||
<Schema id="schema">
|
<Schema id="schema">
|
||||||
${track[0].Heartrate!==undefined ? `<gx:SimpleArrayField name="heartrate" type="int">
|
${track[0].Heartrate!==undefined ? `<gx:SimpleArrayField name="heartrate" type="int">
|
||||||
<displayName>Heart Rate</displayName>
|
<displayName>Heart Rate</displayName>
|
||||||
</gx:SimpleArrayField>`:``}
|
</gx:SimpleArrayField>`:``}
|
||||||
${track[0].Steps!==undefined ? `<gx:SimpleArrayField name="steps" type="int">
|
${track[0].Steps!==undefined ? `<gx:SimpleArrayField name="steps" type="int">
|
||||||
<displayName>Step Count</displayName>
|
<displayName>Step Count</displayName>
|
||||||
</gx:SimpleArrayField>`:``}
|
</gx:SimpleArrayField>`:``}
|
||||||
|
|
@ -25,7 +25,7 @@ ${track[0].Core!==undefined ? `<gx:SimpleArrayField name="core" type="int">
|
||||||
</gx:SimpleArrayField>`:``}
|
</gx:SimpleArrayField>`:``}
|
||||||
${track[0].Skin!==undefined ? `<gx:SimpleArrayField name="skin" type="int">
|
${track[0].Skin!==undefined ? `<gx:SimpleArrayField name="skin" type="int">
|
||||||
<displayName>Skin Temp</displayName>
|
<displayName>Skin Temp</displayName>
|
||||||
</gx:SimpleArrayField>`:``}
|
</gx:SimpleArrayField>`:``}
|
||||||
|
|
||||||
</Schema>
|
</Schema>
|
||||||
<Folder>
|
<Folder>
|
||||||
|
|
@ -49,7 +49,7 @@ ${track.map(pt=>` <gx:value>${0|pt.Core}</gx:value>\n`).join("")}
|
||||||
</gx:SimpleArrayData>`:``}
|
</gx:SimpleArrayData>`:``}
|
||||||
${track[0].Skin!==undefined ? `<gx:SimpleArrayData name="skin">
|
${track[0].Skin!==undefined ? `<gx:SimpleArrayData name="skin">
|
||||||
${track.map(pt=>` <gx:value>${0|pt.Skin}</gx:value>\n`).join("")}
|
${track.map(pt=>` <gx:value>${0|pt.Skin}</gx:value>\n`).join("")}
|
||||||
</gx:SimpleArrayData>`:``}
|
</gx:SimpleArrayData>`:``}
|
||||||
</SchemaData>
|
</SchemaData>
|
||||||
</ExtendedData>
|
</ExtendedData>
|
||||||
</gx:Track>
|
</gx:Track>
|
||||||
|
|
@ -72,8 +72,7 @@ ${track.map(pt=>` <gx:value>${0|pt.Skin}</gx:value>\n`).join("")}
|
||||||
|
|
||||||
function saveGPX(track, title) {
|
function saveGPX(track, title) {
|
||||||
var gpx = `<?xml version="1.0" encoding="UTF-8"?>
|
var gpx = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<gpx creator="Bangle.js" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
|
<gpx creator="Bangle.js" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
|
||||||
<gpx creator="Bangle.js" version="1.1">
|
|
||||||
<metadata>
|
<metadata>
|
||||||
<time>${track[0].Time.toISOString()}</time>
|
<time>${track[0].Time.toISOString()}</time>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|
|
||||||
|
|
@ -10,3 +10,4 @@
|
||||||
0.11: Bangle.js 2 support
|
0.11: Bangle.js 2 support
|
||||||
0.12: Allow hiding the widget
|
0.12: Allow hiding the widget
|
||||||
0.13: Tweak Bangle.js 2 light theme colors
|
0.13: Tweak Bangle.js 2 light theme colors
|
||||||
|
0.14: Use weather condition code for icon selection
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [
|
||||||
{filly: 1},
|
{filly: 1},
|
||||||
{type: "h", filly: 0, c: [
|
{type: "h", filly: 0, c: [
|
||||||
{type: "custom", width: g.getWidth()/2, height: g.getWidth()/2, valign: -1, txt: "unknown", id: "icon",
|
{type: "custom", width: g.getWidth()/2, height: g.getWidth()/2, valign: -1, txt: "unknown", id: "icon",
|
||||||
render: l => weather.drawIcon(l.txt, l.x+l.w/2, l.y+l.h/2, l.w/2-5)},
|
render: l => weather.drawIcon(l, l.x+l.w/2, l.y+l.h/2, l.w/2-5)},
|
||||||
{type: "v", fillx: 1, c: [
|
{type: "v", fillx: 1, c: [
|
||||||
{type: "h", pad: 2, c: [
|
{type: "h", pad: 2, c: [
|
||||||
{type: "txt", font: "18%", id: "temp", label: "000"},
|
{type: "txt", font: "18%", id: "temp", label: "000"},
|
||||||
|
|
@ -47,6 +47,7 @@ function formatDuration(millis) {
|
||||||
|
|
||||||
function draw() {
|
function draw() {
|
||||||
layout.icon.txt = current.txt;
|
layout.icon.txt = current.txt;
|
||||||
|
layout.icon.code = current.code;
|
||||||
const temp = locale.temp(current.temp-273.15).match(/^(\D*\d*)(.*)$/);
|
const temp = locale.temp(current.temp-273.15).match(/^(\D*\d*)(.*)$/);
|
||||||
layout.temp.label = temp[1];
|
layout.temp.label = temp[1];
|
||||||
layout.tempUnit.label = temp[2];
|
layout.tempUnit.label = temp[2];
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ function scheduleExpiry(json) {
|
||||||
|
|
||||||
function update(weatherEvent) {
|
function update(weatherEvent) {
|
||||||
let json = storage.readJSON('weather.json')||{};
|
let json = storage.readJSON('weather.json')||{};
|
||||||
|
|
||||||
if (weatherEvent) {
|
if (weatherEvent) {
|
||||||
let weather = weatherEvent.clone();
|
let weather = weatherEvent.clone();
|
||||||
delete weather.t;
|
delete weather.t;
|
||||||
|
|
@ -55,7 +55,7 @@ scheduleExpiry(storage.readJSON('weather.json')||{});
|
||||||
|
|
||||||
exports.drawIcon = function(cond, x, y, r) {
|
exports.drawIcon = function(cond, x, y, r) {
|
||||||
var palette;
|
var palette;
|
||||||
|
|
||||||
if (B2) {
|
if (B2) {
|
||||||
if (g.theme.dark) {
|
if (g.theme.dark) {
|
||||||
palette = {
|
palette = {
|
||||||
|
|
@ -101,7 +101,7 @@ exports.drawIcon = function(cond, x, y, r) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawSun(x, y, r) {
|
function drawSun(x, y, r) {
|
||||||
g.setColor(palette.sun);
|
g.setColor(palette.sun);
|
||||||
g.fillCircle(x, y, r);
|
g.fillCircle(x, y, r);
|
||||||
|
|
@ -280,5 +280,44 @@ exports.drawIcon = function(cond, x, y, r) {
|
||||||
return drawUnknown;
|
return drawUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
chooseIcon(cond)(x, y, r);
|
/*
|
||||||
|
* Choose weather icon to display based on weather conditition code
|
||||||
|
* https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2
|
||||||
|
*/
|
||||||
|
function chooseIconByCode(code) {
|
||||||
|
const codeGroup = Math.round(code / 100);
|
||||||
|
switch (codeGroup) {
|
||||||
|
case 2: return drawThunderstorm;
|
||||||
|
case 3: return drawRain;
|
||||||
|
case 5:
|
||||||
|
switch (code) {
|
||||||
|
case 511: return drawSnow;
|
||||||
|
case 520: return drawShowerRain;
|
||||||
|
case 521: return drawShowerRain;
|
||||||
|
case 522: return drawShowerRain;
|
||||||
|
case 531: return drawShowerRain;
|
||||||
|
default: return drawRain;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6: return drawSnow;
|
||||||
|
case 7: return drawMist;
|
||||||
|
case 8:
|
||||||
|
switch (code) {
|
||||||
|
case 800: return drawSun;
|
||||||
|
case 801: return drawFewClouds;
|
||||||
|
case 802: return drawCloud;
|
||||||
|
default: return drawBrokenClouds;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: return drawUnknown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cond.code && cond.code > 0) {
|
||||||
|
chooseIconByCode(cond.code)(x, y, r);
|
||||||
|
} else {
|
||||||
|
chooseIcon(cond.txt)(x, y, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue