list display for DVB-T/C

This commit is contained in:
DYefremov
2022-06-21 01:19:35 +03:00
parent b5a508ef54
commit c3d9159822
4 changed files with 100 additions and 56 deletions

View File

@@ -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):

View File

@@ -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__":

View File

@@ -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. """

View File

@@ -37,6 +37,12 @@ Author: Dmitriy Yefremov
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name flags -->
<column type="gchararray"/>
<!-- column-name satfeed -->
<column type="gchararray"/>
<!-- column-name countrycode -->
<column type="gchararray"/>
<!-- column-name transponders -->
<column type="PyObject"/>
</columns>
@@ -205,7 +211,9 @@ Author: Dmitriy Yefremov
<column type="gchararray"/>
<!-- column-name constellation -->
<column type="gchararray"/>
<!-- column-name rate -->
<!-- column-name rate_hp -->
<column type="gchararray"/>
<!-- column-name rate_lp -->
<column type="gchararray"/>
<!-- column-name guard -->
<column type="gchararray"/>
@@ -215,12 +223,20 @@ Author: Dmitriy Yefremov
<column type="gchararray"/>
<!-- column-name inversion -->
<column type="gchararray"/>
<!-- column-name plp_id -->
<column type="gchararray"/>
<!-- column-name comment -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="terrestrial_model">
<columns>
<!-- column-name name -->
<column type="gchararray"/>
<!-- column-name flags -->
<column type="gchararray"/>
<!-- column-name countrycode -->
<column type="gchararray"/>
<!-- column-name transponders -->
<column type="PyObject"/>
</columns>
@@ -343,6 +359,7 @@ Author: Dmitriy Yefremov
<signal name="button-press-event" handler="on_button_press" object="popup_menu" swapped="no"/>
<signal name="cursor-changed" handler="on_satellite_selection" swapped="no"/>
<signal name="key-release-event" handler="on_key_release" swapped="no"/>
<signal name="realize" handler="on_satellite_view_realize" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="satellite_view_selection">
<property name="mode">multiple</property>
@@ -455,6 +472,7 @@ Author: Dmitriy Yefremov
<property name="rubber_banding">True</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_button_press" object="popup_menu" swapped="no"/>
<signal name="realize" handler="on_terrestrial_view_realize" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection">
<property name="mode">multiple</property>
@@ -553,6 +571,7 @@ Author: Dmitriy Yefremov
<property name="rubber_banding">True</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_button_press" object="popup_menu" swapped="no"/>
<signal name="realize" handler="on_cable_view_realize" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection">
<property name="mode">multiple</property>
@@ -573,21 +592,6 @@ Author: Dmitriy Yefremov
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="sat_pos_column2">
<property name="fixed_width">85</property>
<property name="title" translatable="yes">Pos</property>
<property name="alignment">0.49000000953674316</property>
<child>
<object class="GtkCellRendererText" id="sat_pos_renderer2">
<property name="xalign">0.49000000953674316</property>
</object>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>