|
@@ -516,12 +516,18 @@ const Browser = (() => {
|
|
|
const tracks = dirContents[dirId].tracks;
|
|
const tracks = dirContents[dirId].tracks;
|
|
|
if (tracks.length === 0) return;
|
|
if (tracks.length === 0) return;
|
|
|
|
|
|
|
|
- await Promise.all(tracks.map(async track => {
|
|
|
|
|
- if (!MapView.hasTrack(track.id)) {
|
|
|
|
|
- try {
|
|
|
|
|
- const data = await API.getTrackPoints(track.id);
|
|
|
|
|
- MapView.addTrack(data, track.id);
|
|
|
|
|
- } catch (e) { /* ignore individual errors */ }
|
|
|
|
|
|
|
+ const toLoad = tracks.filter(t => !MapView.hasTrack(t.id));
|
|
|
|
|
+ toLoad.forEach(t => { loadingTrackIds.add(t.id); setTrackItemLoading(t.id, true); });
|
|
|
|
|
+
|
|
|
|
|
+ await Promise.all(toLoad.map(async track => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const data = await API.getTrackPoints(track.id);
|
|
|
|
|
+ trackDataCache[track.id] = data;
|
|
|
|
|
+ MapView.addTrack(data, track.id);
|
|
|
|
|
+ } catch (e) { /* ignore individual errors */ }
|
|
|
|
|
+ finally {
|
|
|
|
|
+ loadingTrackIds.delete(track.id);
|
|
|
|
|
+ setTrackItemLoading(track.id, false);
|
|
|
}
|
|
}
|
|
|
}));
|
|
}));
|
|
|
MapView.fitAll();
|
|
MapView.fitAll();
|