From dd96e33774bee9c0ce0aea9ffe336ce18a0d631c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 6 Nov 2023 14:55:16 +0000 Subject: [PATCH] 0.33: Ensure that a new file is always created if the stuff that's being recorded has changed (fix #3081) --- apps/recorder/ChangeLog | 3 ++- apps/recorder/metadata.json | 2 +- apps/recorder/widget.js | 34 ++++++++++++++++++++-------------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index c3ea6041a..665d11afa 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -38,4 +38,5 @@ 0.30: Add clock info for showing and toggling recording state 0.31: Ensure that background-drawn tracks can get cancelled, and draw less at a time to make updates smoother plotTrack now draws the current track even if you're not actively recording -0.32: Add cadence data to output files \ No newline at end of file +0.32: Add cadence data to output files +0.33: Ensure that a new file is always created if the stuff that's being recorded has changed (fix #3081) \ No newline at end of file diff --git a/apps/recorder/metadata.json b/apps/recorder/metadata.json index a95ddf470..33034ae34 100644 --- a/apps/recorder/metadata.json +++ b/apps/recorder/metadata.json @@ -2,7 +2,7 @@ "id": "recorder", "name": "Recorder", "shortName": "Recorder", - "version": "0.32", + "version": "0.33", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget,clkinfo", diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 2525a96e4..585b97d52 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -159,6 +159,21 @@ return recorders; } + let getActiveRecorders = function() { + let activeRecorders = []; + let recorders = getRecorders(); + settings.record.forEach(r => { + var recorder = recorders[r]; + if (!recorder) { + console.log(/*LANG*/"Recorder for "+E.toJS(r)+/*LANG*/"+not found"); + return; + } + activeRecorders.push(recorder()); + }); + return activeRecorders; + }; + let getCSVHeaders = activeRecorders => ["Time"].concat(activeRecorders.map(r=>r.fields)); + let writeLog = function() { entriesWritten++; WIDGETS["recorder"].draw(); @@ -189,17 +204,9 @@ if (settings.recording) { // set up recorders - var recorders = getRecorders(); // TODO: order?? - settings.record.forEach(r => { - var recorder = recorders[r]; - if (!recorder) { - console.log(/*LANG*/"Recorder for "+E.toJS(r)+/*LANG*/"+not found"); - return; - } - var activeRecorder = recorder(); + activeRecorders = getActiveRecorders(); + activeRecorders.forEach(activeRecorder => { activeRecorder.start(); - activeRecorders.push(activeRecorder); - // TODO: write field names? }); WIDGETS["recorder"].width = 15 + ((activeRecorders.length+1)>>1)*12; // 12px per recorder // open/create file @@ -209,9 +216,7 @@ } else { storageFile = require("Storage").open(settings.file,"w"); // New file - write headers - var fields = ["Time"]; - activeRecorders.forEach(recorder => fields.push.apply(fields,recorder.fields)); - storageFile.write(fields.join(",")+"\n"); + storageFile.write(getCSVHeaders(activeRecorders).join(",")+"\n"); } // start recording... WIDGETS["recorder"].draw(); @@ -246,7 +251,8 @@ // if no filename set or date different, set up a new filename settings.file = getTrackFilename(); } - if (require("Storage").list(settings.file).length){ // if file exists + var headers = require("Storage").open(settings.file,"r").readLine(); + if (headers && headers.trim()==getCSVHeaders(getActiveRecorders()).join(",")){ // if file exists AND the headers match (#3081) 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(