reset upload status when starting upload; load track in reverse order and once we...
[lantea.git] / js / map.js
index 716a0166db49a22a0278a605f73e20d20515766f..3cc00c5384c6fd6b97bbf00496a5d91404819f6b 100644 (file)
--- a/js/map.js
+++ b/js/map.js
@@ -135,8 +135,10 @@ function loadPrefs(aEvent) {
     gPrefs.get("position", function(aValue) {
       if (aValue) {
         gPos = aValue;
-        gWaitCounter--;
       }
+      gWaitCounter--;
+      var throwEv = new CustomEvent("prefs-step");
+      gAction.dispatchEvent(throwEv);
     });
     gWaitCounter++;
     gPrefs.get("center_map", function(aValue) {
@@ -160,15 +162,26 @@ function loadPrefs(aEvent) {
       gAction.dispatchEvent(throwEv);
     });
     gWaitCounter++;
-    gTrackStore.getList(function(aTPoints) {
-      if (gDebug)
-        console.log(aTPoints.length + " points loaded.");
-      if (aTPoints.length) {
-        gTrack = aTPoints;
+    var trackLoadStarted = false;
+    gTrackStore.getListStepped(function(aTPoint) {
+      if (aTPoint) {
+        // Add in front and return new length.
+        var tracklen = gTrack.unshift(aTPoint);
+        // Redraw track every 100 values (initial paint will do first anyhow).
+        if (tracklen % 100 == 0)
+          drawTrack();
+      }
+      else {
+        // Last point received.
+        drawTrack();
+      }
+      if (!trackLoadStarted) {
+        // We have the most recent point, if present, rest will load async.
+        trackLoadStarted = true;
+        gWaitCounter--;
+        var throwEv = new CustomEvent("prefs-step");
+        gAction.dispatchEvent(throwEv);
       }
-      gWaitCounter--;
-      var throwEv = new CustomEvent("prefs-step");
-      gAction.dispatchEvent(throwEv);
     });
   }
 }
@@ -353,6 +366,10 @@ function drawMap(aPixels, aOverdraw) {
       }
     }
   }
+  drawTrack();
+}
+
+function drawTrack() {
   gLastDrawnPoint = null;
   gCurPosMapCache = undefined;
   gTrackContext.clearRect(0, 0, gTrackCanvas.width, gTrackCanvas.height);
@@ -754,7 +771,7 @@ function endTracking() {
 function clearTrack() {
   gTrack = [];
   gTrackStore.clear();
-  drawMap({left: 0, right: 0, top: 0, bottom: 0});
+  drawTrack();
 }
 
 var gTileService = {