mylocation: Add option to set location from waypoint

pull/2839/head
Erik Andresen 2023-06-25 21:43:14 +02:00
parent be5fcdd185
commit 73042fa58d
4 changed files with 35 additions and 7 deletions

View File

@ -7,3 +7,4 @@
0.07: Move mylocation app into 'Settings -> Apps' 0.07: Move mylocation app into 'Settings -> Apps'
0.08: Allow setting location from webinterface in the AppLoader 0.08: Allow setting location from webinterface in the AppLoader
0.09: Fix web interface so app can be installed (replaced custom with interface html) 0.09: Fix web interface so app can be installed (replaced custom with interface html)
0.10: Add waypoints as location source

View File

@ -9,7 +9,7 @@ next to it - and you can choose your location on a map.
**On Bangle.js** go to `Settings -> Apps -> My Location` **On Bangle.js** go to `Settings -> Apps -> My Location`
* Select one of the preset Cities, setup through the GPS or use the webinterface from the AppLoader * Select one of the preset Cities, setup through the GPS, waypoints or use the webinterface from the AppLoader
* Other Apps can read this information to do calculations based on location * Other Apps can read this information to do calculations based on location
* When the City shows ??? it means the location has been set through the GPS * When the City shows ??? it means the location has been set through the GPS

View File

@ -4,12 +4,13 @@
"icon": "app.png", "icon": "app.png",
"type": "settings", "type": "settings",
"screenshots": [{"url":"screenshot_1.png"}], "screenshots": [{"url":"screenshot_1.png"}],
"version":"0.09", "version":"0.10",
"description": "Sets and stores the latitude and longitude of your preferred City. It can be set from GPS or webinterface. `mylocation.json` can be used by other apps that need your main location. See README for details.", "description": "Sets and stores the latitude and longitude of your preferred City. It can be set from GPS, waypoints or webinterface. `mylocation.json` can be used by other apps that need your main location. See README for details.",
"readme": "README.md", "readme": "README.md",
"tags": "tool,utility", "tags": "tool,utility",
"supports": ["BANGLEJS", "BANGLEJS2"], "supports": ["BANGLEJS", "BANGLEJS2"],
"interface": "interface.html", "interface": "interface.html",
"dependencies" : { "waypoints":"type" },
"storage": [ "storage": [
{"name":"mylocation.settings.js","url":"settings.js"} {"name":"mylocation.settings.js","url":"settings.js"}
], ],

View File

@ -13,7 +13,7 @@ let s = {
function loadSettings() { function loadSettings() {
settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {}; settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {};
for (const key in settings) { for (const key in settings) {
s[key] = settings[key] s[key] = settings[key];
} }
} }
@ -31,7 +31,7 @@ function setFromGPS() {
//console.log("."); //console.log(".");
if (gps.fix === 0) return; if (gps.fix === 0) return;
//console.log("fix from GPS"); //console.log("fix from GPS");
s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' }; s = {'lat': gps.lat, 'lon': gps.lon, 'location': 'GPS' };
Bangle.buzz(1500); // buzz on first position Bangle.buzz(1500); // buzz on first position
Bangle.setGPSPower(0, "mylocation"); Bangle.setGPSPower(0, "mylocation");
saveSettings(); saveSettings();
@ -50,6 +50,25 @@ function setFromGPS() {
Bangle.setUI("updown", undefined); Bangle.setUI("updown", undefined);
} }
function setFromWaypoint() {
wpmenu = {
'': { 'title': /*LANG*/'Waypoint' },
'< Back': ()=>{ showMainMenu(); },
};
require("waypoints").load().forEach(wp => {
if (typeof(wp.lat) === 'number' && typeof(wp.lon) === 'number') {
wpmenu[wp.name] = ()=>{
s.location = wp.name;
s.lat = parseFloat(wp.lat);
s.lon = parseFloat(wp.lon);
saveSettings();
showMainMenu();
};
}
});
return E.showMenu(wpmenu);
}
function showMainMenu() { function showMainMenu() {
//console.log("showMainMenu"); //console.log("showMainMenu");
const mainmenu = { const mainmenu = {
@ -58,7 +77,13 @@ function showMainMenu() {
/*LANG*/'City': { /*LANG*/'City': {
value: 0 | locations.indexOf(s.location), value: 0 | locations.indexOf(s.location),
min: 0, max: locations.length - 1, min: 0, max: locations.length - 1,
format: v => locations[v], format: v => {
if (v === -1) {
return s.location;
} else {
return locations[v];
}
},
onchange: v => { onchange: v => {
if (locations[v] !== "???") { if (locations[v] !== "???") {
s.location = locations[v]; s.location = locations[v];
@ -68,7 +93,8 @@ function showMainMenu() {
} }
} }
}, },
/*LANG*/'Set From GPS': ()=>{ setFromGPS(); } /*LANG*/'Set From GPS': ()=>{ setFromGPS(); },
/*LANG*/'Set From Waypoint': ()=>{ setFromWaypoint(); },
}; };
return E.showMenu(mainmenu); return E.showMenu(mainmenu);
} }