reset upload status when starting upload; load track in reverse order and once we...
authorRobert Kaiser <kairo@kairo.at>
Thu, 25 Jul 2013 00:51:54 +0000 (02:51 +0200)
committerRobert Kaiser <kairo@kairo.at>
Thu, 25 Jul 2013 00:51:54 +0000 (02:51 +0200)
js/map.js
js/ui.js

index 41a413d7aa1481e1c6cdf41c9e75663c35d9afd3..3cc00c5384c6fd6b97bbf00496a5d91404819f6b 100644 (file)
--- a/js/map.js
+++ b/js/map.js
@@ -162,15 +162,26 @@ function loadPrefs(aEvent) {
       gAction.dispatchEvent(throwEv);
     });
     gWaitCounter++;
       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);
     });
   }
 }
     });
   }
 }
@@ -355,6 +366,10 @@ function drawMap(aPixels, aOverdraw) {
       }
     }
   }
       }
     }
   }
+  drawTrack();
+}
+
+function drawTrack() {
   gLastDrawnPoint = null;
   gCurPosMapCache = undefined;
   gTrackContext.clearRect(0, 0, gTrackCanvas.width, gTrackCanvas.height);
   gLastDrawnPoint = null;
   gCurPosMapCache = undefined;
   gTrackContext.clearRect(0, 0, gTrackCanvas.width, gTrackCanvas.height);
@@ -756,7 +771,7 @@ function endTracking() {
 function clearTrack() {
   gTrack = [];
   gTrackStore.clear();
 function clearTrack() {
   gTrack = [];
   gTrackStore.clear();
-  drawMap({left: 0, right: 0, top: 0, bottom: 0});
+  drawTrack();
 }
 
 var gTileService = {
 }
 
 var gTileService = {
index 560f48c9d8f0f461ac620f0b53cc79a23263ae8e..f0d2b189b0d97773caed08ecc7d61b741420600b 100644 (file)
--- a/js/ui.js
+++ b/js/ui.js
@@ -307,11 +307,19 @@ function saveTrackDump() {
 }
 
 function uploadTrack() {
 }
 
 function uploadTrack() {
+  // Hide all areas in the dialog.
   var dia = document.getElementById("dialogArea");
   var areas = dia.children;
   for (var i = 0; i <= areas.length - 1; i++) {
     areas[i].style.display = "none";
   }
   var dia = document.getElementById("dialogArea");
   var areas = dia.children;
   for (var i = 0; i <= areas.length - 1; i++) {
     areas[i].style.display = "none";
   }
+  // Reset all the fields in the status area.
+  document.getElementById("uploadStatusCloseButton").disabled = true;
+  document.getElementById("uploadInProgress").style.display = "block";
+  document.getElementById("uploadSuccess").style.display = "none";
+  document.getElementById("uploadErrorMsg").textContent = "";
+  document.getElementById("uploadError").style.display = "none";
+  // Now show the status area.
   document.getElementById("uploadStatus").style.display = "block";
 
   // See http://wiki.openstreetmap.org/wiki/Api06#Uploading_traces
   document.getElementById("uploadStatus").style.display = "block";
 
   // See http://wiki.openstreetmap.org/wiki/Api06#Uploading_traces
@@ -445,6 +453,24 @@ var gTrackStore = {
     }
   },
 
     }
   },
 
+  getListStepped: function(aCallback) {
+    if (!mainDB)
+      return;
+    var transaction = mainDB.transaction([this.objStore]);
+    var objStore = transaction.objectStore(this.objStore);
+    // Use cursor in reverse direction (so we get the most recent position first)
+    objStore.openCursor(null, "prev").onsuccess = function(event) {
+      var cursor = event.target.result;
+      if (cursor) {
+        aCallback(cursor.value);
+        cursor.continue();
+      }
+      else {
+        aCallback(null);
+      }
+    };
+  },
+
   push: function(aValue, aCallback) {
     if (!mainDB)
       return;
   push: function(aValue, aCallback) {
     if (!mainDB)
       return;