mirror of https://github.com/espruino/BangleApps
110 lines
2.9 KiB
JavaScript
110 lines
2.9 KiB
JavaScript
(function(back) {
|
|
|
|
const SETTINGS_FILE = "mylocation.json";
|
|
let settings;
|
|
|
|
// initialize with default settings...
|
|
let s = {
|
|
'lat': 51.5072,
|
|
'lon': 0.1276,
|
|
'location': "London"
|
|
};
|
|
|
|
function loadSettings() {
|
|
settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {};
|
|
for (const key in settings) {
|
|
s[key] = settings[key];
|
|
}
|
|
}
|
|
|
|
function saveSettings() {
|
|
settings = s;
|
|
require('Storage').write(SETTINGS_FILE, settings);
|
|
}
|
|
|
|
const locations = ["London" ,"Newcastle","Edinburgh", "Paris" , "New York" , "Tokyo" , "Frankfurt", "Auckland", "???"];
|
|
const lats = [ 51.5072 , 54.9783 , 55.9533 , 48.8566 , 40.7128 , 35.6762 , 50.1236 , -36.9 , 0.0 ];
|
|
const lons = [ -0.1276 , -1.6178 , -3.1883 , 2.3522 , -74.0060 , 139.6503 , 8.6553 , 174.7832 , 0.0 ];
|
|
|
|
function setFromGPS() {
|
|
Bangle.on('GPS', (gps) => {
|
|
//console.log(".");
|
|
if (gps.fix === 0) return;
|
|
//console.log("fix from GPS");
|
|
s = {'lat': gps.lat, 'lon': gps.lon, 'location': 'GPS' };
|
|
Bangle.buzz(1500); // buzz on first position
|
|
Bangle.setGPSPower(0, "mylocation");
|
|
saveSettings();
|
|
|
|
Bangle.setUI("updown", ()=>{ load(); });
|
|
E.showPrompt(/*LANG*/"Location has been saved from the GPS fix",{
|
|
title:/*LANG*/"Location Saved",
|
|
buttons : {/*LANG*/"OK":1}
|
|
}).then(function(v) {
|
|
load(); // load default clock
|
|
});
|
|
});
|
|
|
|
Bangle.setGPSPower(1, "mylocation");
|
|
E.showMessage(/*LANG*/"Waiting for GPS fix. Place watch in the open. Could take 10 minutes. Long press to abort", "GPS Running");
|
|
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() {
|
|
//console.log("showMainMenu");
|
|
const mainmenu = {
|
|
'': { 'title': /*LANG*/'My Location' },
|
|
'< Back': ()=>{ back(); },
|
|
/*LANG*/'City': {
|
|
value: 0 | locations.indexOf(s.location),
|
|
min: 0, max: locations.length - 1,
|
|
format: v => {
|
|
if (v === -1) {
|
|
return s.location;
|
|
} else {
|
|
return locations[v];
|
|
}
|
|
},
|
|
onchange: v => {
|
|
if (locations[v] !== "???") {
|
|
s.location = locations[v];
|
|
s.lat = lats[v];
|
|
s.lon = lons[v];
|
|
saveSettings();
|
|
}
|
|
}
|
|
},
|
|
/*LANG*/'Set From GPS': ()=>{ setFromGPS(); }
|
|
};
|
|
try {
|
|
require("waypoints");
|
|
mainmenu[/*LANG*/'Set From Waypoint'] = ()=>{ setFromWaypoint(); };
|
|
} catch(err) {
|
|
// waypoints not installed, thats ok
|
|
}
|
|
return E.showMenu(mainmenu);
|
|
}
|
|
|
|
loadSettings();
|
|
showMainMenu();
|
|
})
|