diff --git a/app/eparser/ecommons.py b/app/eparser/ecommons.py index 6a230734..fed4e226 100644 --- a/app/eparser/ecommons.py +++ b/app/eparser/ecommons.py @@ -101,6 +101,9 @@ FEC = {"0": "Auto", "1": "1/2", "2": "2/3", "3": "3/4", "4": "5/6", "5": "7/8", "17": "4/5", "18": "9/10", "19": "1/2", "20": "2/3", "21": "3/4", "22": "5/6", "23": "7/8", "24": "8/9", "25": "3/5", "26": "4/5", "27": "9/10", "28": "Auto"} +FEC_DEFAULT = {"0": "Auto", "1": "1/2", "2": "2/3", "3": "3/4", "4": "5/6", "5": "7/8", "6": "8/9", "7": "3/5", + "8": "4/5", "9": "9/10"} + SYSTEM = {"0": "DVB-S", "1": "DVB-S2"} MODULATION = {"0": "Auto", "1": "QPSK", "2": "8PSK", "3": "16APSK", "5": "32APSK"} diff --git a/app/ui/service_details_dialog.glade b/app/ui/service_details_dialog.glade index 1a288a96..65c8d933 100644 --- a/app/ui/service_details_dialog.glade +++ b/app/ui/service_details_dialog.glade @@ -1470,18 +1470,26 @@ + + + + + + False False True + center-on-parent True dialog True True + center False @@ -1566,9 +1574,11 @@ - 120 + 480 + 100 True True + never in @@ -1576,6 +1586,7 @@ False transponder_services_liststore False + vertical @@ -1607,6 +1618,21 @@ + + + autosize + Type + 0.5 + + + 0.50999999046325684 + + + 2 + + + + autosize @@ -1614,9 +1640,41 @@ True 0.5 - + + 0.50999999046325684 + - 2 + 3 + + + + + + + autosize + Freq. + 0.5 + + + 0.50999999046325684 + + + 4 + + + + + + + autosize + Pos. + 0.5 + + + 0.50999999046325684 + + + 5 @@ -1644,7 +1702,7 @@ - False + True True 1 diff --git a/app/ui/service_details_dialog.py b/app/ui/service_details_dialog.py index 33b71064..8573d313 100644 --- a/app/ui/service_details_dialog.py +++ b/app/ui/service_details_dialog.py @@ -3,8 +3,8 @@ from functools import lru_cache from app.commons import run_idle from app.eparser import Service, get_satellites -from app.eparser.ecommons import MODULATION, Inversion, ROLL_OFF, Pilot, Flag, Pids, SERVICE_TYPE, POLARIZATION, FEC, \ - SYSTEM, get_key_by_value, get_value_by_name +from app.eparser.ecommons import MODULATION, Inversion, ROLL_OFF, Pilot, Flag, Pids, SERVICE_TYPE, POLARIZATION, \ + SYSTEM, get_key_by_value, get_value_by_name, FEC_DEFAULT from app.properties import Profile from app.ui.dialogs import show_dialog, DialogType from app.ui.main_helper import get_base_model @@ -47,6 +47,7 @@ class ServiceDetailsDialog: self._old_service = None self._services = services self._bouquets = bouquets + self._transponder_services_iters = None self._current_model = None self._pattern = re.compile("\D") # style @@ -96,6 +97,7 @@ class ServiceDetailsDialog: self._rolloff_combo_box = builder.get_object("rolloff_combo_box") self._pilot_combo_box = builder.get_object("pilot_combo_box") self._pls_mode_combo_box = builder.get_object("pls_mode_combo_box") + self._tr_edit_switch = builder.get_object("tr_edit_switch") self._DVB_S2_ELEMENTS = (self._mod_combo_box, self._rolloff_combo_box, self._pilot_combo_box, self._pls_mode_combo_box, self._pls_code_entry, self._stream_id_entry) @@ -231,7 +233,33 @@ class ServiceDetailsDialog: def on_save(self, item): if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL: return + fav_id, data_id = self.get_srv_data() + # transponder + transponder = self._old_service.transponder + freq = self._freq_entry.get_text() + rate = self._rate_entry.get_text() + pol = self._pol_combo_box.get_active_id() + fec = self._fec_combo_box.get_active_id() + system = self._sys_combo_box.get_active_id() + pos = self._sat_pos_combo_box.get_active_id() + + if self._tr_edit_switch.get_active(): + transponder = self.get_transponder_data() + if self._transponder_services_iters: + for itr in self._transponder_services_iters: + srv = self._current_model[itr][:] + srv[-9] = freq + srv[-8] = rate + srv[-7] = pol + srv[-6] = fec + srv[-5] = system + srv[-4] = pos + srv[-1] = transponder + srv = Service(*srv) + self._services[srv.fav_id] = srv + self._current_model.set(itr, {i: v for i, v in enumerate(srv)}) + service = Service(flags_cas=self.get_flags(), transponder_type="s", coded=self._old_service.coded, @@ -243,15 +271,15 @@ class ServiceDetailsDialog: picon=self._old_service.picon, picon_id=self._old_service.picon_id, ssid="{:x}".format(int(self._id_entry.get_text())), - freq=self._freq_entry.get_text(), - rate=self._rate_entry.get_text(), - pol=self._pol_combo_box.get_active_id(), - fec=self._fec_combo_box.get_active_id(), - system=self._sys_combo_box.get_active_id(), - pos=self._sat_pos_combo_box.get_active_id(), + freq=freq, + rate=rate, + pol=pol, + fec=fec, + system=system, + pos=pos, data_id=data_id, fav_id=fav_id, - transponder=self._old_service.transponder) + transponder=transponder) old_fav_id = self._old_service.fav_id if old_fav_id != fav_id: @@ -349,7 +377,7 @@ class ServiceDetailsDialog: freq = self._freq_entry.get_text() rate = self._rate_entry.get_text() pol = self.get_value_from_combobox_id(self._pol_combo_box, POLARIZATION) - fec = self.get_value_from_combobox_id(self._fec_combo_box, FEC) + fec = self.get_value_from_combobox_id(self._fec_combo_box, FEC_DEFAULT) sat_pos = self._sat_pos_combo_box.get_active_id().replace(".", "") inv = get_value_by_name(Inversion, self._invertion_combo_box.get_active_id()) srv_sys = get_key_by_value(SYSTEM, sys) @@ -376,11 +404,16 @@ class ServiceDetailsDialog: @run_idle def on_tr_edit_toggled(self, switch: Gtk.Switch, active): + if active: - response = TransponderServicesDialog(self._dialog, self._services_view, - self._old_service.transponder).show() + self._transponder_services_iters = [] + response = TransponderServicesDialog(self._dialog, + self._services_view, + self._old_service.transponder, + self._transponder_services_iters).show() if response == Gtk.ResponseType.CANCEL or response == -4: switch.set_active(False) + self._transponder_services_iters = None return for elem in self._TRANSPONDER_ELEMENTS: @@ -388,19 +421,21 @@ class ServiceDetailsDialog: class TransponderServicesDialog: - def __init__(self, transient, view, transponder): + def __init__(self, transient, view, transponder, tr_iters): builder = Gtk.Builder() builder.add_objects_from_file(UI_RESOURCES_PATH + "service_details_dialog.glade", ("tr_services_dialog", "transponder_services_liststore")) self._dialog = builder.get_object("tr_services_dialog") self._dialog.set_transient_for(transient) self._srv_model = builder.get_object("transponder_services_liststore") - self.append_services(view, transponder) + self.append_services(view, transponder, tr_iters) - def append_services(self, view, transponder): - for row in view.get_model(): + def append_services(self, view, transponder, tr_iters): + model = get_base_model(view.get_model()) + for row in model: if row[-1] == transponder: - self._srv_model.append((row[3], row[6], row[10])) + self._srv_model.append((row[3], row[6], row[7], row[10], row[11], row[16])) + tr_iters.append(model.get_iter(row.path)) def show(self): response = self._dialog.run()