diff --git a/README.md b/README.md index 223eac69c..3f6c82c02 100644 --- a/README.md +++ b/README.md @@ -385,8 +385,6 @@ That way removing the app also cleans up `app.settings.json`. - Need to save state? Use the `E.on('kill',...)` event to save JSON to a file called `7chname.json`, then load it at startup. -- 'Welcome' apps define a file called `welcome.js` which the booloader picks up. This then chain-loads the welcome app itself. - - 'Alarm' apps define a file called `alarm.js` which handles the actual alarm window. - Locale is handled by `require("locale")`. An app may create a `locale` file in Storage which is diff --git a/apps.json b/apps.json index 4f8ad0dba..2413febeb 100644 --- a/apps.json +++ b/apps.json @@ -2,7 +2,7 @@ { "id": "boot", "name": "Bootloader", "icon": "bootloader.png", - "version":"0.13", + "version":"0.14", "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings", "tags": "tool,system", "type":"bootloader", @@ -78,12 +78,12 @@ { "id": "welcome", "name": "Welcome", "icon": "app.png", - "version":"0.05", + "version":"0.06", "description": "Appears at first boot and explains how to use Bangle.js", "tags": "start,welcome", "allow_emulator":true, "storage": [ - {"name":"welcome.js","url":"welcome.js"}, + {"name":"welcome.boot.js","url":"boot.js"}, {"name":"welcome.app.js","url":"app.js"}, {"name":"welcome.settings.js","url":"settings.js"}, {"name":"welcome.img","url":"app-icon.js","evaluate":true} @@ -504,12 +504,13 @@ "id": "ncstart", "name": "NCEU Startup", "icon": "start.png", - "version":"0.02", + "version":"0.03", "description": "NodeConfEU 2019 'First Start' Sequence", "tags": "start,welcome", "storage": [ - {"name":"welcome.js","url":"welcome.js"}, {"name":"ncstart.app.js","url":"start.js"}, + {"name":"ncstart.boot.js","url":"boot.js"}, + {"name":"ncstart.settings.js","url":"settings.js"}, {"name":"ncstart.img","url":"start-icon.js","evaluate":true}, {"name":"nc-bangle.img","url":"start-bangle.js","evaluate":true}, {"name":"nc-nceu.img","url":"start-nceu.js","evaluate":true}, diff --git a/apps/boot/ChangeLog b/apps/boot/ChangeLog index 17023a8dc..7ab79a5a5 100644 --- a/apps/boot/ChangeLog +++ b/apps/boot/ChangeLog @@ -12,3 +12,4 @@ 0.12: Add an event on BTN2 to open launcher when no clock detected (fix #147) 0.13: Now automatically load *.boot.js at startup Move alarm code into alarm.boot.js +0.14: Move welcome loaders to *.boot.js diff --git a/apps/boot/boot0.js b/apps/boot/boot0.js index 729b7aaf2..dd3b3a9ba 100644 --- a/apps/boot/boot0.js +++ b/apps/boot/boot0.js @@ -40,6 +40,6 @@ delete s; // stop users doing bad things! global.save = function() { throw new Error("You can't use save() on Bangle.js without overwriting the bootloader!"); } // Load *.boot.js files -var clockApps = require('Storage').list(/\.boot\.js/).map(bootFile=>{ +require('Storage').list(/\.boot\.js/).map(bootFile=>{ eval(require('Storage').read(bootFile)); }); diff --git a/apps/boot/bootloader.js b/apps/boot/bootloader.js index 76d655671..c16984f10 100644 --- a/apps/boot/bootloader.js +++ b/apps/boot/bootloader.js @@ -1,42 +1,38 @@ // This runs after a 'fresh' boot var settings=require("Storage").readJSON('setting.json',1)||{}; -if (!settings.welcomed && require("Storage").read("welcome.js")!==undefined) { - setTimeout(()=>load("welcome.js")); -} else { - // load clock if specified - var clockApp = settings.clock; - if (clockApp) clockApp = require("Storage").read(clockApp) - if (!clockApp) { - var clockApps = require("Storage").list(/\.info$/).map(app=>require("Storage").readJSON(app,1)||{}).filter(app=>app.type=="clock").sort((a, b) => a.sortorder - b.sortorder); - if (clockApps && clockApps.length > 0) - clockApp = require("Storage").read(clockApps[0].src); - delete clockApps; - } - if (!clockApp) clockApp=`E.showMessage("No Clock Found"); - setWatch(() => { - Bangle.showLauncher(); - }, BTN2, {repeat:false,edge:"falling"});) - `; - delete settings; - // check to see if our clock is wrong - if it is use GPS time - if ((new Date()).getFullYear()==1970) { - E.showMessage("Searching for\nGPS time"); - Bangle.on('GPS',function cb(g) { - Bangle.setGPSPower(0); - Bangle.removeListener("GPS",cb); - if (!g.time || (g.time.getFullYear()<2000) || - (g.time.getFullYear()==2250)) { - // GPS receiver's time not set - just boot clock anyway - eval(clockApp);delete clockApp; - return; - } - // We have a GPS time. Set time and reboot (to load alarms properly) - setTime(g.time.getTime()/1000); - load(); - }); - Bangle.setGPSPower(1); - } else { - eval(clockApp); - delete clockApp; - } +// load clock if specified +var clockApp = settings.clock; +if (clockApp) clockApp = require("Storage").read(clockApp) +if (!clockApp) { + var clockApps = require("Storage").list(/\.info$/).map(app=>require("Storage").readJSON(app,1)||{}).filter(app=>app.type=="clock").sort((a, b) => a.sortorder - b.sortorder); + if (clockApps && clockApps.length > 0) + clockApp = require("Storage").read(clockApps[0].src); + delete clockApps; +} +if (!clockApp) clockApp=`E.showMessage("No Clock Found"); +setWatch(() => { + Bangle.showLauncher(); +}, BTN2, {repeat:false,edge:"falling"});) +`; +delete settings; +// check to see if our clock is wrong - if it is use GPS time +if ((new Date()).getFullYear()==1970) { + E.showMessage("Searching for\nGPS time"); + Bangle.on('GPS',function cb(g) { + Bangle.setGPSPower(0); + Bangle.removeListener("GPS",cb); + if (!g.time || (g.time.getFullYear()<2000) || + (g.time.getFullYear()==2250)) { + // GPS receiver's time not set - just boot clock anyway + eval(clockApp);delete clockApp; + return; + } + // We have a GPS time. Set time and reboot (to load alarms properly) + setTime(g.time.getTime()/1000); + load(); + }); + Bangle.setGPSPower(1); +} else { + eval(clockApp); + delete clockApp; } diff --git a/apps/ncstart/ChangeLog b/apps/ncstart/ChangeLog index ec926ceed..553f7388a 100644 --- a/apps/ncstart/ChangeLog +++ b/apps/ncstart/ChangeLog @@ -1,2 +1,4 @@ 0.02: Modified for use with new bootloader and firmware Renamed as nodeconf-specific +0.03: Move configuration into App/widget settings + Move loader into welcome.boot.js diff --git a/apps/ncstart/boot.js b/apps/ncstart/boot.js new file mode 100644 index 000000000..dbb70d213 --- /dev/null +++ b/apps/ncstart/boot.js @@ -0,0 +1,10 @@ +(function() { + let s = require('Storage').readJSON('setting.json', 1) || {} + if (!s.welcomed && require('Storage').read('ncstart.app.js')) { + setTimeout(() => { + s.welcomed = true + require('Storage').write('setting.json', s) + load('ncstart.app.js') + }) + } +})() diff --git a/apps/ncstart/settings.js b/apps/ncstart/settings.js new file mode 100644 index 000000000..284262634 --- /dev/null +++ b/apps/ncstart/settings.js @@ -0,0 +1,16 @@ +// The welcome app is special, and gets to use global settings +(function(back) { + let settings = require('Storage').readJSON('setting.json', 1) || {} + E.showMenu({ + '': { 'title': 'NCEU Startup' }, + 'Run again': { + value: !settings.welcomed, + format: v => v ? 'Yes' : 'No', + onchange: v => { + settings.welcomed = v ? undefined : true + require('Storage').write('setting.json', settings) + }, + }, + '< Back': back, + }) +}) diff --git a/apps/ncstart/start.js b/apps/ncstart/start.js index f1d8fb52e..d2d713cb2 100644 --- a/apps/ncstart/start.js +++ b/apps/ncstart/start.js @@ -114,15 +114,7 @@ function info() { }); } -function cleanup() { - var settings = require("Storage").readJSON('setting.json',1)||{}; - settings.welcomed = true; - require("Storage").write('setting.json',settings); - return Promise.resolve(); -} - welcome() .then(logos) .then(info) - .then(cleanup) .then(load); diff --git a/apps/ncstart/welcome.js b/apps/ncstart/welcome.js deleted file mode 100644 index 1117d16c6..000000000 --- a/apps/ncstart/welcome.js +++ /dev/null @@ -1 +0,0 @@ -eval(require("Storage").read("ncstart.app.js")) diff --git a/apps/welcome/ChangeLog b/apps/welcome/ChangeLog index 34f6e3a82..89f3ab2c9 100644 --- a/apps/welcome/ChangeLog +++ b/apps/welcome/ChangeLog @@ -3,3 +3,4 @@ 0.03: BTN3 now won't restart when at the end 0.04: Fix regression after tweaks to Storage.readJSON 0.05: Move configuration into App/widget settings +0.06: Move loader into welcome.boot.js diff --git a/apps/welcome/app.js b/apps/welcome/app.js index 44705b94c..93a4234d8 100644 --- a/apps/welcome/app.js +++ b/apps/welcome/app.js @@ -283,16 +283,12 @@ setWatch(()=>move(1), BTN3, {repeat:true}); setWatch(()=>{ // If we're on the last page if (sceneNumber == scenes.length-1) { - var settings = require("Storage").readJSON('setting.json',1)||{}; - settings.welcomed = true; - require("Storage").write('setting.json',settings); load(); } }, BTN2, {repeat:true,edge:"rising"}); setWatch(()=>move(-1), BTN1, {repeat:true}); - Bangle.setLCDTimeout(0); Bangle.setLCDPower(1); move(0); diff --git a/apps/welcome/boot.js b/apps/welcome/boot.js new file mode 100644 index 000000000..ecf98b555 --- /dev/null +++ b/apps/welcome/boot.js @@ -0,0 +1,10 @@ +(function() { + let s = require('Storage').readJSON('setting.json', 1) || {} + if (!s.welcomed && require('Storage').read('welcome.app.js')) { + setTimeout(() => { + s.welcomed = true + require('Storage').write('setting.json', s) + load('welcome.app.js') + }) + } +})() diff --git a/apps/welcome/welcome.js b/apps/welcome/welcome.js deleted file mode 100644 index 6a56c2954..000000000 --- a/apps/welcome/welcome.js +++ /dev/null @@ -1 +0,0 @@ -eval(require("Storage").read("welcome.app.js"))