From 4758672c94cf7c169cb4d001df7193097908844b Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Mon, 8 Feb 2021 00:43:39 +0100 Subject: [PATCH] add aprs_igate_symbol --- owrx/controllers/settings.py | 11 +++++++++-- owrx/form/__init__.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/owrx/controllers/settings.py b/owrx/controllers/settings.py index 7078a53..685f6e8 100644 --- a/owrx/controllers/settings.py +++ b/owrx/controllers/settings.py @@ -17,6 +17,8 @@ from owrx.form import ( WfmTauConverter, MultiCheckboxInput, OptionalConverter, + AprsBeaconSymbols, + EnumConverter, ) from urllib.parse import quote from owrx.wsjt import Fst4Profile, Fst4wProfile @@ -268,9 +270,14 @@ class GeneralSettingsController(AdminController): "aprs_igate_beacon", "APRS beacon", checkboxText="Send the receiver position to the APRS-IS network", - infotext="Please check that your receiver location is setup correctly", + infotext="Please check that your receiver location is setup correctly before enabling the beacon", + ), + DropdownInput( + "aprs_igate_symbol", + "APRS beacon symbol", + [o.toOption() for o in AprsBeaconSymbols], + converter=EnumConverter(AprsBeaconSymbols), ), - # TODO: aprs_igate_symbol TextInput( "aprs_igate_comment", "APRS beacon text", diff --git a/owrx/form/__init__.py b/owrx/form/__init__.py index eaa6bcc..4cb87df 100644 --- a/owrx/form/__init__.py +++ b/owrx/form/__init__.py @@ -325,9 +325,43 @@ class WfmTauValues(Enum): return Option(self.name, str(self)) +class EnumConverter(Converter): + def __init__(self, enumCls): + self.enumCls = enumCls + + def convert_to_form(self, value): + return None if value is None else self.enumCls(value).name + + def convert_from_form(self, value): + return self.enumCls[value].value + + class WfmTauConverter(Converter): def convert_to_form(self, value): return WfmTauValues(value * 1e6).name def convert_from_form(self, value): return WfmTauValues[value].value / 1e6 + + +class AprsBeaconSymbols(Enum): + BEACON_RECEIVE_ONLY = ("R&", "Receive only IGate") + BEACON_HF_GATEWAY = ("/&", "HF Gateway") + BEACON_IGATE_GENERIC = ("I&", "Igate Generic (please use more specific overlay)") + BEACON_PSKMAIL = ("P&", "PSKmail node") + BEACON_TX_1 = ("T&", "TX IGate with path set to 1 hop") + BEACON_WIRES_X = ("W&", "Wires-X") + BEACON_TX_2 = ("2&", "TX IGate with path set to 2 hops") + + def __new__(cls, *args, **kwargs): + value, description = args + obj = object.__new__(cls) + obj._value_ = value + obj.description = description + return obj + + def __str__(self): + return self.description + + def toOption(self): + return Option(self.name, "{description} ({symbol})".format(description=str(self), symbol=self.value))