mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-02-05 22:30:30 +01:00
add support for creating terrestrial and cable channels
This commit is contained in:
@@ -72,12 +72,16 @@ CableTransponder = namedtuple("CableTransponder", ["frequency", "symbol_rate", "
|
||||
|
||||
|
||||
class TrType(Enum):
|
||||
""" Transponders type """
|
||||
""" Transponders type. """
|
||||
Satellite = "s"
|
||||
Terrestrial = "t"
|
||||
Cable = "c"
|
||||
ATSC = "a"
|
||||
|
||||
@classmethod
|
||||
def _missing_(cls, value):
|
||||
return cls.Satellite
|
||||
|
||||
|
||||
class BqType(Enum):
|
||||
""" Bouquet type. """
|
||||
|
||||
@@ -1551,10 +1551,42 @@ Author: Dmitriy Yefremov
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="services_add_new_popup_item">
|
||||
<property name="label" translatable="yes">New</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">New</property>
|
||||
<signal name="activate" handler="on_services_add_new" swapped="no"/>
|
||||
<child type="submenu">
|
||||
<object class="GtkMenu" id="et_popup_menu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkMenuItem">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Satellite channel</property>
|
||||
<property name="name">s</property>
|
||||
<signal name="activate" handler="on_services_add_new" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Terrestrial channel</property>
|
||||
<property name="name">t</property>
|
||||
<signal name="activate" handler="on_services_add_new" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Cable channel</property>
|
||||
<property name="name">c</property>
|
||||
<signal name="activate" handler="on_services_add_new" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
||||
@@ -43,7 +43,7 @@ from app.commons import run_idle, log, run_task, run_with_delay, init_logger, De
|
||||
from app.connections import (HttpAPI, download_data, DownloadType, upload_data, STC_XML_FILE)
|
||||
from app.eparser import get_blacklist, write_blacklist, write_bouquet
|
||||
from app.eparser import get_services, get_bouquets, write_bouquets, write_services, Bouquets, Bouquet, Service
|
||||
from app.eparser.ecommons import CAS, Flag, BouquetService
|
||||
from app.eparser.ecommons import CAS, Flag, BouquetService, TrType
|
||||
from app.eparser.enigma.bouquets import BqServiceType
|
||||
from app.eparser.enigma.streamrelay import StreamRelay
|
||||
from app.eparser.iptv import export_to_m3u, StreamType
|
||||
@@ -4047,7 +4047,7 @@ class Application(Gtk.Application):
|
||||
self.show_error_message("Neutrino at the moment not supported!")
|
||||
return
|
||||
|
||||
ServiceDetailsDialog(self, action=Action.ADD).show()
|
||||
ServiceDetailsDialog(self, action=Action.ADD, tr_type=TrType(item.get_name())).show()
|
||||
|
||||
def on_bouquets_edit(self, view):
|
||||
""" Renaming bouquets. """
|
||||
|
||||
@@ -62,7 +62,7 @@ class ServiceDetailsDialog:
|
||||
|
||||
_DIGIT_ENTRY_NAME = "digit-entry"
|
||||
|
||||
def __init__(self, app, action=Action.EDIT):
|
||||
def __init__(self, app, action=Action.EDIT, tr_type=TrType.Satellite):
|
||||
handlers = {"on_system_changed": self.on_system_changed,
|
||||
"on_save": self.on_save,
|
||||
"on_tr_edit_toggled": self.on_tr_edit_toggled,
|
||||
@@ -80,7 +80,7 @@ class ServiceDetailsDialog:
|
||||
self._dialog = builder.get_object("service_details_dialog")
|
||||
self._dialog.set_transient_for(app.app_window)
|
||||
self._s_type = settings.setting_type
|
||||
self._tr_type = TrType.Satellite
|
||||
self._tr_type = tr_type
|
||||
self._picons_path = settings.profile_picons_path
|
||||
self._services_view = app.services_view
|
||||
self._fav_view = app.fav_view
|
||||
@@ -174,29 +174,51 @@ class ServiceDetailsDialog:
|
||||
def show(self):
|
||||
self._dialog.show()
|
||||
|
||||
@run_idle
|
||||
def init_default_data_elements(self):
|
||||
srv = Service(None, "s", None, "New", None, None, "New", "TV", None,
|
||||
"1_0_1_0_0_0_000000_0_0_0.png", "0", "10700", "27500", "H", "3/4", "DVB-S", "0.0E",
|
||||
"0:00000000:0:0000:0:0:0:0:0:0", "1:0:1:0:0:0:000000:0:0:0::0:0:0:0",
|
||||
"s 10720000:27500000:0:1:0:0:0:0:0")
|
||||
srv_data = [None] * 20
|
||||
srv_data[Column.SRV_CAS_FLAGS] = "f:40"
|
||||
srv_data[Column.SRV_SERVICE] = "New"
|
||||
srv_data[Column.SRV_PACKAGE] = "New"
|
||||
srv_data[Column.SRV_SSID] = "0"
|
||||
srv_data[Column.SRV_PICON_ID] = "1_0_1_0_0_0_000000_0_0_0.png"
|
||||
srv_data[Column.SRV_FAV_ID] = "1:0:1:0:0:0:000000:0:0:0::0:0:0:0"
|
||||
|
||||
if self._tr_type is TrType.Cable:
|
||||
srv_data[Column.SRV_STANDARD] = "c"
|
||||
srv_data[Column.SRV_FREQ] = "300"
|
||||
srv_data[Column.SRV_RATE] = "6000"
|
||||
srv_data[Column.SRV_SYSTEM] = "DVB-C"
|
||||
srv_data[Column.SRV_POS] = "C"
|
||||
srv_data[Column.SRV_DATA_ID] = "0000:00000000:0:0:1:0"
|
||||
srv_data[Column.SRV_TRANSPONDER] = "t 300000000:0:0:0:0:0:0:0:0:0:0:0"
|
||||
elif self._tr_type is TrType.Terrestrial:
|
||||
srv_data[Column.SRV_STANDARD] = "t"
|
||||
srv_data[Column.SRV_FREQ] = "420000"
|
||||
srv_data[Column.SRV_RATE] = "0"
|
||||
srv_data[Column.SRV_SYSTEM] = "DVB-T2"
|
||||
srv_data[Column.SRV_POS] = "T"
|
||||
srv_data[Column.SRV_DATA_ID] = "0000:00000000:0:0:1:0"
|
||||
srv_data[Column.SRV_TRANSPONDER] = "t 420000000:0:5:5:3:2:4:4:2:1:0:0"
|
||||
else:
|
||||
srv_data[Column.SRV_STANDARD] = "s"
|
||||
srv_data[Column.SRV_FREQ] = "10720"
|
||||
srv_data[Column.SRV_RATE] = "27500"
|
||||
srv_data[Column.SRV_POL] = "H"
|
||||
srv_data[Column.SRV_FEC] = "Auto"
|
||||
srv_data[Column.SRV_SYSTEM] = "DVB-S"
|
||||
srv_data[Column.SRV_POS] = "0.0E"
|
||||
srv_data[Column.SRV_DATA_ID] = "0:00000000:0:0000:1:0:0:0:0:0"
|
||||
srv_data[Column.SRV_TRANSPONDER] = "s 10720000:27500000:0:1:0:0:0:0:0"
|
||||
|
||||
srv = Service(*srv_data)
|
||||
|
||||
self._old_service = srv
|
||||
self._apply_button.set_visible(False)
|
||||
self._create_button.set_visible(True)
|
||||
self._tr_edit_switch.set_sensitive(False)
|
||||
self.on_tr_edit_toggled(self._tr_edit_switch.set_active(True), True)
|
||||
[elem.set_text("0") for elem in self._non_empty_elements.values()]
|
||||
|
||||
self._new_check_button.set_active(True)
|
||||
self._name_entry.set_text(srv.service)
|
||||
self._package_entry.set_text(srv.package)
|
||||
self._freq_entry.set_text(srv.freq)
|
||||
self._service_type_combo_box.set_active(0)
|
||||
self._pol_combo_box.set_active(0)
|
||||
self._fec_combo_box.set_active(0)
|
||||
self._sys_combo_box.set_active(0)
|
||||
self._invertion_combo_box.set_active(2)
|
||||
self.init_service_data(srv)
|
||||
|
||||
self._current_model = get_base_model(self._services_view.get_model())
|
||||
|
||||
@@ -224,6 +246,9 @@ class ServiceDetailsDialog:
|
||||
srv = Service(*self._current_model[itr][: Column.SRV_TOOLTIP])
|
||||
self._old_service = srv
|
||||
self._current_itr = itr
|
||||
self.init_service_data(srv)
|
||||
|
||||
def init_service_data(self, srv):
|
||||
# Service
|
||||
self._name_entry.set_text(srv.service)
|
||||
self._package_entry.set_text(srv.package)
|
||||
@@ -235,6 +260,15 @@ class ServiceDetailsDialog:
|
||||
self.select_active_text(self._pol_combo_box, srv.pol)
|
||||
self.select_active_text(self._fec_combo_box, srv.fec)
|
||||
self.select_active_text(self._sys_combo_box, srv.system)
|
||||
self.update_ui(srv)
|
||||
if self._s_type is SettingsType.ENIGMA_2:
|
||||
self.init_enigma2_service_data(srv)
|
||||
self.init_enigma2_transponder_data(srv)
|
||||
elif self._s_type is SettingsType.NEUTRINO_MP:
|
||||
self.init_neutrino_data(srv)
|
||||
self.init_neutrino_ui_elements()
|
||||
|
||||
def update_ui(self, srv):
|
||||
if self._tr_type is TrType.Terrestrial:
|
||||
self.update_ui_for_terrestrial()
|
||||
elif self._tr_type is TrType.Cable:
|
||||
@@ -244,13 +278,6 @@ class ServiceDetailsDialog:
|
||||
else:
|
||||
self.set_sat_positions(srv.pos)
|
||||
|
||||
if self._s_type is SettingsType.ENIGMA_2:
|
||||
self.init_enigma2_service_data(srv)
|
||||
self.init_enigma2_transponder_data(srv)
|
||||
elif self._s_type is SettingsType.NEUTRINO_MP:
|
||||
self.init_neutrino_data(srv)
|
||||
self.init_neutrino_ui_elements()
|
||||
|
||||
# ***************** Init Enigma2 data *********************#
|
||||
|
||||
@run_idle
|
||||
@@ -413,7 +440,7 @@ class ServiceDetailsDialog:
|
||||
self.save_data()
|
||||
|
||||
def save_data(self):
|
||||
if self._s_type is SettingsType.NEUTRINO_MP and self._tr_type is not TrType.Satellite:
|
||||
if self._s_type is SettingsType.NEUTRINO_MP:
|
||||
show_dialog(DialogType.ERROR, transient=self._dialog, text="Not implemented yet!")
|
||||
return
|
||||
|
||||
@@ -430,9 +457,11 @@ class ServiceDetailsDialog:
|
||||
def on_new(self):
|
||||
""" Create new service. """
|
||||
srv_data = self.update_service_data()
|
||||
if srv_data:
|
||||
service, data = srv_data
|
||||
self._current_model.append(service + (None, data.get(Column.SRV_BACKGROUND, None)))
|
||||
if not srv_data:
|
||||
return False
|
||||
|
||||
service, data = srv_data
|
||||
self._current_model.append(service + (None, data.get(Column.SRV_BACKGROUND, None)))
|
||||
return True
|
||||
|
||||
def on_edit(self):
|
||||
@@ -460,6 +489,7 @@ class ServiceDetailsDialog:
|
||||
except Exception as e:
|
||||
log(f"Edit service error: {e}")
|
||||
show_dialog(DialogType.ERROR, transient=self._dialog, text="Error getting transponder parameters!")
|
||||
return False
|
||||
else:
|
||||
if self._transponder_services_iters:
|
||||
self.update_transponder_services(transponder, self.get_sat_position())
|
||||
|
||||
Reference in New Issue
Block a user