Browse Source

support multiple data sources
taken from https://github.com/ffrgb/meshviewer/commit/5708b6387355d1ca709955379b1b76bd7abebfb8?diff=unified

Florian Rittmeier 7 years ago
parent
commit
da8b7aee5f
1 changed files with 42 additions and 8 deletions
  1. 42 8
      lib/main.js

+ 42 - 8
lib/main.js

@@ -2,12 +2,39 @@ define(["moment", "router", "leaflet", "gui", "numeral"],
 function (moment, Router, L, GUI, numeral) {
   return function (config) {
     function handleData(data) {
-      var dataNodes = data[0]
-      var dataGraph = data[1]
+      var dataNodes = {}
+      dataNodes.nodes = []
+      var dataGraph = {}
+      dataGraph.batadv = {}
+      dataGraph.batadv.nodes = []
+      dataGraph.batadv.links = []
 
-      if (dataNodes.version !== 2 || dataGraph.version !== 1) {
-        var err = "Unsupported nodes or graph version: " + dataNodes.version + " " + dataGraph.version
-        throw err
+
+      function rearrangeLinks(d) {
+        d.source += dataGraph.batadv.nodes.length
+        d.target += dataGraph.batadv.nodes.length
+      }
+
+      for (var i = 0; i < data.length; ++i) {
+        var vererr
+        if(i % 2)
+          if (data[i].version !== 1) {
+            vererr = "Unsupported graph version: " + data[i].version
+            console.log(vererr) //silent fail
+          } else {
+            data[i].batadv.links.forEach(rearrangeLinks)
+            dataGraph.batadv.nodes = dataGraph.batadv.nodes.concat(data[i].batadv.nodes)
+            dataGraph.batadv.links = dataGraph.batadv.links.concat(data[i].batadv.links)
+            dataGraph.timestamp = data[i].timestamp
+          }
+        else
+          if (data[i].version !== 2) {
+            vererr = "Unsupported nodes version: " + data[i].version
+            console.log(vererr) //silent fail
+          } else {
+            dataNodes.nodes = dataNodes.nodes.concat(data[i].nodes)
+            dataNodes.timestamp = data[i].timestamp
+          }
       }
 
       var nodes = dataNodes.nodes.filter( function (d) {
@@ -96,9 +123,16 @@ function (moment, Router, L, GUI, numeral) {
 
     var router = new Router()
 
-    var urls = [ config.dataPath + "nodes.json",
-                 config.dataPath + "graph.json"
-               ]
+    var urls = []
+
+    if (typeof config.dataPath === "string" || config.dataPath instanceof String)
+      config.dataPath = [config.dataPath]
+
+    for (var i in config.dataPath) {
+      urls.push(config.dataPath[i] + "nodes.json")
+      urls.push(config.dataPath[i] + "graph.json")
+    }
+
     function update() {
       return Promise.all(urls.map(getJSON))
                     .then(handleData)