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: