diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index 5f1b7a492..874e4699c 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -28,4 +28,5 @@ 0.22: Convert Yes/No On/Off in settings to checkboxes 0.23: Add graphing for HRM, fix some other graphs Altitude graphing now uses barometer altitude if it exists - plotTrack in widget allows track to be drawn in the background (doesn't block execution) \ No newline at end of file + plotTrack in widget allows track to be drawn in the background (doesn't block execution) +0.24: Can now specify `setRecording(true, {force:...` to not show a menu \ No newline at end of file diff --git a/apps/recorder/README.md b/apps/recorder/README.md index 0dd208af5..6da739b1c 100644 --- a/apps/recorder/README.md +++ b/apps/recorder/README.md @@ -1,4 +1,4 @@ -# Recorder +**# Recorder ![icon](app.png) @@ -44,6 +44,16 @@ You can also view some information on the watch. * `Plot Speed` plots speed over time * `Plot HRM` plots heart rate over time +## Usage in code + +As long as widgets are loaded, you can: + +* Call `WIDGETS["recorder"].setRecording(true)` to start recording (it returns a promise, and may show a menu) +* Call `WIDGETS["recorder"].setRecording(true, {force:"new"/"append"/"overwrite")` to start recording (it returns a promise, and will not show a menu) +* Call `WIDGETS["recorder"].setRecording(false)` to stop recording + + + ## Tips When recording GPS, it usually takes several minutes for the watch to get a [GPS fix](https://en.wikipedia.org/wiki/Time_to_first_fix). There is a red satellite symbol, which you will see turn green when you get an actual GPS Fix. You can [upload assistant files](https://banglejs.com/apps/#assisted%20gps%20update) to speed up the time spent on getting a GPS fix. diff --git a/apps/recorder/metadata.json b/apps/recorder/metadata.json index 5a5f48dce..99f1539c6 100644 --- a/apps/recorder/metadata.json +++ b/apps/recorder/metadata.json @@ -2,7 +2,7 @@ "id": "recorder", "name": "Recorder", "shortName": "Recorder", - "version": "0.23", + "version": "0.24", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget", diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 58519e24c..e57f293c7 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -231,35 +231,43 @@ },getRecorders:getRecorders,reload:function() { reload(); Bangle.drawWidgets(); // relayout all widgets - },setRecording:function(isOn, forceAppend) { + },setRecording:function(isOn, options) { + /* options = { + force : [optional] "append"/"new"/"overwrite" - don't ask, just do what's requested + } */ var settings = loadSettings(); - if (isOn && !settings.recording && !settings.file) { - settings.file = "recorder.log0.csv"; - } else if (isOn && !forceAppend && !settings.recording && require("Storage").list(settings.file).length){ - var logfiles=require("Storage").list(/recorder.log.*/); - var maxNumber=0; - for (var c of logfiles){ - maxNumber = Math.max(maxNumber, c.match(/\d+/)[0]); - } - var newFileName; - if (maxNumber < 99){ - newFileName="recorder.log" + (maxNumber + 1) + ".csv"; - updateSettings(settings); - } - var buttons={/*LANG*/"Yes":"overwrite",/*LANG*/"No":"cancel"}; - if (newFileName) buttons[/*LANG*/"New"] = "new"; - buttons[/*LANG*/"Append"] = "append"; - return E.showPrompt(/*LANG*/"Overwrite\nLog " + settings.file.match(/\d+/)[0] + "?",{title:/*LANG*/"Recorder",buttons:buttons}).then(selection=>{ - if (selection==="cancel") return false; // just cancel - if (selection==="overwrite") + options = options||{}; + if (isOn && !settings.recording) { + if (!settings.file) { // if no filename set + settings.file = "recorder.log0.csv"; + } else if (require("Storage").list(settings.file).length){ // if file exists + if (!options.force) { // if not forced, ask the question + g.reset(); // work around bug in 2v17 and earlier where bg color wasn't reset + return E.showPrompt( + /*LANG*/"Overwrite\nLog " + settings.file.match(/\d+/)[0] + "?", + { title:/*LANG*/"Recorder", + buttons:{/*LANG*/"Yes":"overwrite",/*LANG*/"No":"cancel",/*LANG*/"New":"new",/*LANG*/"Append":"append"} + }).then(selection=>{ + if (selection==="cancel") return false; // just cancel + if (selection==="overwrite") return WIDGETS["recorder"].setRecording(1,{force:"overwrite"}); + if (selection==="new") return WIDGETS["recorder"].setRecording(1,{force:"new"}); + if (selection==="append") return WIDGETS["recorder"].setRecording(1,{force:"append"}); + throw new Error("Unknown response!"); + }); + } else if (options.force=="append") { + // do nothing, filename is the same - we are good + } else if (options.force=="overwrite") { + // wipe the file require("Storage").open(settings.file,"r").erase(); - if (selection==="new"){ + } else if (options.force=="new") { + // new file - find the max log file number and add one + var maxNumber=0; + require("Storage").list(/recorder.log.*/).forEach( fn => maxNumber = Math.max(maxNumber, fn.match(/\d+/)[0]) ); + var newFileName = "recorder.log" + (maxNumber + 1) + ".csv"; + // FIXME: use date? settings.file = newFileName; - updateSettings(settings); - } - // if (selection==="append") // we do nothing - all is fine - return WIDGETS["recorder"].setRecording(1,true/*force append*/); - }); + } else throw new Error("Unknown options.force, "+options.force); + } } settings.recording = isOn; updateSettings(settings); diff --git a/apps/run/app.js b/apps/run/app.js index 73278566f..507e8581a 100644 --- a/apps/run/app.js +++ b/apps/run/app.js @@ -71,7 +71,7 @@ function onStartStop() { if (running) { isMenuDisplayed = true; promise = promise. - then(() => WIDGETS["recorder"].setRecording(true)). + then(() => WIDGETS["recorder"].setRecording(true, { force : shouldResume?"append":undefined })). then(() => { isMenuDisplayed = false; layout.setUI(); // grab our input handling again