support upstream json format
authorPaul Spooren <mail@aparcar.org>
Sun, 24 May 2020 22:27:41 +0000 (12:27 -1000)
committerMoritz Warning <moritzwarning@web.de>
Wed, 3 Jun 2020 10:41:33 +0000 (12:41 +0200)
Signed-off-by: Paul Spooren <mail@aparcar.org>
config.js
index.js

index d5e6891b54af305e3722215198fec68c8209c1e0..7a19d500b316af0366cbdef8765454205ab25e7f 100644 (file)
--- a/config.js
+++ b/config.js
@@ -4,6 +4,8 @@ var config = {
   language: 'en',
   // Show help text for images
   showHelp: true,
+  // base URL
+  base_url: 'https://downloads.openwrt.org',
   // Files to get data from
   versions: {
   //'SNAPSHOT': '/api/names/SNAPSHOT', // when using sasu backend
index ce5f4b41f14dbd63980786d050e5551ac5997ad0..df13208a678f2fb30ff7c020f0e10c05e3d2dbb2 100644 (file)
--- a/index.js
+++ b/index.js
@@ -17,22 +17,30 @@ function split(str) {
   return str.match(/[^\s,]+/g) || [];
 }
 
+function get_model_titles(titles) {
+  return titles.map(e => {
+    if (e.title) {
+      return e.title;
+    } else {
+      return ((e.vendor || '') + ' ' + (e.model || '') + ' ' + (e.variant || '')).trim();
+    }
+  }).join(' / ');
+}
+
+function get_version_url(version) {
+  if (version == 'SNAPSHOT') {
+    return config.base_url + '/snapshots/targets/{target}'
+  } else {
+    return config.base_url + '/releases/{version}/targets/{target}'.replace('{version}', version)
+  }
+}
+
 function build_asa_request() {
   if (!current_model || !current_model.id) {
     alert('bad profile');
     return;
   }
 
-  function get_model_titles(titles) {
-    return titles.map(e => {
-      if (e.title) {
-        return e.title;
-      } else {
-        return ((e.vendor || '') + ' ' + (e.model || '') + ' ' + (e.variant || '')).trim();
-      }
-    }).join('/');
-  }
-
   function showStatus(text) {
     show('buildstatus');
     $('buildstatus').innerHTML = text;
@@ -388,6 +396,17 @@ function init() {
   setupSelectList($('versions'), Object.keys(config.versions), version => {
     fetch(config.versions[version]).then(data => {
       data.json().then(obj => {
+        // handle native openwrt json format
+        if ('profiles' in obj) {
+          obj['url'] = get_version_url(version)
+          obj['models'] = {}
+          for (const [key, value] of Object.entries(obj['profiles'])) {
+            obj['models'][get_model_titles(value.titles)] = value
+            obj['models'][get_model_titles(value.titles)]['id'] = key
+          }
+        }
+        return obj 
+      }).then(obj => {
         setupAutocompleteList($('models'), Object.keys(obj['models']), false, updateImages, models => {
           var model = models.value;
           if (model in obj['models']) {