From 86278ff44d86dfb8aad7c018eaaa9974affbef36 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Fri, 19 Feb 2021 18:45:29 +0100 Subject: [PATCH] wire data parsing and storage --- owrx/controllers/settings/__init__.py | 7 +++++-- owrx/controllers/settings/sdr.py | 14 +++++++++----- owrx/form/converter.py | 2 +- owrx/source/__init__.py | 4 ++-- owrx/source/rtl_sdr.py | 8 +++++++- owrx/source/soapy.py | 2 ++ 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/owrx/controllers/settings/__init__.py b/owrx/controllers/settings/__init__.py index 030e9fc..11f056c 100644 --- a/owrx/controllers/settings/__init__.py +++ b/owrx/controllers/settings/__init__.py @@ -80,14 +80,17 @@ class SettingsFormController(AuthorizationMixin, WebpageController, metaclass=AB def processFormData(self): self.processData(self.parseFormData()) + self.store() self.send_redirect(self.request.path) def processData(self, data): - config = Config.get() + config = self.getData() for k, v in data.items(): if v is None: if k in config: del config[k] else: config[k] = v - config.store() + + def store(self): + Config.get().store() diff --git a/owrx/controllers/settings/sdr.py b/owrx/controllers/settings/sdr.py index 0b9f940..0f1c23c 100644 --- a/owrx/controllers/settings/sdr.py +++ b/owrx/controllers/settings/sdr.py @@ -54,14 +54,18 @@ class SdrDeviceListController(AuthorizationMixin, WebpageController): class SdrDeviceController(SettingsFormController): def __init__(self, handler, request, options): super().__init__(handler, request, options) - self.device = self._get_device() + self.device_id, self.device = self._get_device() def getData(self): return self.device - def processData(self, data): - # TODO implement storing of data here - logger.debug(data) + def store(self): + # need to overwrite the existing key in the config since the layering won't capture the changes otherwise + config = Config.get() + sdrs = config["sdrs"] + sdrs[self.device_id] = self.getData() + config["sdrs"] = sdrs + super().store() def getSections(self): try: @@ -78,7 +82,7 @@ class SdrDeviceController(SettingsFormController): device_id = unquote(self.request.matches.group(1)) if device_id not in Config.get()["sdrs"]: return None - return Config.get()["sdrs"][device_id] + return device_id, Config.get()["sdrs"][device_id] def header_variables(self): variables = super().header_variables() diff --git a/owrx/form/converter.py b/owrx/form/converter.py index d825cc5..3616727 100644 --- a/owrx/form/converter.py +++ b/owrx/form/converter.py @@ -36,7 +36,7 @@ class OptionalConverter(Converter): return self.defaultFormValue if value is None else self.sub_converter.convert_to_form(value) def convert_from_form(self, value): - return None if value == self.defaultFormValue else self.sub_converter.convert_to_form(value) + return None if value == self.defaultFormValue else self.sub_converter.convert_from_form(value) class IntConverter(Converter): diff --git a/owrx/source/__init__.py b/owrx/source/__init__.py index dfaa449..0d33fb3 100644 --- a/owrx/source/__init__.py +++ b/owrx/source/__init__.py @@ -11,7 +11,7 @@ from owrx.command import CommandMapper from owrx.socket import getAvailablePort from owrx.property import PropertyStack, PropertyLayer from owrx.form import Input, TextInput, NumberInput, CheckboxInput, FloatInput -from owrx.form.converter import IntConverter, OptionalConverter +from owrx.form.converter import IntConverter, OptionalConverter, FloatConverter from owrx.controllers.settings import Section from typing import List @@ -394,7 +394,7 @@ class SdrDeviceDescription(object): "Run background services on this device", converter=OptionalConverter(defaultFormValue=True), ), - FloatInput("rf_gain", "Device gain"), + FloatInput("rf_gain", "Device gain", converter=OptionalConverter(FloatConverter())), ] def mergeInputs(self, *args): diff --git a/owrx/source/rtl_sdr.py b/owrx/source/rtl_sdr.py index 6a65daa..704c439 100644 --- a/owrx/source/rtl_sdr.py +++ b/owrx/source/rtl_sdr.py @@ -2,6 +2,7 @@ from owrx.source.connector import ConnectorSource, ConnectorDeviceDescription from owrx.command import Flag, Option from typing import List from owrx.form import Input, TextInput +from owrx.form.converter import OptionalConverter class RtlSdrSource(ConnectorSource): @@ -19,6 +20,11 @@ class RtlSdrDeviceDescription(ConnectorDeviceDescription): return self.mergeInputs( super().getInputs(), [ - TextInput("device", "Device identifier", infotext="Device serial number or index"), + TextInput( + "device", + "Device identifier", + infotext="Device serial number or index", + converter=OptionalConverter(), + ), ], ) diff --git a/owrx/source/soapy.py b/owrx/source/soapy.py index e19833a..b68636a 100644 --- a/owrx/source/soapy.py +++ b/owrx/source/soapy.py @@ -3,6 +3,7 @@ from owrx.command import Option from owrx.source.connector import ConnectorSource, ConnectorDeviceDescription from typing import List from owrx.form import Input, TextInput +from owrx.form.converter import OptionalConverter from owrx.form.soapy import SoapyGainInput @@ -108,6 +109,7 @@ class SoapyConnectorDeviceDescription(ConnectorDeviceDescription): "device", "Device Identifier", infotext='SoapySDR device identifier string (example: "serial=123456789")', + converter=OptionalConverter() ), SoapyGainInput( "rf_gain",