From a746510f0bf1bd4b12fba8fe2239c45f1c684f82 Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 14 Jan 2022 13:05:17 +0100 Subject: [PATCH 01/34] Included altitude. --- apps/lcars/lcars.app.js | 40 +++++++++++++++++++++++++----------- apps/lcars/lcars.settings.js | 8 ++++---- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 3b9745a7a..e3a9d143b 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -116,11 +116,27 @@ function queueDraw() { } +function printRow(text, value, y, c){ + g.setColor(c); + g.fillRect(79, y-2, 85 ,y+18); + + g.setFontAlign(0,-1,0); + g.drawString(value, 110, y); + + g.setColor(c); + g.setFontAlign(-1,-1,0); + g.fillRect(133, y-2, 165 ,y+18); + g.fillCircle(161, y+8, 10); + g.setColor(cBlack); + g.drawString(text, 135, y); +} + function printData(key, y, c){ g.setFontAlign(-1,-1,0); key = key.toUpperCase() var text = key; var value = "ERR"; + var should_print= true; if(key == "STEPS"){ text = "STEP"; @@ -145,22 +161,22 @@ function printData(key, y, c){ var weather = getWeather(); value = weather.hum + "%"; + } else if (key == "ALTITUDE"){ + should_print= false; + text = "ALT"; + Bangle.getPressure().then(function(data){ + value = data.altitude.toFixed(0); + printRow(text, value, y, c); + }) + } else if(key == "CORET"){ value = locale.temp(parseInt(E.getTemperature())); } - g.setColor(c); - g.fillRect(79, y-2, 85 ,y+18); - - g.setFontAlign(0,-1,0); - g.drawString(value, 110, y); - - g.setColor(c); - g.setFontAlign(-1,-1,0); - g.fillRect(133, y-2, 165 ,y+18); - g.fillCircle(161, y+8, 10); - g.setColor(cBlack); - g.drawString(text, 135, y); + // Print for all datapoints that are not async + if(should_print){ + printRow(text, value, y, c); + } } function drawHorizontalBgLine(color, x1, x2, y, h){ diff --git a/apps/lcars/lcars.settings.js b/apps/lcars/lcars.settings.js index ba630799a..076dea4d1 100644 --- a/apps/lcars/lcars.settings.js +++ b/apps/lcars/lcars.settings.js @@ -18,14 +18,14 @@ storage.write(SETTINGS_FILE, settings) } - var data_options = ["Steps", "Battery", "VREF", "HRM", "Temp", "Humidity", "CoreT"]; + var data_options = ["Steps", "Battery", "VREF", "HRM", "Temp", "Humidity", "Altitude", "CoreT"]; E.showMenu({ '': { 'title': 'LCARS Clock' }, '< Back': back, 'Row 1': { value: 0 | data_options.indexOf(settings.dataRow1), - min: 0, max: 6, + min: 0, max: 7, format: v => data_options[v], onchange: v => { settings.dataRow1 = data_options[v]; @@ -34,7 +34,7 @@ }, 'Row 2': { value: 0 | data_options.indexOf(settings.dataRow2), - min: 0, max: 6, + min: 0, max: 7, format: v => data_options[v], onchange: v => { settings.dataRow2 = data_options[v]; @@ -43,7 +43,7 @@ }, 'Row 3': { value: 0 | data_options.indexOf(settings.dataRow3), - min: 0, max: 6, + min: 0, max: 7, format: v => data_options[v], onchange: v => { settings.dataRow3 = data_options[v]; From ebb35f75aa4fe759096338bab6735509d58860f1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 14 Jan 2022 13:13:49 +0100 Subject: [PATCH 02/34] Stability improvement for alt. --- apps/lcars/lcars.app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index e3a9d143b..771a3e08a 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -165,8 +165,12 @@ function printData(key, y, c){ should_print= false; text = "ALT"; Bangle.getPressure().then(function(data){ - value = data.altitude.toFixed(0); - printRow(text, value, y, c); + if(data && data.altitude){ + value = data.altitude.toFixed(0); + printRow(text, value, y, c); + } else { + printRow(text, "-", y, c); + } }) } else if(key == "CORET"){ From ae68361bd49e9eeb092401f646bc1248b8a14258 Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 14 Jan 2022 14:29:31 +0100 Subject: [PATCH 03/34] Stability improvements for data --- apps/lcars/lcars.app.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 771a3e08a..6e2768998 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -131,11 +131,23 @@ function printRow(text, value, y, c){ g.drawString(text, 135, y); } + function printData(key, y, c){ + try{ + _printData(key, y, c); + } catch(ex){ + var text = key.toUpperCase(); + var value = "ERR-2"; + printRow(text, value, y, c); + } +} + + +function _printData(key, y, c){ g.setFontAlign(-1,-1,0); key = key.toUpperCase() var text = key; - var value = "ERR"; + var value = "ERR-1"; var should_print= true; if(key == "STEPS"){ @@ -164,12 +176,13 @@ function printData(key, y, c){ } else if (key == "ALTITUDE"){ should_print= false; text = "ALT"; + + // Immediately print something - avoid that its empty + printRow(text, "", y, c); Bangle.getPressure().then(function(data){ if(data && data.altitude){ value = data.altitude.toFixed(0); printRow(text, value, y, c); - } else { - printRow(text, "-", y, c); } }) From eb4279d2cee43c1d3261458a64882e4c23260480 Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 14 Jan 2022 14:34:46 +0100 Subject: [PATCH 04/34] Better error handling --- apps/lcars/lcars.app.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 6e2768998..0bd6ced11 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -136,9 +136,7 @@ function printData(key, y, c){ try{ _printData(key, y, c); } catch(ex){ - var text = key.toUpperCase(); - var value = "ERR-2"; - printRow(text, value, y, c); + // Show last error - next try hopefully works. } } @@ -147,7 +145,7 @@ function _printData(key, y, c){ g.setFontAlign(-1,-1,0); key = key.toUpperCase() var text = key; - var value = "ERR-1"; + var value = "ERR"; var should_print= true; if(key == "STEPS"){ From 100457a56f3cef8a9ece0702b98315c5b7626a16 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 15 Jan 2022 14:42:33 +0100 Subject: [PATCH 05/34] Minor improvements - use bpm via build in function getHealthStatus --- apps/lcars/lcars.app.js | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 0bd6ced11..ac043a432 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -26,10 +26,8 @@ let cGrey = "#424242"; * Global lcars variables */ let lcarsViewPos = 0; -let drag; -let hrmValue = 0; +// let hrmValue = 0; var plotMonth = false; -var disableInfoUpdate = true; // When gadgetbridge connects, step infos cannot be loaded /* * Requirements and globals @@ -132,16 +130,17 @@ function printRow(text, value, y, c){ } -function printData(key, y, c){ +function drawData(key, y, c){ try{ - _printData(key, y, c); + _drawData(key, y, c); } catch(ex){ // Show last error - next try hopefully works. } } -function _printData(key, y, c){ +function _drawData(key, y, c){ + g.setFontAntonioMedium(); g.setFontAlign(-1,-1,0); key = key.toUpperCase() var text = key; @@ -160,7 +159,7 @@ function _printData(key, y, c){ value = E.getAnalogVRef().toFixed(2) + "V"; } else if(key == "HRM"){ - value = hrmValue; + value = Bangle.getHealthStatus("day").bpm.toFixed(0); } else if (key == "TEMP"){ var weather = getWeather(); @@ -169,7 +168,7 @@ function _printData(key, y, c){ } else if (key == "HUMIDITY"){ text = "HUM"; var weather = getWeather(); - value = weather.hum + "%"; + value = weather.hum; } else if (key == "ALTITUDE"){ should_print= false; @@ -304,9 +303,9 @@ function drawPosition0(){ // Draw data g.setFontAlign(-1, -1, 0); g.setColor(cWhite); - printData(settings.dataRow1, 97, cOrange); - printData(settings.dataRow2, 122, cPurple); - printData(settings.dataRow3, 147, cBlue); + drawData(settings.dataRow1, 97, cOrange); + drawData(settings.dataRow2, 122, cPurple); + drawData(settings.dataRow3, 147, cBlue); // Draw state drawState(); @@ -478,6 +477,7 @@ function getWeather(){ }; } else { weather.temp = locale.temp(parseInt(weather.temp-273.15)) + weather.hum = weather.hum + "%"; } return weather; @@ -550,10 +550,6 @@ Bangle.on('charging',function(charging) { drawState(); }); -Bangle.on('HRM', function (hrm) { - hrmValue = hrm.bpm; -}); - function increaseAlarm(){ if(isAlarmEnabled()){ From 75ff63338f7d247adda30f1019aa1836c1938651 Mon Sep 17 00:00:00 2001 From: Kendell R Date: Sat, 15 Jan 2022 15:33:19 -0800 Subject: [PATCH 06/34] Unify launcher for bangle.js 2 and 1 --- apps/launch/{app-bangle2.js => app.js} | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) rename apps/launch/{app-bangle2.js => app.js} (90%) diff --git a/apps/launch/app-bangle2.js b/apps/launch/app.js similarity index 90% rename from apps/launch/app-bangle2.js rename to apps/launch/app.js index 156eecdf4..42aba1bb9 100644 --- a/apps/launch/app-bangle2.js +++ b/apps/launch/app.js @@ -63,8 +63,11 @@ E.showScroller({ } }); -// pressing button goes back -setWatch(_=>load(), BTN1, {edge:"falling"}); +// on bangle.js 2, the screen is used for navigating, so the single button goes back +// on bangle.js 1, the buttons are used for navigating +if (process.env.HWVERSION==2) { + setWatch(_=>load(), BTN1, {edge:"falling"}); +} // 10s of inactivity goes back to clock Bangle.setLocked(false); // unlock initially From 1affe5f4d4658e0ed502b7d5fcab22fcd68e917d Mon Sep 17 00:00:00 2001 From: Kendell R Date: Sat, 15 Jan 2022 15:34:17 -0800 Subject: [PATCH 07/34] Delete app-bangle1.js --- apps/launch/app-bangle1.js | 75 -------------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 apps/launch/app-bangle1.js diff --git a/apps/launch/app-bangle1.js b/apps/launch/app-bangle1.js deleted file mode 100644 index f779f5de4..000000000 --- a/apps/launch/app-bangle1.js +++ /dev/null @@ -1,75 +0,0 @@ -var s = require("Storage"); -var apps = s.list(/\.info$/).map(app=>{var a=s.readJSON(app,1);return a&&{name:a.name,type:a.type,icon:a.icon,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="clock" || !app.type)); -apps.sort((a,b)=>{ - var n=(0|a.sortorder)-(0|b.sortorder); - if (n) return n; // do sortorder first - if (a.nameb.name) return 1; - return 0; -}); -var selected = 0; -var menuScroll = 0; -var menuShowing = false; - -function drawMenu() { - g.reset().setFont("6x8",2).setFontAlign(-1,0); - var w = g.getWidth(); - var h = g.getHeight(); - var m = w/2; - var n = Math.floor((h-48)/64); - if (selected>=n+menuScroll) menuScroll = 1+selected-n; - if (selectedn+menuScroll) ? g.theme.fg : g.theme.bg); - g.fillPoly([m,h-7,m-14,h-21,m+14,h-21]); - // draw - g.setColor(g.theme.fg); - for (var i=0;i{ - if (dir) { - selected += dir; - if (selected<0) selected = apps.length-1; - if (selected>=apps.length) selected = 0; - drawMenu(); - } else { - if (!apps[selected].src) return; - if (require("Storage").read(apps[selected].src)===undefined) { - E.showMessage("App Source\nNot found"); - setTimeout(drawMenu, 2000); - } else { - E.showMessage("Loading..."); - load(apps[selected].src); - } - } -}); -Bangle.loadWidgets(); -Bangle.drawWidgets(); -// 10s of inactivity goes back to clock -if (Bangle.setLocked) Bangle.setLocked(false); // unlock initially -var lockTimeout; -Bangle.on('lock', locked => { - if (lockTimeout) clearTimeout(lockTimeout); - lockTimeout = undefined; - if (locked) - lockTimeout = setTimeout(_=>load(), 10000); -}); From 68e1f94e4a998ee353d0580c0c3a53adbda293e6 Mon Sep 17 00:00:00 2001 From: Kendell R Date: Sat, 15 Jan 2022 15:35:10 -0800 Subject: [PATCH 08/34] Update ChangeLog --- apps/launch/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/launch/ChangeLog b/apps/launch/ChangeLog index 0b2f134ad..ceb0177da 100644 --- a/apps/launch/ChangeLog +++ b/apps/launch/ChangeLog @@ -9,3 +9,4 @@ 0.09: Bangle.js 2 - pressing the button goes back to clock (fix #971) After 10s of being locked, the launcher goes back to the clock screen 0.10: added in selectable font in settings including scalable vector font +0.11: Merge Bangle.js 1 and 2 launchers, again From 34f1826007a5dcb423e2662902d527919e033d43 Mon Sep 17 00:00:00 2001 From: Kendell R Date: Sat, 15 Jan 2022 15:36:26 -0800 Subject: [PATCH 09/34] Update apps.json --- apps.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/apps.json b/apps.json index 14e12c164..dd2cae075 100644 --- a/apps.json +++ b/apps.json @@ -170,16 +170,15 @@ "id": "launch", "name": "Launcher", "shortName": "Launcher", - "version": "0.10", + "version": "0.11", "description": "This is needed to display a menu allowing you to choose your own applications. You can replace this with a customised launcher.", "icon": "app.png", "type": "launch", "tags": "tool,system,launcher", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ - {"name":"launch.app.js","url":"app-bangle1.js","supports":["BANGLEJS"]}, - {"name":"launch.app.js","url":"app-bangle2.js","supports":["BANGLEJS2"]}, - {"name":"launch.settings.js","url":"settings.js","supports":["BANGLEJS2"]} + {"name":"launch.app.js","url":"app.js"}, + {"name":"launch.settings.js","url":"settings.js"} ], "data": [{"name":"launch.json"}], "sortorder": -10 From 7b1624a18ed4b2a6c241c21546a451e7a94c0d20 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 16 Jan 2022 11:41:28 +0100 Subject: [PATCH 10/34] Use math.round to get precise values. --- apps/lcars/lcars.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index ac043a432..4ff6d37d6 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -159,7 +159,7 @@ function _drawData(key, y, c){ value = E.getAnalogVRef().toFixed(2) + "V"; } else if(key == "HRM"){ - value = Bangle.getHealthStatus("day").bpm.toFixed(0); + value = Math.round(Bangle.getHealthStatus("day").bpm); } else if (key == "TEMP"){ var weather = getWeather(); @@ -178,7 +178,7 @@ function _drawData(key, y, c){ printRow(text, "", y, c); Bangle.getPressure().then(function(data){ if(data && data.altitude){ - value = data.altitude.toFixed(0); + value = Math.round(data.altitude); printRow(text, value, y, c); } }) @@ -476,7 +476,7 @@ function getWeather(){ wrose: "-" }; } else { - weather.temp = locale.temp(parseInt(weather.temp-273.15)) + weather.temp = locale.temp(Math.round(weather.temp-273.15)) weather.hum = weather.hum + "%"; } From 838bae3dedcfa03239df0104bbf888f307d5e858 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 16 Jan 2022 11:43:13 +0100 Subject: [PATCH 11/34] Print row can be assync. Therefore we set the font there. --- apps/lcars/lcars.app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 4ff6d37d6..2b9976a1a 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -115,6 +115,8 @@ function queueDraw() { function printRow(text, value, y, c){ + g.setFontAntonioMedium(); + g.setFontAlign(-1,-1,0); g.setColor(c); g.fillRect(79, y-2, 85 ,y+18); @@ -140,8 +142,6 @@ function drawData(key, y, c){ function _drawData(key, y, c){ - g.setFontAntonioMedium(); - g.setFontAlign(-1,-1,0); key = key.toUpperCase() var text = key; var value = "ERR"; From dec56414c81ff2ccf116e1fa8796ed7ff860db0e Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 16 Jan 2022 11:44:48 +0100 Subject: [PATCH 12/34] Added description to printRow --- apps/lcars/lcars.app.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 2b9976a1a..81a501481 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -113,7 +113,11 @@ function queueDraw() { }, 60000 - (Date.now() % 60000)); } - +/** + * This function plots a data row in LCARS style. + * Note: It can be called async and therefore, the text alignment and + * font is set each time the function is called. + */ function printRow(text, value, y, c){ g.setFontAntonioMedium(); g.setFontAlign(-1,-1,0); From f03c566ee28e9b66587c6704dc3bd1fa0e498ce9 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Mon, 17 Jan 2022 16:38:44 +0100 Subject: [PATCH 13/34] Update gps-info.js Show satellites "in view" separated by GNS-system --- apps/gpsinfo/gps-info.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index f4521f265..d26e1575c 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -16,9 +16,8 @@ var lastFix = { time: 0, satellites: 0 }; -var SATinView = 0; -var nofBD = 0; -var nofGP = 0; +var SATinView = 0, lastSATinView = -1, nofGP = 0, nofBD = 0, nofGL = 0; +const leaveNofixLayout = 1; // 0 = stay on initial screen for debugging (default = 1) var listenerGPSraw = 0; function formatTime(now) { @@ -63,7 +62,7 @@ function getMaidenHead(param1,param2){ function onGPS(fix) { if (lastFix.fix != fix.fix) { // if fix is different, change the layout - if (fix.fix) { + if (fix.fix && leaveNofixLayout) { layout = new Layout( { type:"v", c: [ {type:"txt", font:"6x8:2", label:"GPS Info" }, @@ -92,11 +91,11 @@ function onGPS(fix) { g.clearRect(0,24,g.getWidth(),g.getHeight()); layout.render(); } - //lastFix = fix; - if (fix.fix) { + if (fix.fix && leaveNofixLayout) { if (listenerGPSraw == 1) { Bangle.removeListener('GPS-raw', onGPSraw); listenerGPSraw = 0; + lastSATinView = -1; } var locale = require("locale"); var satellites = fix.satellites; @@ -115,27 +114,31 @@ function onGPS(fix) { layout.sat.label = fix.satellites; layout.render(layout.sat); } - if (SATinView != lastFix.SATinView) { + if (SATinView != lastSATinView) { + if (!leaveNofixLayout) SATinView = -1; + lastSATinView = SATinView; layout.clear(layout.progress); - layout.progress.label = "in view: " + SATinView; + layout.progress.label = "in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL; + // console.log("in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL); layout.render(layout.progress); } } - //layout.render(); if (listenerGPSraw == 0 && !fix.fix) { setTimeout(() => Bangle.on('GPS-raw', onGPSraw), 10); listenerGPSraw = 1; } - lastFix = fix; - lastFix.SATinView = SATinView; } function onGPSraw(nmea) { - if (nmea.slice(0,7) == "$BDGSV,") nofBD = Number(nmea.slice(11,13)); - if (nmea.slice(0,7) == "$GPGSV,") nofGP = Number(nmea.slice(11,13)); - SATinView = nofBD + nofGP; + if (nmea.slice(3,6) == "GSV") { + // console.log(nmea.slice(1,3) + " " + nmea.slice(11,13)); + if (nmea.slice(0,7) == "$GPGSV,") nofGP = Number(nmea.slice(11,13)); + if (nmea.slice(0,7) == "$BDGSV,") nofBD = Number(nmea.slice(11,13)); + if (nmea.slice(0,7) == "$GLGSV,") nofGL = Number(nmea.slice(11,13)); + SATinView = nofGP + nofBD + nofGL; + } } From a253aaa148daaa1be8ef35862afa8186759af7b0 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Mon, 17 Jan 2022 16:39:16 +0100 Subject: [PATCH 14/34] Update ChangeLog --- apps/gpsinfo/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/gpsinfo/ChangeLog b/apps/gpsinfo/ChangeLog index 414b9d9fb..5bb531bc7 100644 --- a/apps/gpsinfo/ChangeLog +++ b/apps/gpsinfo/ChangeLog @@ -6,3 +6,4 @@ 0.07: Resolve one FIFO_FULL case and exit App with button press 0.08: Leave GPS power switched on on exit (will switch off after 0.5 seconds anyway) 0.09: Fix FIFO_FULL error +0.10: Show satellites "in view" separated by GNS-system From 1fbc8a643a6ec9230a12f7abfb52ffa70a7d2dec Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Mon, 17 Jan 2022 16:39:54 +0100 Subject: [PATCH 15/34] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 2e11e37f6..0ee6eb62b 100644 --- a/apps.json +++ b/apps.json @@ -1541,7 +1541,7 @@ { "id": "gpsinfo", "name": "GPS Info", - "version": "0.09", + "version": "0.10", "description": "An application that displays information about altitude, lat/lon, satellites and time", "icon": "gps-info.png", "type": "app", From 97fb4d77dcc08056e6ba356f19e7f0f5936a6aa9 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Mon, 17 Jan 2022 16:46:41 +0100 Subject: [PATCH 16/34] debug mode --- apps/gpsinfo/gps-info.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index d26e1575c..1ee3cd6cc 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -17,7 +17,7 @@ var lastFix = { satellites: 0 }; var SATinView = 0, lastSATinView = -1, nofGP = 0, nofBD = 0, nofGL = 0; -const leaveNofixLayout = 1; // 0 = stay on initial screen for debugging (default = 1) +const leaveNofixLayout = 0; // 0 = stay on initial screen for debugging (default = 1) var listenerGPSraw = 0; function formatTime(now) { @@ -119,7 +119,7 @@ function onGPS(fix) { lastSATinView = SATinView; layout.clear(layout.progress); layout.progress.label = "in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL; - // console.log("in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL); + console.log("in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL); layout.render(layout.progress); } } From feef089abac9dab0b07bac9a5de52220346e7319 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Tue, 18 Jan 2022 11:44:31 +0100 Subject: [PATCH 17/34] Update gps-info.js --- apps/gpsinfo/gps-info.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index 1ee3cd6cc..0eca2ccf5 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -17,7 +17,7 @@ var lastFix = { satellites: 0 }; var SATinView = 0, lastSATinView = -1, nofGP = 0, nofBD = 0, nofGL = 0; -const leaveNofixLayout = 0; // 0 = stay on initial screen for debugging (default = 1) +const leaveNofixLayout = 1; // 0 = stay on initial screen for debugging (default = 1) var listenerGPSraw = 0; function formatTime(now) { @@ -96,6 +96,7 @@ function onGPS(fix) { Bangle.removeListener('GPS-raw', onGPSraw); listenerGPSraw = 0; lastSATinView = -1; + Bangle.buzz(50); } var locale = require("locale"); var satellites = fix.satellites; @@ -119,7 +120,7 @@ function onGPS(fix) { lastSATinView = SATinView; layout.clear(layout.progress); layout.progress.label = "in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL; - console.log("in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL); + // console.log("in view GP/BD/GL: " + nofGP + " " + nofBD + " " + nofGL); layout.render(layout.progress); } } From 96b11df930aa9f5dd3096fac0e26f35c1ea2988f Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Tue, 18 Jan 2022 13:01:36 +0100 Subject: [PATCH 18/34] Update ChangeLog --- apps/slevel/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/slevel/ChangeLog b/apps/slevel/ChangeLog index 3a6431e50..63a4d34d5 100644 --- a/apps/slevel/ChangeLog +++ b/apps/slevel/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Updated to work with both Bangle.js 1 and 2. +0.03: Now also visible on Bangle.js 2 From e539013c8ee843311d155e0c2d5ccf4fe66adc18 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Tue, 18 Jan 2022 13:02:43 +0100 Subject: [PATCH 19/34] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 0ee6eb62b..758c4ca78 100644 --- a/apps.json +++ b/apps.json @@ -839,7 +839,7 @@ { "id": "slevel", "name": "Spirit Level", - "version": "0.02", + "version": "0.03", "description": "Show the current angle of the watch, so you can use it to make sure something is absolutely flat", "icon": "spiritlevel.png", "tags": "tool", From 6d5df8019e3e3b9affc846021ce373d8b24d4f4e Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Tue, 18 Jan 2022 13:05:09 +0100 Subject: [PATCH 20/34] Update spiritlevel.js Now also visible on Bangle.js 2 --- apps/slevel/spiritlevel.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/slevel/spiritlevel.js b/apps/slevel/spiritlevel.js index 9db54b825..be56f3c11 100644 --- a/apps/slevel/spiritlevel.js +++ b/apps/slevel/spiritlevel.js @@ -2,6 +2,13 @@ g.clear(); var old = {x:0,y:0}; var W = g.getWidth(); var H = g.getHeight(); + +// colour definitions for Bangle.js 2 +const RED = "#ff0000"; +const GRN = "#00ff00"; +const BLU = "#0000ff"; +const HwVer = process.env.HWVERSION; + Bangle.on('accel',function(v) { var max = Math.max(Math.abs(v.x),Math.abs(v.y),Math.abs(v.z)); if (Math.abs(v.y)==max) { @@ -12,7 +19,8 @@ Bangle.on('accel',function(v) { var d = Math.sqrt(v.x*v.x+v.y*v.y); var ang = Math.atan2(d,Math.abs(v.z))*180/Math.PI; - + + if (2 == HwVer) g.setColor(RED); else g.setColor(1,1,1); g.setFont("6x8",2); g.setFontAlign(0,-1); @@ -22,11 +30,19 @@ Bangle.on('accel',function(v) { x:E.clip(W/2+v.x*256,4,W-4), y:E.clip(H/2+v.y*256,4,H-4)}; g.clearRect(old.x-3,old.y-3,old.x+6,old.y+6); + if (2 == HwVer) g.setColor(GRN); else g.setColor(1,1,1); g.fillRect(n.x-3,n.y-3,n.x+6,n.y+6); + if (2 == HwVer) g.setColor(BLU); else g.setColor(1,0,0); g.drawCircle(W/2,H/2,W*(1/12)); g.drawCircle(W/2,H/2,W*(1/4)); g.drawCircle(W/2,H/2,W*(5/12)); old = n; }); + +setWatch(_=>load(), BTN1); +if (global.BTN2) { + setWatch(_=>load(), BTN2); + setWatch(_=>load(), BTN3); +} From ec850868c952addd02383c70995854bed586b9c5 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 18 Jan 2022 14:47:44 +0000 Subject: [PATCH 21/34] slevel 0.04: Now work with different themes --- apps.json | 3 ++- apps/slevel/ChangeLog | 1 + apps/slevel/screenshot.png | Bin 0 -> 2582 bytes apps/slevel/spiritlevel.js | 26 ++++++++------------------ 4 files changed, 11 insertions(+), 19 deletions(-) create mode 100644 apps/slevel/screenshot.png diff --git a/apps.json b/apps.json index 3db5bab3f..b12ee700d 100644 --- a/apps.json +++ b/apps.json @@ -838,7 +838,7 @@ { "id": "slevel", "name": "Spirit Level", - "version": "0.03", + "version": "0.04", "description": "Show the current angle of the watch, so you can use it to make sure something is absolutely flat", "icon": "spiritlevel.png", "tags": "tool", @@ -854,6 +854,7 @@ "version": "0.07", "description": "Show currently installed apps, free space, and allow their deletion from the watch", "icon": "files.png", + "screenshots": [{"url":"screenshot.png"}], "tags": "tool,system,files", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ diff --git a/apps/slevel/ChangeLog b/apps/slevel/ChangeLog index 63a4d34d5..e77ca4e8b 100644 --- a/apps/slevel/ChangeLog +++ b/apps/slevel/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Updated to work with both Bangle.js 1 and 2. 0.03: Now also visible on Bangle.js 2 +0.04: Now work with different themes diff --git a/apps/slevel/screenshot.png b/apps/slevel/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..e945414aced577b55828d33d3c988601e2fdbeee GIT binary patch literal 2582 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 literal 0 HcmV?d00001 diff --git a/apps/slevel/spiritlevel.js b/apps/slevel/spiritlevel.js index be56f3c11..dd6d56bdc 100644 --- a/apps/slevel/spiritlevel.js +++ b/apps/slevel/spiritlevel.js @@ -3,12 +3,6 @@ var old = {x:0,y:0}; var W = g.getWidth(); var H = g.getHeight(); -// colour definitions for Bangle.js 2 -const RED = "#ff0000"; -const GRN = "#00ff00"; -const BLU = "#0000ff"; -const HwVer = process.env.HWVERSION; - Bangle.on('accel',function(v) { var max = Math.max(Math.abs(v.x),Math.abs(v.y),Math.abs(v.z)); if (Math.abs(v.y)==max) { @@ -20,21 +14,17 @@ Bangle.on('accel',function(v) { var d = Math.sqrt(v.x*v.x+v.y*v.y); var ang = Math.atan2(d,Math.abs(v.z))*180/Math.PI; - if (2 == HwVer) g.setColor(RED); else - g.setColor(1,1,1); - g.setFont("6x8",2); - g.setFontAlign(0,-1); - g.clearRect(W*(1/4),0,W*(3/4),H*(1/16)); - g.drawString(ang.toFixed(1),W/2,0); + g.reset(); + g.clearRect(W*(1/4),0,W*(3/4),16);// clear behind text + g.setFont("6x8",2).setFontAlign(0,-1).drawString(ang.toFixed(1),W/2,0); var n = { x:E.clip(W/2+v.x*256,4,W-4), y:E.clip(H/2+v.y*256,4,H-4)}; - g.clearRect(old.x-3,old.y-3,old.x+6,old.y+6); - if (2 == HwVer) g.setColor(GRN); else - g.setColor(1,1,1); - g.fillRect(n.x-3,n.y-3,n.x+6,n.y+6); - if (2 == HwVer) g.setColor(BLU); else - g.setColor(1,0,0); + g.clearRect(old.x-3,old.y-3,old.x+6,old.y+6); // clear old marker + g.setColor("#0f0"); + g.fillRect(n.x-3,n.y-3,n.x+6,n.y+6); // draw new marker + // draw rings + g.setColor("#f00"); g.drawCircle(W/2,H/2,W*(1/12)); g.drawCircle(W/2,H/2,W*(1/4)); g.drawCircle(W/2,H/2,W*(5/12)); From 5a4f15435fca7cdf1c415782ef13081ecc5d7adb Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 18 Jan 2022 15:34:49 +0000 Subject: [PATCH 22/34] oops --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index b12ee700d..9823c5441 100644 --- a/apps.json +++ b/apps.json @@ -841,6 +841,7 @@ "version": "0.04", "description": "Show the current angle of the watch, so you can use it to make sure something is absolutely flat", "icon": "spiritlevel.png", + "screenshots": [{"url":"screenshot.png"}], "tags": "tool", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ @@ -854,7 +855,6 @@ "version": "0.07", "description": "Show currently installed apps, free space, and allow their deletion from the watch", "icon": "files.png", - "screenshots": [{"url":"screenshot.png"}], "tags": "tool,system,files", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ From bbb96a83d4d0cb69d16e40dd06bb9551683ab473 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Tue, 18 Jan 2022 16:41:48 +0100 Subject: [PATCH 23/34] Update apps.json Let the parrot party on Bangle.js 2 too! --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 9823c5441..22077205a 100644 --- a/apps.json +++ b/apps.json @@ -1364,7 +1364,7 @@ "icon": "party-parrot.png", "type": "app", "tags": "party,parrot,lol", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS", "BANGLEJS2"], "allow_emulator": true, "screenshots": [{"url":"bangle1-party-parrot-screenshot.png"}], "storage": [ From 85be6af02e392fc559a2320d6a64f83ecba60c2c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 18 Jan 2022 16:21:30 +0000 Subject: [PATCH 24/34] Add menu option for language translations (fix #136) --- bin/language_scan.js | 66 ++++++++++++++++++++++++++++++++++++-------- index.html | 5 ++++ lang/en_GB.json | 4 +-- loader.js | 42 ++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 14 deletions(-) diff --git a/bin/language_scan.js b/bin/language_scan.js index 2a92fded1..5ab25428c 100755 --- a/bin/language_scan.js +++ b/bin/language_scan.js @@ -2,15 +2,20 @@ /* Scans for strings that may be in English in each app, and outputs a list of strings that have been found. -Early work towards internationalisation. -See https://github.com/espruino/BangleApps/issues/136 +See https://github.com/espruino/BangleApps/issues/1311 */ +var IGNORE_STRINGS = [ + "5x5", + "5x9Numeric7Seg", + "Vector" +]; + var BASEDIR = __dirname+"/../"; Espruino = require(BASEDIR+"core/lib/espruinotools.js"); var fs = require("fs"); - var APPSDIR = BASEDIR+"apps/"; + function ERROR(s) { console.error("ERROR: "+s); process.exit(1); @@ -18,6 +23,9 @@ function ERROR(s) { function WARN(s) { console.log("Warning: "+s); } +function log(s) { + console.log(s); +} var appsFile, apps; try { @@ -39,31 +47,65 @@ function isNotString(s) { if (s.endsWith(".json") || s.endsWith(".img")) return true; // a filename if (s.endsWith("=")) return true; // probably base64 if (s.startsWith("BTN")) return true; // button name + if (IGNORE_STRINGS.includes(s)) return true; // one we know to ignore return false; } -var textStrings = []; +// A string that *could* be translated? +var untranslatedStrings = []; +// Strings that are marked with 'LANG' +var translatedStrings = []; -console.log("Scanning..."); +console.log("Scanning apps..."); apps.forEach((app,appIdx) => { var appDir = APPSDIR+app.id+"/"; app.storage.forEach((file) => { if (!file.url || !file.name.endsWith(".js")) return; var fileContents = fs.readFileSync(appDir+file.url).toString(); var lex = Espruino.Core.Utils.getLexer(fileContents); + var lastIdx = 0; var tok = lex.next(); while (tok!==undefined) { + var previousString = fileContents.substring(lastIdx, tok.startIdx); if (tok.type=="STRING") { - if (!isNotString(tok.value)) { - //console.log(tok.str); - if (!textStrings.includes(tok.value)) - textStrings.push(tok.value); + if (previousString.includes("/*LANG*/")) { // translated! + if (!translatedStrings.includes(tok.value)) + translatedStrings.push(tok.value); + } else { // untranslated - potential to translate? + if (!isNotString(tok.value)) { + if (!untranslatedStrings.includes(tok.value)) + untranslatedStrings.push(tok.value); + } } } + lastIdx = tok.endIdx; tok = lex.next(); } }); }); -console.log("Done"); -textStrings.sort(); -console.log(textStrings.join("\n")); +untranslatedStrings.sort(); +translatedStrings.sort(); + +var report = ""; +/* // too many! don't output these +log("Possible English Strings that could be translated"); +log("================================================================="); +log(""); +log("Add these to IGNORE_STRINGS if the don't make sense..."); +log(""); +log(untranslatedStrings.map(s=>JSON.stringify(s)).join(",\n"));*/ +log(""); + +var languages = JSON.parse(fs.readFileSync(BASEDIR+"/lang/index.json").toString()); +languages.forEach(language => { + console.log("Scanning "+language.code); + log(language.code); + log("=========="); + var translations = JSON.parse(fs.readFileSync(BASEDIR+"/lang/"+language.url).toString()); + translatedStrings.forEach(str => { + if (!translations.GLOBAL[str]) + console.log(`Missing translation for ${JSON.stringify(str)}`); + }); + log(""); +}); +console.log("Done."); diff --git a/index.html b/index.html index e22a1f9e7..7e818ee72 100644 --- a/index.html +++ b/index.html @@ -141,6 +141,11 @@ Always update time when we connect +
+   Translations (BETA - more info) +
diff --git a/lang/en_GB.json b/lang/en_GB.json index e85fe8029..6bf1279d1 100644 --- a/lang/en_GB.json +++ b/lang/en_GB.json @@ -1,9 +1,9 @@ { "//":"British English language translations - the default strings in apps are all english anyway, so no need to have translations for most things", "GLOBAL": { - "//":"Translations that apply for all apps", + "//":"Translations that apply for all apps" }, "alarm": { - "//":"App-specific overrides", + "//":"App-specific overrides" } } diff --git a/loader.js b/loader.js index a0c280634..0355ea89c 100644 --- a/loader.js +++ b/loader.js @@ -164,6 +164,48 @@ window.addEventListener('load', (event) => { showToast("App Install failed, "+err,"error"); }); }); + + // Load language list + httpGet("lang/index.json").then(languagesJSON=>{ + var languages; + try { + languages = JSON.parse(languagesJSON); + } catch(e) { + console.error("lang/index.json Corrupted", e); + } + + function reloadLanguage() { + LANGUAGE = undefined; + if (SETTINGS.language) { + var language = languages.find(l=>l.code==SETTINGS.language); + if (language) { + var langURL = "lang/"+language.url; + httpGet(langURL).then(languageJSON=>{ + try { + LANGUAGE = JSON.parse(languageJSON); + console.log(`${langURL} loaded successfully`); + } catch(e) { + console.error(`${langURL} Corrupted`, e); + } + }); + } else { + console.error(`Language code ${JSON.stringify(SETTINGS.language)} not found in lang/index.json`); + } + } + } + + var selectLang = document.getElementById("settings-lang"); + console.log(languages); + languages.forEach(lang => { + selectLang.innerHTML += ``; + }); + selectLang.addEventListener("change",event=>{ + SETTINGS.language = event.target.value; + reloadLanguage(); + saveSettings(); + }); + reloadLanguage(); + }); }); function onAppJSONLoaded() { From dc6833112e7af527f3ad39cc399fa99d0c16fa6d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 19 Jan 2022 08:08:26 +0000 Subject: [PATCH 25/34] party parrot bangle2 #1312 --- apps.json | 2 +- apps/pparrot/ChangeLog | 1 + apps/pparrot/party-parrot.js | 5 +++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index 22077205a..9b4953ac6 100644 --- a/apps.json +++ b/apps.json @@ -1359,7 +1359,7 @@ { "id": "pparrot", "name": "Party Parrot", - "version": "0.01", + "version": "0.02", "description": "Party with a parrot on your wrist", "icon": "party-parrot.png", "type": "app", diff --git a/apps/pparrot/ChangeLog b/apps/pparrot/ChangeLog index 5560f00bc..a7262b0c9 100644 --- a/apps/pparrot/ChangeLog +++ b/apps/pparrot/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Bangle.js 2 compatibility diff --git a/apps/pparrot/party-parrot.js b/apps/pparrot/party-parrot.js index a62b88bc9..4d5dcf9b5 100644 --- a/apps/pparrot/party-parrot.js +++ b/apps/pparrot/party-parrot.js @@ -5,16 +5,17 @@ var imgs = [ atob("qE5xH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AdwOBlcAAAsrq2BJn+BqxMHKX5NFJhgAFqxO5TYcruug0HLAAoIBvdQCIZN11icDqBLHAA+gMYRQ0TgcrvhNOAAaiCeWWBTgZNSKAuBJ17rDvZOVeQK4C1hOxdaYAFvbxvdgZOGbgMlLCF8DwSgrJxSKCKALvRUFmslbsJJ4YMG0F1qElld10ATGgGBJ9BOCvaLHHYgNEIoqsBKAIJFUFDtCurbIvhPHcgcrAAL9DBQclUFDtCGQIAJIIUAcYQHDq2ArmAqxsDfIL2BKFAxCvhPK0F7uoODSYVWrgACwBXCLwYQDlaekE4ROKAA97CwJODAAJuCfwYABuqglwKeNAA9QMoJPFrjwDAAjxBlesd0hOSHgeAJwjwDWRCgh1guBqBPTHYKfHOBIIBqxPhEgN7J6yfFJ5VQBILwgwJPWWwJPK0DwpJ66LBd6OgJ8TvXuoXBJ6HLBINWJ8VQJ6d8HYROEwD5BkpP/bYpPFrgIBuoUHqEAlZPiZxAAMHYWAdw18CY91BYOsJ8WgJ6d7UAzuBN5JPCwJPivagUC4MrJwoeJJ4VcJ72BJ4UrJ6igCKALtCqASJqDvhJ4bwVHodWTwQcJ0AQCJz3+QASCMABclDYd1MBmBJ76ABkrYCvZPUR4QABBxInCT0DuCJYJ3CeKt1NJZdClesd0RKBFIbxVqEldtusdwJJDvgqBqDxVTxjtgdwd8Fgd7KC77MT0H+TwLQGKAT4CJ/9WTwxQGupPbd4QABldWq2B1hPbTwwvDVYJRCUbRxDAAhTCJyusSRowEktQAAKhXvd1qBSHKKmBdxIwFuotFUjQjBvgkElZPWlaOCABRPFChwAPEYpPSqy9GAGlWJ6JO7UJgA=="), atob("qE5xH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AtwNWlcAAAUrq2BJP5MJAApS/JoRMJAApR7JotPumfAA10VQlWJ2+AHwZMB4nDABHEz9PeoesJ2icDp5NLKIpkCKGesG4UlJoJOBKJQJBBYT1BeQRQwwJOCTgI/Bb4V0KAxIBp8llb+BCYlWJ2V0IYbzCgBCBJwgKDBoefkoFCUFuBGISWEIglPBI8rAAIYDCYeAJ2hPJcgmArmAqylGJ9ZODz5OEJ5IICq1cAAZQGlZOuJoiWFVQIICcgRPFrhLCuklAgOBJ0+AlZOJJAYABAwgUBJwtcDwMr4itCeE+sJwV0dgoAKU4UrwBPFeARuBUAMr1jslJyhPBIAMlJ5auCeEotCJyRPBMwRPLeAVWJ0eAE4NPJqLvR4iglwIlBFgQATH4ROFJ4qgmFYUAdqRPSWASghTwclJ6qPDJ4srBIIQGwCejT63DksAlZPHp4iD4gQCT0SfXb4ZPFA4N0CIl0eECeCZgSfWeA4hCz4QHJ7usEANPOgQtFeCagDOYV0OIpPCeDruCugkCZoqgUlbtDkpwGB4UAJ7mATYXEQoNPeC3EXYVWTwS/HJ8ErD4IlBeDXDEAQABNxBPfPQTqCEoSgXIIhtJf4ZOawIeBkomDUDYbCNhJPCwBOZwB6Hz8lK4oAT4lPNZRcCwJOheL10DJHEO4LuZdgUAugoHPAQ2JADDubToZOHAATVBBpb6YgGsJy1WdhJQIlYQMTylWJ05QEUQOfejd0EAOBJzElRh/EFwRRDAATuWkrBBJysrbaufKIhqCd1ydCJyZREQYIACDizuWJzLUDdoLyBDSq9CJ6eBJzYAbJ4WsTyuf4gAzT6usCoKfBp4AzlY4BwBPRCoQA5qxPRJ3ZQMA==") ]; +var scale = g.getWidth()<200 ? 2 : 3; function drawImg (i) { g.drawImage({ width: 80, height: 57, bpp: 8, buffer: require("heatshrink").decompress(imgs[i]) - }, 0, 0, {scale: 3}); + }, (g.getWidth()-80*scale)/2, (g.getHeight()-57*scale)/2, {scale: scale}); } var currImg = 0; -g.clear(); +g.setBgColor(0).clear(); drawImg(currImg); setInterval(function() { currImg = (currImg + 1) % imgs.length; From 3616f88f9eae38f738838d735ec221c82e95d9b8 Mon Sep 17 00:00:00 2001 From: fparri Date: Wed, 19 Jan 2022 09:51:43 +0100 Subject: [PATCH 26/34] Update it_IT.json Updated with a better Italian translation --- lang/it_IT.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lang/it_IT.json b/lang/it_IT.json index 184c80238..96293cbf3 100644 --- a/lang/it_IT.json +++ b/lang/it_IT.json @@ -2,20 +2,20 @@ "//":"Italian language translations", "GLOBAL": { "//":"Translations that apply for all apps", - "Alarms" : "Allarmi", + "Alarms" : "Sveglie", "Hours" : "Ore", "Minutes" : "Minuti", - "Enabled" : "Attivato", - "New Alarm" : "Nuovo allarme", - "Save" : "Salvare", + "Enabled" : "Attiva", + "New Alarm" : "Nuova sveglia", + "Save" : "Salva", "Back" : "Indietro", - "Repeat" : "Ripetere", - "Delete" : "Cancellare", - "ALARM!" : "ALARM!", - "Sleep" : "Dormire" + "Repeat" : "Ripeti", + "Delete" : "Cancella", + "ALARM!" : "SVEGLIA!", + "Sleep" : "Dormi" }, "alarm": { "//":"App-specific overrides", - "rpt" : "ripetere" + "rpt" : "ripeti" } } From 53db4b2a04735440e13811b2a37d49b7c5b1a956 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 19 Jan 2022 10:13:40 +0100 Subject: [PATCH 27/34] Version 0.14 --- apps.json | 2 +- apps/lcars/ChangeLog | 5 +++-- apps/lcars/README.md | 13 +++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/apps.json b/apps.json index 14e12c164..07c80d083 100644 --- a/apps.json +++ b/apps.json @@ -4567,7 +4567,7 @@ "name": "LCARS Clock", "shortName":"LCARS", "icon": "lcars.png", - "version":"0.13", + "version":"0.14", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "Library Computer Access Retrieval System (LCARS) clock.", diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index dba05915b..8d2eb6d2d 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -9,5 +9,6 @@ 0.09: Tab anywhere to open the launcher. 0.10: Removed swipes to be compatible with the Pattern Launcher. Stability improvements. 0.11: Show the gadgetbridge weather temperature (settings). -0.12: Added humidity to data. -0.13: Improved battery visualization. \ No newline at end of file +0.12: Added humidity as option to display. +0.13: Improved battery visualization. +0.14: Added altitude as option to display. \ No newline at end of file diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 46e134f78..2b86921e5 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -13,10 +13,10 @@ To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerda * Full screen mode - widgets are still loaded but not shown. * Tab on left/right to switch between different screens. * Cusomizable data that is shown on screen 1 (steps, weather etc.) - * Shows random images of real planets. + * Shows random and real images of planets. * Tap on top/bottom of screen 1 to activate an alarm. * The lower orange line indicates the battery level. - * Display graphs for steps + hrm on the second screen. + * Display graphs (day or month) for steps + hrm on the second screen. ## Data that can be configured * Steps - Steps loaded via the health module @@ -25,16 +25,17 @@ To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerda * HRM - Last measured HRM * Temp - Weather temperature loaded via the weather module + gadgetbridge * Humidity - Humidity loaded via the weather module + gadgetbridge + * Altitude - Shows the altitude in m. * CoreT - Temperature of device ## Multiple screens support -Access different screens via swipe left/ right +Access different screens via tap on the left/ right side of the screen ![](screenshot.png) ![](screenshot_2.png) ## Contributors -- Initial creation and improvements: [David Peer](https://github.com/peerdavid). -- Improvements: [Adam Schmalhofer](https://github.com/adamschmalhofer). -- Improvements: [Jon Warrington](https://github.com/BartokW). +- [David Peer](https://github.com/peerdavid). +- [Adam Schmalhofer](https://github.com/adamschmalhofer). +- [Jon Warrington](https://github.com/BartokW). From b2db7f0a7fa5346700cf3022c99d8d91c0f6a165 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 19 Jan 2022 10:14:46 +0100 Subject: [PATCH 28/34] Typo --- apps/lcars/ChangeLog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index 8d2eb6d2d..1abd519ab 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -9,6 +9,6 @@ 0.09: Tab anywhere to open the launcher. 0.10: Removed swipes to be compatible with the Pattern Launcher. Stability improvements. 0.11: Show the gadgetbridge weather temperature (settings). -0.12: Added humidity as option to display. +0.12: Added humidity as an option to display. 0.13: Improved battery visualization. -0.14: Added altitude as option to display. \ No newline at end of file +0.14: Added altitude as an option to display. \ No newline at end of file From 1b266f7279d74fca6e71e3de4fe9d7b94dc2ac96 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 19 Jan 2022 11:09:12 +0000 Subject: [PATCH 29/34] Better support for translation, added some more common translations to German translation --- bin/language_scan.js | 66 ++++++++++++++++++++++++++++++++++---------- core | 2 +- lang/de_DE.json | 8 +++++- 3 files changed, 60 insertions(+), 16 deletions(-) diff --git a/bin/language_scan.js b/bin/language_scan.js index 5ab25428c..43d8cfc09 100755 --- a/bin/language_scan.js +++ b/bin/language_scan.js @@ -6,9 +6,19 @@ See https://github.com/espruino/BangleApps/issues/1311 */ var IGNORE_STRINGS = [ - "5x5", + "5x5","6x8","6x8:2","12x20","---","...", "5x9Numeric7Seg", - "Vector" + "Vector", + "sortorder","tl","tr" +]; + +var IGNORE_FUNCTION_PARAMS = [ + "read", + "readJSON", + "require", + "setFont", + "on", + "RegExp", ]; var BASEDIR = __dirname+"/../"; @@ -40,7 +50,11 @@ try{ } // Given a string value, work out if it's obviously not a text string -function isNotString(s) { +function isNotString(s, wasFnCall) { + // wasFnCall is set to the function name if 's' is the first argument to a function + if (wasFnCall && IGNORE_FUNCTION_PARAMS.includes(wasFnCall)) return true; + if (s=="Storage") console.log("isNotString",s,wasFnCall); + if (s.length<2) return true; // too short if (s.length>40) return true; // too long if (s[0]=="#") return true; // a color @@ -51,53 +65,77 @@ function isNotString(s) { return false; } +function getTextFromString(s) { + return s.replace(/^([.<>\- ]*)([^<>\!\?]*?)([.<>\!\?\- ]*)$/,"$2"); +} + // A string that *could* be translated? var untranslatedStrings = []; // Strings that are marked with 'LANG' var translatedStrings = []; +function addString(list, str, file) { + str = getTextFromString(str); + var entry = list.find(e => e.str==str); + if (!entry) { + entry = { str:str, uses:0, files : [] }; + list.push(entry); + } + entry.uses++; + if (!entry.files.includes(file)) + entry.files.push(file) +} + console.log("Scanning apps..."); +//apps = apps.filter(a=>a.id=="wid_edit"); apps.forEach((app,appIdx) => { var appDir = APPSDIR+app.id+"/"; app.storage.forEach((file) => { if (!file.url || !file.name.endsWith(".js")) return; - var fileContents = fs.readFileSync(appDir+file.url).toString(); + var filePath = appDir+file.url; + var fileContents = fs.readFileSync(filePath).toString(); var lex = Espruino.Core.Utils.getLexer(fileContents); var lastIdx = 0; + var wasFnCall = undefined; // set to 'setFont' if we're at soemthing like setFont(".." var tok = lex.next(); while (tok!==undefined) { var previousString = fileContents.substring(lastIdx, tok.startIdx); + //console.log(wasFnCall,tok.type,tok.value); if (tok.type=="STRING") { if (previousString.includes("/*LANG*/")) { // translated! - if (!translatedStrings.includes(tok.value)) - translatedStrings.push(tok.value); + addString(translatedStrings, tok.value, filePath); } else { // untranslated - potential to translate? - if (!isNotString(tok.value)) { - if (!untranslatedStrings.includes(tok.value)) - untranslatedStrings.push(tok.value); + if (!isNotString(tok.value, wasFnCall)) { + addString(untranslatedStrings, tok.value, filePath); } } - } + } else if (tok.value!="(") wasFnCall=undefined; + if (tok.type=="ID") wasFnCall=tok.value; lastIdx = tok.endIdx; tok = lex.next(); } }); }); -untranslatedStrings.sort(); -translatedStrings.sort(); +untranslatedStrings.sort((a,b)=>a.uses - b.uses); +translatedStrings.sort((a,b)=>a.uses - b.uses); +untranslatedStrings.filter(e => e.uses>2); // ignore individual uses var report = ""; -/* // too many! don't output these +// too many! don't output these log("Possible English Strings that could be translated"); log("================================================================="); log(""); log("Add these to IGNORE_STRINGS if the don't make sense..."); log(""); -log(untranslatedStrings.map(s=>JSON.stringify(s)).join(",\n"));*/ +log(untranslatedStrings.map(e=>`${JSON.stringify(e.str)} (${e.uses} uses)`).join("\n")); log(""); var languages = JSON.parse(fs.readFileSync(BASEDIR+"/lang/index.json").toString()); languages.forEach(language => { + if (language.code=="en_GB") { + console.log("Ignoring "+language.code); + return; + } console.log("Scanning "+language.code); log(language.code); log("=========="); diff --git a/core b/core index 649489412..daedea685 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 649489412e27ef770bc0c8ed12cfca6a17a98c0d +Subproject commit daedea685620abea71c0f876b234fe1dd553d3a2 diff --git a/lang/de_DE.json b/lang/de_DE.json index 80d0e74bb..6eb25eb9c 100644 --- a/lang/de_DE.json +++ b/lang/de_DE.json @@ -14,7 +14,13 @@ "Sleep" : "Schlummern", "Alarms" : "Wecker", "New Alarm" : "Neuer Wecker", - "ALARM!" : "ALARM!" + "ALARM!" : "ALARM!", + "Yes" : "Ja", + "No" : "Nein", + "On" : "Auf", + "Off" : "aus", + "Ok" : "OK", + "Back" : "zurück" }, "alarm": { "//":"App-specific overrides", From bb8c2917555e8ced4e6c04c303de9516b474581a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 19 Jan 2022 11:30:18 +0000 Subject: [PATCH 30/34] making language scan pop up more useful info --- bin/language_scan.js | 65 +++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/bin/language_scan.js b/bin/language_scan.js index 43d8cfc09..89af7a12b 100755 --- a/bin/language_scan.js +++ b/bin/language_scan.js @@ -6,19 +6,26 @@ See https://github.com/espruino/BangleApps/issues/1311 */ var IGNORE_STRINGS = [ - "5x5","6x8","6x8:2","12x20","---","...", - "5x9Numeric7Seg", - "Vector", - "sortorder","tl","tr" + "5x5","6x8","6x8:2","4x6","12x20","6x15","5x9Numeric7Seg", "Vector", // fonts + "---","...","*","##","00","GPS","ram", + "12hour","rising","falling","title", + "sortorder","tl","tr", + "function","object", // typeof=== + "txt", // layout styles + "play","stop","pause", // music state ]; var IGNORE_FUNCTION_PARAMS = [ "read", "readJSON", "require", - "setFont", + "setFont","setUI","setLCDMode", "on", - "RegExp", + "RegExp","sendCommand", + "print","log" +]; +var IGNORE_ARRAY_ACCESS = [ + "WIDGETS" ]; var BASEDIR = __dirname+"/../"; @@ -50,9 +57,11 @@ try{ } // Given a string value, work out if it's obviously not a text string -function isNotString(s, wasFnCall) { +function isNotString(s, wasFnCall, wasArrayAccess) { + if (s=="") return true; // wasFnCall is set to the function name if 's' is the first argument to a function if (wasFnCall && IGNORE_FUNCTION_PARAMS.includes(wasFnCall)) return true; + if (wasArrayAccess && IGNORE_ARRAY_ACCESS.includes(wasArrayAccess)) return true; if (s=="Storage") console.log("isNotString",s,wasFnCall); if (s.length<2) return true; // too short @@ -66,7 +75,7 @@ function isNotString(s, wasFnCall) { } function getTextFromString(s) { - return s.replace(/^([.<>\- ]*)([^<>\!\?]*?)([.<>\!\?\- ]*)$/,"$2"); + return s.replace(/^([.<>\-\n ]*)([^<>\!\?]*?)([.<>\!\?\-\n ]*)$/,"$2"); } // A string that *could* be translated? @@ -93,24 +102,32 @@ apps.forEach((app,appIdx) => { app.storage.forEach((file) => { if (!file.url || !file.name.endsWith(".js")) return; var filePath = appDir+file.url; + var shortFilePath = "apps/"+app.id+"/"+file.url; var fileContents = fs.readFileSync(filePath).toString(); var lex = Espruino.Core.Utils.getLexer(fileContents); var lastIdx = 0; - var wasFnCall = undefined; // set to 'setFont' if we're at soemthing like setFont(".." + var wasFnCall = undefined; // set to 'setFont' if we're at something like setFont(".." + var wasArrayAccess = undefined; // set to 'WIDGETS' if we're at something like WIDGETS[".." var tok = lex.next(); while (tok!==undefined) { var previousString = fileContents.substring(lastIdx, tok.startIdx); - //console.log(wasFnCall,tok.type,tok.value); if (tok.type=="STRING") { if (previousString.includes("/*LANG*/")) { // translated! - addString(translatedStrings, tok.value, filePath); + addString(translatedStrings, tok.value, shortFilePath); } else { // untranslated - potential to translate? - if (!isNotString(tok.value, wasFnCall)) { - addString(untranslatedStrings, tok.value, filePath); + if (!isNotString(tok.value, wasFnCall, wasArrayAccess)) { + addString(untranslatedStrings, tok.value, shortFilePath); } } - } else if (tok.value!="(") wasFnCall=undefined; - if (tok.type=="ID") wasFnCall=tok.value; + } else { + if (tok.value!="(") wasFnCall=undefined; + if (tok.value!="[") wasArrayAccess=undefined; + } + //console.log(wasFnCall,tok.type,tok.value); + if (tok.type=="ID") { + wasFnCall = tok.value; + wasArrayAccess = tok.value; + } lastIdx = tok.endIdx; tok = lex.next(); } @@ -118,17 +135,27 @@ apps.forEach((app,appIdx) => { }); untranslatedStrings.sort((a,b)=>a.uses - b.uses); translatedStrings.sort((a,b)=>a.uses - b.uses); -untranslatedStrings.filter(e => e.uses>2); // ignore individual uses + var report = ""; -// too many! don't output these + +log("Translated Strings that are not tagged with LANG"); +log("================================================================="); +log(""); +log("Maybe we should add /*LANG*/ to these automatically?"); +log(""); +log(untranslatedStrings.filter(e => translatedStrings.find(t=>t.str==e.str)).map(e=>`${JSON.stringify(e.str)} (${e.files.join(",")})`).join("\n")); +log(""); +//process.exit(1); log("Possible English Strings that could be translated"); log("================================================================="); log(""); -log("Add these to IGNORE_STRINGS if the don't make sense..."); +log("Add these to IGNORE_STRINGS if they don't make sense..."); log(""); -log(untranslatedStrings.map(e=>`${JSON.stringify(e.str)} (${e.uses} uses)`).join("\n")); + // ignore ones only used once or twice +log(untranslatedStrings.filter(e => e.uses>2).filter(e => !translatedStrings.find(t=>t.str==e.str)).map(e=>`${JSON.stringify(e.str)} (${e.uses} uses)`).join("\n")); log(""); +//process.exit(1); var languages = JSON.parse(fs.readFileSync(BASEDIR+"/lang/index.json").toString()); languages.forEach(language => { From e56d75eb882ac052aaec94dda9f618b71e8afefd Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 19 Jan 2022 11:49:59 +0000 Subject: [PATCH 31/34] minor extra language translations --- apps/messages/app.js | 2 +- apps/messages/settings.js | 12 ++++++------ apps/setting/settings.js | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index 80e4a3244..3e692a0cc 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -280,7 +280,7 @@ function showMessage(msgid) { showMessageSettings(msg); }}, { type:"v", fillx:1, c: [ - {type:"txt", font:fontSmall, label:msg.src||"Message", bgCol:colBg, fillx:1, pad:2, halign:1 }, + {type:"txt", font:fontSmall, label:msg.src||/*LANG*/"Message", bgCol:colBg, fillx:1, pad:2, halign:1 }, title?{type:"txt", font:titleFont, label:title, bgCol:colBg, fillx:1, pad:2 }:{}, ]}, ]}, diff --git a/apps/messages/settings.js b/apps/messages/settings.js index fd8ce8f39..c865a37fb 100644 --- a/apps/messages/settings.js +++ b/apps/messages/settings.js @@ -12,12 +12,12 @@ require('Storage').writeJSON("messages.settings.json", settings); } - var vibPatterns = ["Off", ".", "-", "--", "-.-", "---"]; + var vibPatterns = [/*LANG*/"Off", ".", "-", "--", "-.-", "---"]; var currentVib = settings().vibrate; var mainmenu = { - "" : { "title" : "Messages" }, + "" : { "title" : /*LANG*/"Messages" }, "< Back" : back, - 'Vibrate': { + /*LANG*/'Vibrate': { value: Math.max(0,vibPatterns.indexOf(settings().vibrate)), min: 0, max: vibPatterns.length, format: v => vibPatterns[v]||"Off", @@ -25,16 +25,16 @@ updateSetting("vibrate", vibPatterns[v]); } }, - 'Repeat': { + /*LANG*/'Repeat': { value: settings().repeat, min: 2, max: 10, format: v => v+"s", onchange: v => updateSetting("repeat", v) }, - 'Unread timer': { + /*LANG*/'Unread timer': { value: settings().unreadTimeout, min: 0, max: 240, step : 10, - format: v => v?v+"s":"Off", + format: v => v?v+"s":/*LANG*/"Off", onchange: v => updateSetting("unreadTimeout", v) }, }; diff --git a/apps/setting/settings.js b/apps/setting/settings.js index a32b83d3c..65e076753 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -221,7 +221,7 @@ function showThemeMenu() { m.draw(); } var m = E.showMenu({ - '':{title:'Theme'}, + '':{title:/*LANG*/'Theme'}, '< Back': ()=>showSystemMenu(), /*LANG*/'Dark BW': ()=>{ upd({ From 329891876bf2ac7ebd9a2f164f24616186a2f12b Mon Sep 17 00:00:00 2001 From: Marco H Date: Wed, 19 Jan 2022 13:02:14 +0100 Subject: [PATCH 32/34] Update de_DE.json --- lang/de_DE.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lang/de_DE.json b/lang/de_DE.json index 6eb25eb9c..f038c5bc0 100644 --- a/lang/de_DE.json +++ b/lang/de_DE.json @@ -17,10 +17,10 @@ "ALARM!" : "ALARM!", "Yes" : "Ja", "No" : "Nein", - "On" : "Auf", - "Off" : "aus", + "On" : "Ein", + "Off" : "Aus", "Ok" : "OK", - "Back" : "zurück" + "Back" : "Zurück" }, "alarm": { "//":"App-specific overrides", From f8308a93f3bf470239082bb13497708a4be62508 Mon Sep 17 00:00:00 2001 From: Marco H Date: Wed, 19 Jan 2022 13:10:15 +0100 Subject: [PATCH 33/34] Remove duplicate "Back" --- lang/de_DE.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lang/de_DE.json b/lang/de_DE.json index f038c5bc0..b4acfe675 100644 --- a/lang/de_DE.json +++ b/lang/de_DE.json @@ -19,8 +19,7 @@ "No" : "Nein", "On" : "Ein", "Off" : "Aus", - "Ok" : "OK", - "Back" : "Zurück" + "Ok" : "OK" }, "alarm": { "//":"App-specific overrides", From 33f38c515ba1910cdbe1b4cb0e619cc106b6aef6 Mon Sep 17 00:00:00 2001 From: Marco H Date: Wed, 19 Jan 2022 13:15:32 +0100 Subject: [PATCH 34/34] Improved the recently added translations for es_ES --- lang/es_ES.json | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lang/es_ES.json b/lang/es_ES.json index 0671c4ab8..a3e7ede3f 100644 --- a/lang/es_ES.json +++ b/lang/es_ES.json @@ -6,13 +6,20 @@ "Hours" : "Horas", "Minutes" : "Minutos", "Enabled" : "Activados", - "New Alarm" : "Alarma nueva", - "Save" : "Grabar", - "Back" : "Atrás", + "Save" : "Ahorrar", + "Back" : "Regresa", "Repeat" : "Repetición", "Delete" : "Borrar", "ALARM!" : "ALARM", - "Sleep" : "Dormir" + "Sleep" : "Dormir", + "Alarms" : "Alarmas", + "New Alarm" : "Nueva alarma", + "ALARM!" : "ALARM!", + "Yes" : "Si", + "No" : "No", + "On" : "Encendido", + "Off" : "Apagado", + "Ok" : "OK" }, "alarm": { "//":"App-specific overrides",