diff --git a/htdocs/map.html b/htdocs/map.html index 23aabeb..dbfd13d 100644 --- a/htdocs/map.html +++ b/htdocs/map.html @@ -7,6 +7,7 @@ + diff --git a/htdocs/map.js b/htdocs/map.js index 948e83b..339d1d5 100644 --- a/htdocs/map.js +++ b/htdocs/map.js @@ -250,6 +250,11 @@ case "update": processUpdates(json.value); break; + case 'receiver_details': + $('#webrx-top-container').header().setDetails(json['value']); + break; + default: + console.warn('received message of unknown type: ' + json['type']); } } catch (e) { // don't lose exception diff --git a/owrx/connection.py b/owrx/connection.py index a1c7c82..14620fe 100644 --- a/owrx/connection.py +++ b/owrx/connection.py @@ -15,7 +15,7 @@ from owrx.modes import Modes, DigitalMode from multiprocessing import Queue from queue import Full from js8py import Js8Frame -from abc import ABC, abstractmethod +from abc import ABC, ABCMeta, abstractmethod import json import threading @@ -64,7 +64,33 @@ class Client(ABC): self.close() -class OpenWebRxReceiverClient(Client): +class OpenWebRxClient(Client, metaclass=ABCMeta): + def __init__(self, conn): + super().__init__(conn) + + receiver_details = Config.get().filter( + "receiver_name", + "receiver_location", + "receiver_asl", + "receiver_gps", + "photo_title", + "photo_desc", + ) + + def send_receiver_info(*args): + receiver_info = receiver_details.__dict__() + receiver_info["locator"] = Locator.fromCoordinates(receiver_info["receiver_gps"]) + self.write_receiver_details(receiver_info) + + # TODO unsubscribe + receiver_details.wire(send_receiver_info) + send_receiver_info() + + def write_receiver_details(self, details): + self.send({"type": "receiver_details", "value": details}) + + +class OpenWebRxReceiverClient(OpenWebRxClient): config_keys = [ "waterfall_colors", "waterfall_min_level", @@ -97,34 +123,14 @@ class OpenWebRxReceiverClient(Client): self.close() raise - pm = Config.get() - self.setSdr() - receiver_details = pm.filter( - "receiver_name", - "receiver_location", - "receiver_asl", - "receiver_gps", - "photo_title", - "photo_desc", - ) - - def send_receiver_info(*args): - receiver_info = receiver_details.__dict__() - receiver_info["locator"] = Locator.fromCoordinates(receiver_info["receiver_gps"]) - self.write_receiver_details(receiver_info) - features = FeatureDetector().feature_availability() self.write_features(features) modes = Modes.getModes() self.write_modes(modes) - # TODO unsubscribe - receiver_details.wire(send_receiver_info) - send_receiver_info() - self.__sendProfiles() CpuUsageThread.getSharedInstance().add_client(self) @@ -314,9 +320,6 @@ class OpenWebRxReceiverClient(Client): def write_config(self, cfg): self.send({"type": "config", "value": cfg}) - def write_receiver_details(self, details): - self.send({"type": "receiver_details", "value": details}) - def write_profiles(self, profiles): self.send({"type": "profiles", "value": profiles}) @@ -382,7 +385,7 @@ class OpenWebRxReceiverClient(Client): self.send({"type": "modes", "value": [to_json(m) for m in modes]}) -class MapConnection(Client): +class MapConnection(OpenWebRxClient): def __init__(self, conn): super().__init__(conn)