mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-03-03 19:11:41 +01:00
list display for DVB-T/C
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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__":
|
||||
|
||||
@@ -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. """
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user