Skip to content

Commit 26b4fe1

Browse files
authored
Merge pull request #4049 from bobrippling/recorder/reload-map
recorder: load full map and add author info
2 parents dee5294 + ae1a6d9 commit 26b4fe1

File tree

1 file changed

+33
-24
lines changed

1 file changed

+33
-24
lines changed

apps/recorder/interface.html

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -411,10 +411,19 @@
411411
// check track validity after filtering
412412
if (!track?.[0]?.Time) return showToast("Error in trackfile (no time or empty).", "error");
413413
let lastTime = 0;
414+
//const trackType = ... -> `<type>${trackType}</type>`
414415
const gpx = `<?xml version="1.0" encoding="UTF-8"?>
415416
<gpx creator="Bangle.js" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
416417
<metadata><time>${track[0].Time.toISOString()}</time></metadata>
417-
<trk><name>${title}</name><trkseg>${track.map(pt => {
418+
<metadata>
419+
<author>
420+
<name>Bangle.js</name>
421+
<link href="https://banglejs.com/apps/?id=recorder" />
422+
</author>
423+
</metadata>
424+
<trk>
425+
<name>${title}</name>
426+
<trkseg>${track.map(pt => {
418427
// Calculate cadence (steps per minute) from step count
419428
// Formula: (steps in interval * 60 seconds * 1000ms) / time elapsed in ms
420429
// Simplified to: steps * 30000 / time_ms (since 60 * 1000 / 2 = 30000)
@@ -455,7 +464,7 @@
455464
return o;
456465
}
457466

458-
async function downloadTrack(filename) {
467+
async function downloadTrack(filename) { // filename: string
459468
function parse(data) {
460469
const lines = data.trim().split("\n"), headers = lines.shift().split(",");
461470
return lines.map(l=>trackLineToObject(headers, l)).filter(t => t.Time);
@@ -478,7 +487,7 @@
478487
return document.getElementById(`track-download-${trackNumber}`).checked;
479488
}
480489

481-
async function downloadTracks(tracks, saveCb) {
490+
async function downloadTracks(tracks, saveCb) { // tracks: [{ filename: string, number: number }]
482491
for(const track of tracks){
483492
const lines = await downloadTrack(track.filename);
484493
const title = `Bangle.js Track ${track.number}`;
@@ -710,7 +719,7 @@
710719
if (lIdx >= 0) {
711720
var tries = 100;
712721
var l = data;
713-
while (l && l.split(",")[lIdx]=="" && tries--)
722+
while (l && l.split(",")[lIdx]==="" && tries--)
714723
l = f.readLine();
715724
if (l) data = l;
716725
}
@@ -719,6 +728,7 @@
719728
if (!trackInfo || !("headers" in trackInfo)) {
720729
showToast("Error loading track list.", "error");
721730
resolve();
731+
return;
722732
}
723733
trackInfo.headers = trackInfo.headers.split(",");
724734
trackList.push({
@@ -842,23 +852,21 @@ <h2>Settings</h2>
842852
attachTrackButtonListeners(trackContainer);
843853

844854
downloadTrack(track.filename).then(fullTrack => {
845-
if (trackData.Latitude) {
846-
const coordinates = fullTrack
847-
.filter(hasValidGPS)
848-
.map(pt => [parseFloat(pt.Latitude), parseFloat(pt.Longitude)]);
849-
850-
if (coordinates.length > 0) {
851-
createLeafletMap(`map-${track.number}`, coordinates, fullTrack);
852-
853-
let distance = 0;
854-
for (let i = 1; i < coordinates.length; i++) distance += L.latLng(coordinates[i-1]).distanceTo(L.latLng(coordinates[i]));
855-
const duration = fullTrack[fullTrack.length-1].Time - fullTrack[0].Time;
856-
const hours = Math.floor(duration / 3600000), minutes = Math.floor((duration % 3600000) / 60000);
857-
const statsEl = document.getElementById(`stats-${track.number}`);
858-
if (statsEl) {
859-
const d = convertDistance(distance/1000);
860-
statsEl.innerHTML = `<strong>Distance:</strong> ${d.value.toFixed(2)} ${d.unit} | <strong>Duration:</strong> ${hours}h ${minutes}m | <strong>Points:</strong> ${coordinates.length}`;
861-
}
855+
const coordinates = fullTrack
856+
.filter(hasValidGPS)
857+
.map(pt => [parseFloat(pt.Latitude), parseFloat(pt.Longitude)]);
858+
859+
if (coordinates.length > 0) {
860+
createLeafletMap(`map-${track.number}`, coordinates, fullTrack);
861+
862+
let distance = 0;
863+
for (let i = 1; i < coordinates.length; i++) distance += L.latLng(coordinates[i-1]).distanceTo(L.latLng(coordinates[i]));
864+
const duration = fullTrack[fullTrack.length-1].Time - fullTrack[0].Time;
865+
const hours = Math.floor(duration / 3600000), minutes = Math.floor((duration % 3600000) / 60000);
866+
const statsEl = document.getElementById(`stats-${track.number}`);
867+
if (statsEl) {
868+
const d = convertDistance(distance/1000);
869+
statsEl.innerHTML = `<strong>Distance:</strong> ${d.value.toFixed(2)} ${d.unit} | <strong>Duration:</strong> ${hours}h ${minutes}m | <strong>Points:</strong> ${coordinates.length}`;
862870
}
863871
}
864872

@@ -902,18 +910,19 @@ <h2>Settings</h2>
902910

903911
if (!filename || !trackid) return;
904912

913+
const tracks = [{ filename, number: trackid }];
905914
switch(task) {
906915
case "delete":
907916
await confirmDelete(button, [filename]);
908917
break;
909918
case "downloadkml":
910-
await downloadTracks([filename], track => saveKML(track, `Bangle.js Track ${trackid}`));
919+
await downloadTracks(tracks, track => saveKML(track, `Bangle.js Track ${trackid}`));
911920
break;
912921
case "downloadgpx":
913-
await downloadTracks([filename], track => saveGPX(track, `Bangle.js Track ${trackid}`));
922+
await downloadTracks(tracks, track => saveGPX(track, `Bangle.js Track ${trackid}`));
914923
break;
915924
case "downloadcsv":
916-
await downloadTracks([filename], track => saveCSV(track, `Bangle.js Track ${trackid}`));
925+
await downloadTracks(tracks, track => saveCSV(track, `Bangle.js Track ${trackid}`));
917926
break;
918927
}
919928
});

0 commit comments

Comments
 (0)