diff --git a/htdocs/features.html b/htdocs/features.html
new file mode 100644
index 0000000..f4ed3b4
--- /dev/null
+++ b/htdocs/features.html
@@ -0,0 +1,6 @@
+
+ OpenWebRX Feature report
+
+
+
+
\ No newline at end of file
diff --git a/htdocs/features.js b/htdocs/features.js
new file mode 100644
index 0000000..cb96f09
--- /dev/null
+++ b/htdocs/features.js
@@ -0,0 +1,5 @@
+$(function(){
+ $.ajax('/api/features').done(function(data){
+ $('body').html(JSON.stringify(data));
+ });
+});
\ No newline at end of file
diff --git a/owrx/controllers.py b/owrx/controllers.py
index 5a915fa..c4f917a 100644
--- a/owrx/controllers.py
+++ b/owrx/controllers.py
@@ -1,11 +1,13 @@
import os
import mimetypes
+import json
from datetime import datetime
from owrx.websocket import WebSocketConnection
from owrx.config import PropertyManager
from owrx.source import ClientRegistry
from owrx.connection import WebSocketMessageHandler
from owrx.version import openwebrx_version
+from owrx.feature import FeatureDetector
import logging
logger = logging.getLogger(__name__)
@@ -26,12 +28,7 @@ class Controller(object):
if (type(content) == str):
content = content.encode()
self.handler.wfile.write(content)
- def render_template(self, template, **variables):
- f = open('htdocs/' + template)
- data = f.read()
- f.close()
- self.send_response(data)
class StatusController(Controller):
def handle_request(self):
@@ -77,12 +74,21 @@ class AssetsController(Controller):
class IndexController(AssetsController):
def handle_request(self):
- self.serve_file("index.html", content_type = "text/html")
+ self.serve_file("index.html")
class MapController(AssetsController):
def handle_request(self):
#TODO check if we have a google maps api key first?
- self.serve_file("map.html", content_type = "text/html")
+ self.serve_file("map.html")
+
+class FeatureController(AssetsController):
+ def handle_request(self):
+ self.serve_file("features.html")
+
+class ApiController(Controller):
+ def handle_request(self):
+ data = json.dumps(FeatureDetector().feature_report())
+ self.send_response(data, content_type = "application/json")
class WebSocketController(Controller):
def handle_request(self):
diff --git a/owrx/feature.py b/owrx/feature.py
index 38b8e27..8a45b10 100644
--- a/owrx/feature.py
+++ b/owrx/feature.py
@@ -26,6 +26,11 @@ class FeatureDetector(object):
def feature_availability(self):
return {name: self.is_available(name) for name in FeatureDetector.features}
+ def feature_report(self):
+ def feature_details(name):
+ return self.get_requirements(name)
+ return {name: feature_details(name) for name in FeatureDetector.features}
+
def is_available(self, feature):
return self.has_requirements(self.get_requirements(feature))
diff --git a/owrx/http.py b/owrx/http.py
index b449fab..7e1f578 100644
--- a/owrx/http.py
+++ b/owrx/http.py
@@ -1,4 +1,4 @@
-from owrx.controllers import StatusController, IndexController, AssetsController, WebSocketController, MapController
+from owrx.controllers import StatusController, IndexController, AssetsController, WebSocketController, MapController, FeatureController, ApiController
from http.server import BaseHTTPRequestHandler
import re
@@ -21,7 +21,9 @@ class Router(object):
{"regex": "(/favicon.ico)", "controller": AssetsController},
# backwards compatibility for the sdr.hu portal
{"regex": "/(gfx/openwebrx-avatar.png)", "controller": AssetsController},
- {"route": "/map", "controller": MapController}
+ {"route": "/map", "controller": MapController},
+ {"route": "/features", "controller": FeatureController},
+ {"route": "/api/features", "controller": ApiController}
]
def find_controller(self, path):
for m in Router.mappings: