diff --git a/app/eparser/ecommons.py b/app/eparser/ecommons.py
index 9b3fa889..ae9efb9f 100644
--- a/app/eparser/ecommons.py
+++ b/app/eparser/ecommons.py
@@ -57,12 +57,18 @@ Bouquet.__new__.__defaults__ = (None, BqServiceType.DEFAULT, [], None, None, Non
Bouquets = namedtuple("Bouquets", ["name", "type", "bouquets"])
BouquetService = namedtuple("BouquetService", ["name", "type", "data", "num"])
-# ***************** Satellites *******************#
+# *************** *.xml [Satellites, Terrestrial, Cable] ***************** #
Satellite = namedtuple("Satellite", ["name", "flags", "position", "transponders"])
+Terrestrial = namedtuple("Terrestrial", ["name", "flags", "countrycode", "transponders"])
+Cable = namedtuple("Cable", ["name", "flags", "satfeed", "countrycode", "transponders"])
Transponder = namedtuple("Transponder", ["frequency", "symbol_rate", "polarization", "fec_inner", "system",
"modulation", "pls_mode", "pls_code", "is_id", "t2mi_plp_id"])
+TerTransponder = namedtuple("TerTransponder", ["centre_frequency", "system", "bandwidth", "constellation",
+ "code_rate_hp", "code_rate_lp", "guard_interval", "transmission_mode",
+ "hierarchy_information", "inversion", "plp_id", "comment"])
+CableTransponder = namedtuple("CableTransponder", ["frequency", "symbol_rate", "fec_inner", "modulation"])
class TrType(Enum):
diff --git a/app/eparser/satxml.py b/app/eparser/satxml.py
index 46f2d9c2..75ea7cf8 100644
--- a/app/eparser/satxml.py
+++ b/app/eparser/satxml.py
@@ -26,51 +26,63 @@
#
-""" Module for parsing satellites.xml file.
+""" Module for parsing *.xml files.
- For more info see __COMMENT
+ For more info see comments.
"""
from xml.dom.minidom import parse, Document
from app.commons import log
-from .ecommons import POLARIZATION, FEC, SYSTEM, MODULATION, Transponder, Satellite, get_key_by_value
+from .ecommons import POLARIZATION, FEC, SYSTEM, MODULATION, Transponder, Satellite, get_key_by_value, Terrestrial, \
+ Cable
-__COMMENT = (" File was created in DemonEditor\n\n"
- "usable flags are\n"
- " 1: Network Scan\n"
- " 2: use BAT\n"
- " 4: use ONIT\n"
- " 8: skip NITs of known networks\n"
- " and combinations of this.\n\n"
+_SAT_COMMENT = (" File was created in DemonEditor\n\n"
+ "usable flags are\n"
+ " 1: Network Scan\n"
+ " 2: use BAT\n"
+ " 4: use ONIT\n"
+ " 8: skip NITs of known networks\n"
+ " and combinations of this.\n\n"
- "transponder parameters:\n"
- "polarization: 0 - Horizontal, 1 - Vertical, 2 - Left Circular, 3 - Right Circular\n"
- "fec_inner: 0 - Auto, 1 - 1/2, 2 - 2/3, 3 - 3/4, 4 - 5/6, 5 - 7/8, 6 - 8/9, 7 - 3/5,\n"
- "8 - 4/5, 9 - 9/10, 15 - None\n"
- "modulation: 0 - Auto, 1 - QPSK, 2 - 8PSK, 4 - 16APSK, 5 - 32APSK\n"
- "rolloff: 0 - 0.35, 1 - 0.25, 2 - 0.20, 3 - Auto\n"
- "pilot: 0 - Off, 1 - On, 2 - Auto\n"
- "inversion: 0 = Off, 1 = On, 2 = Auto (default)\n"
- "system: 0 = DVB-S, 1 = DVB-S2\n"
- "is_id: 0 - 255\n"
- "pls_mode: 0 - Root, 1 - Gold, 2 - Combo\n"
- "pls_code: 0 - 262142\n\n")
+ "transponder parameters:\n"
+ "polarization: 0 - Horizontal, 1 - Vertical, 2 - Left Circular, 3 - Right Circular\n"
+ "fec_inner: 0 - Auto, 1 - 1/2, 2 - 2/3, 3 - 3/4, 4 - 5/6, 5 - 7/8, 6 - 8/9, 7 - 3/5,\n"
+ "8 - 4/5, 9 - 9/10, 15 - None\n"
+ "modulation: 0 - Auto, 1 - QPSK, 2 - 8PSK, 4 - 16APSK, 5 - 32APSK\n"
+ "rolloff: 0 - 0.35, 1 - 0.25, 2 - 0.20, 3 - Auto\n"
+ "pilot: 0 - Off, 1 - On, 2 - Auto\n"
+ "inversion: 0 = Off, 1 = On, 2 = Auto (default)\n"
+ "system: 0 = DVB-S, 1 = DVB-S2\n"
+ "is_id: 0 - 255\n"
+ "pls_mode: 0 - Root, 1 - Gold, 2 - Combo\n"
+ "pls_code: 0 - 262142\n\n")
def get_satellites(path):
- return parse_satellites(path)
+ """ Returns data [Satellite] list from *.xml. """
+ return [parse_sat(elem) for elem in parse(path).getElementsByTagName("sat") if elem.hasAttributes()]
+
+
+def get_terrestrial(path):
+ """ Returns data [Terrestrial] list from *.xml. """
+ return [parse_terrestrial(elem) for elem in parse(path).getElementsByTagName("terrestrial") if elem.hasAttributes()]
+
+
+def get_cable(path):
+ """ Returns data [Cable] list from *.xml. """
+ return [parse_cable(elem) for elem in parse(path).getElementsByTagName("cable") if elem.hasAttributes()]
def write_satellites(satellites, data_path):
""" Creation satellites.xml file """
doc = Document()
- comment = doc.createComment(__COMMENT)
+ comment = doc.createComment(_SAT_COMMENT)
doc.appendChild(comment)
root = doc.createElement("satellites")
doc.appendChild(root)
for sat in satellites:
- # Create Element
+ # Create Element
sat_child = doc.createElement("sat")
sat_child.setAttribute("name", sat.name)
sat_child.setAttribute("flags", sat.flags)
@@ -136,16 +148,14 @@ def parse_sat(elem):
parse_transponders(elem, sat_name))
-def parse_satellites(path):
- """ Parsing satellites from xml. """
- dom = parse(path)
- satellites = []
+def parse_terrestrial(elem):
+ atr = elem.attributes
+ return Terrestrial(atr["name"].value, None, None, [])
- for elem in dom.getElementsByTagName("sat"):
- if elem.hasAttributes():
- satellites.append(parse_sat(elem))
- return satellites
+def parse_cable(elem):
+ atr = elem.attributes
+ return Cable(atr["name"].value, None, None, None, [])
if __name__ == "__main__":
diff --git a/app/ui/xml/edit.py b/app/ui/xml/edit.py
index 02154056..9c01d817 100644
--- a/app/ui/xml/edit.py
+++ b/app/ui/xml/edit.py
@@ -34,6 +34,7 @@ from gi.repository import GLib
from app.commons import run_idle
from app.connections import DownloadType
from app.eparser import get_satellites, write_satellites, Satellite, Transponder
+from app.eparser.satxml import get_terrestrial, get_cable
from .dialogs import SatelliteDialog, TransponderDialog, SatellitesUpdateDialog
from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder
from ..main_helper import move_items, on_popup_menu
@@ -65,7 +66,10 @@ class SatellitesTool(Gtk.Box):
self._current_sat_path = None
self._dvb_type = self.DVB.SAT
- handlers = {"on_remove": self.on_remove,
+ handlers = {"on_satellite_view_realize": self.on_satellite_view_realize,
+ "on_terrestrial_view_realize": self.on_terrestrial_view_realize,
+ "on_cable_view_realize": self.on_cable_view_realize,
+ "on_remove": self.on_remove,
"on_update": self.on_update,
"on_up": self.on_up,
"on_down": self.on_down,
@@ -90,8 +94,17 @@ class SatellitesTool(Gtk.Box):
self._app.connect("profile-changed", lambda a, m: self.load_satellites_list())
self.show()
+ def on_satellite_view_realize(self, view):
self.load_satellites_list()
+ def on_terrestrial_view_realize(self, view):
+ gen = self.on_terrestrial_list_load()
+ GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
+
+ def on_cable_view_realize(self, view):
+ gen = self.on_cable_list_load()
+ GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
+
def load_satellites_list(self, path=None):
gen = self.on_satellites_list_load(path)
GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
@@ -145,12 +158,23 @@ class SatellitesTool(Gtk.Box):
def on_satellites_list_load(self, path=None):
""" Load satellites data into model """
- model = self._satellite_view.get_model()
+ path = path or self._settings.profile_data_path + "satellites.xml"
+ yield from self.load_data(self._satellite_view, get_satellites, path)
+
+ def on_terrestrial_list_load(self, path=None):
+ path = path or self._settings.profile_data_path + "terrestrial.xml"
+ yield from self.load_data(self._terrestrial_view, get_terrestrial, path)
+
+ def on_cable_list_load(self, path=None):
+ path = path or self._settings.profile_data_path + "cables.xml"
+ yield from self.load_data(self._cable_view, get_cable, path)
+
+ def load_data(self, view, func, path):
+ model = view.get_model()
model.clear()
try:
- path = path or self._settings.profile_data_path + "satellites.xml"
- satellites = get_satellites(path)
+ data = func(path)
yield True
except FileNotFoundError as e:
msg = get_message("Please, download files from receiver or setup your path for read data!")
@@ -159,8 +183,8 @@ class SatellitesTool(Gtk.Box):
msg = f"The file [{path}] is not formatted correctly or contains invalid characters! Cause: {e}"
self._app.show_error_message(msg)
else:
- for sat in satellites:
- yield model.append(sat)
+ for d in data:
+ yield model.append(d)
def on_add(self, item):
""" Common adding. """
diff --git a/app/ui/xml/editor.glade b/app/ui/xml/editor.glade
index 33391aa7..9de9cb40 100644
--- a/app/ui/xml/editor.glade
+++ b/app/ui/xml/editor.glade
@@ -37,6 +37,12 @@ Author: Dmitriy Yefremov
+
+
+
+
+
+
@@ -205,7 +211,9 @@ Author: Dmitriy Yefremov
-
+
+
+
@@ -215,12 +223,20 @@ Author: Dmitriy Yefremov
+
+
+
+