48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
from owrx.toolbox import TextParser
|
|
from owrx.color import ColorCache
|
|
from owrx.config import Config
|
|
from owrx.reporting import ReportingEngine
|
|
import json
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class NavtexParser(TextParser):
|
|
def __init__(self, service: bool = False):
|
|
# Construct parent object
|
|
super().__init__(filePrefix="NAVTEX", service=service)
|
|
|
|
|
|
class DscParser(TextParser):
|
|
def __init__(self, service: bool = False):
|
|
# Colors will be assigned via this cache
|
|
self.colors = ColorCache()
|
|
# Construct parent object
|
|
super().__init__(filePrefix="DSC", service=service)
|
|
|
|
def parse(self, msg: bytes):
|
|
# Expect JSON data in text form
|
|
out = json.loads(msg)
|
|
# Filter out errors
|
|
pm = Config.get()
|
|
if "data" in out and not pm["dsc_show_errors"]:
|
|
return {}
|
|
# Add mode and frequency
|
|
out["mode"] = "DSC"
|
|
if self.frequency != 0:
|
|
out["freq"] = self.frequency
|
|
# Convert timestamp to milliseconds
|
|
if "timestamp" in out:
|
|
out["timestamp"] = out["timestamp"] * 1000
|
|
# Report message
|
|
ReportingEngine.getSharedInstance().spot(out)
|
|
# Log received messages for debugging
|
|
logger.debug("{0}".format(out))
|
|
# When in interactive mode, add color to identify sender
|
|
if not self.service and "src" in out:
|
|
out["color"] = self.colors.getColor(out["src"])
|
|
# Done
|
|
return out
|