diff --git a/app/ui/download_dialog.py b/app/ui/download_dialog.py index 3fbd3152..c3481d45 100644 --- a/app/ui/download_dialog.py +++ b/app/ui/download_dialog.py @@ -2,7 +2,7 @@ from app.commons import run_idle, run_task from app.ftp import download_data, DownloadDataType, upload_data from app.properties import Profile from . import Gtk, UI_RESOURCES_PATH, TEXT_DOMAIN -from .dialogs import show_dialog, DialogType +from .dialogs import show_dialog, DialogType, get_message def show_download_dialog(transient, options, open_data, profile=Profile.ENIGMA_2): @@ -82,7 +82,7 @@ class DownloadDialog: download_type=d_type, remove_unused=self._remove_unused_check_button.get_active(), profile=self._profile, - callback=lambda: self.show_info_message("Done!", Gtk.MessageType.INFO)) + callback=lambda: self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO)) except Exception as e: message = str(getattr(e, "message", str(e))) self.show_info_message(message, Gtk.MessageType.ERROR) diff --git a/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo b/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo index b3248e89..4102f139 100644 Binary files a/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo and b/app/ui/lang/ru/LC_MESSAGES/demon-editor.mo differ diff --git a/app/ui/service_details_dialog.glade b/app/ui/service_details_dialog.glade index 93cfbe62..3f01755c 100644 --- a/app/ui/service_details_dialog.glade +++ b/app/ui/service_details_dialog.glade @@ -379,6 +379,7 @@ 10 gtk-edit + 2 @@ -405,6 +406,7 @@ True 1 0 + @@ -421,6 +423,8 @@ 7 7 gtk-edit + + @@ -1109,6 +1113,7 @@ 12 gtk-edit + 7 @@ -1161,6 +1166,7 @@ 10 gtk-edit + 5 @@ -1187,6 +1193,7 @@ 10 gtk-edit + 6 diff --git a/app/ui/service_details_dialog.py b/app/ui/service_details_dialog.py index 62a7bb08..c2fa1997 100644 --- a/app/ui/service_details_dialog.py +++ b/app/ui/service_details_dialog.py @@ -3,7 +3,7 @@ import re 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, POLARIZATION, \ - get_key_by_value, get_value_by_name, FEC_DEFAULT, PLS_MODE + get_key_by_value, get_value_by_name, FEC_DEFAULT, PLS_MODE, SERVICE_TYPE from app.properties import Profile from . import Gtk, Gdk, UI_RESOURCES_PATH, HIDE_ICON, TEXT_DOMAIN from .dialogs import show_dialog, DialogType, Action @@ -26,7 +26,7 @@ class ServiceDetailsDialog: "teletext_pid_entry", "pls_code_entry", "stream_id_entry", "tr_flag_entry", "audio_pid_entry") _NOT_EMPTY_DIGIT_ELEMENTS = ("sid_entry", "freq_entry", "rate_entry", "transponder_id_entry", "network_id_entry", - "namespace_entry") + "namespace_entry", "srv_type_entry") _DIGIT_ENTRY_NAME = "digit-entry" @@ -36,7 +36,8 @@ class ServiceDetailsDialog: "on_create_new": self.on_create_new, "on_digit_entry_changed": self.on_digit_entry_changed, "on_tr_edit_toggled": self.on_tr_edit_toggled, - "on_non_empty_entry_changed": self.on_non_empty_entry_changed} + "on_non_empty_entry_changed": self.on_non_empty_entry_changed, + "update_reference": self.update_reference} builder = Gtk.Builder() builder.set_translation_domain(TEXT_DOMAIN) @@ -48,6 +49,7 @@ class ServiceDetailsDialog: self._dialog.set_transient_for(transient) self._profile = Profile(options["profile"]) self._satellites_xml_path = options.get(self._profile.value)["data_dir_path"] + "satellites.xml" + self._picons_dir_path = options.get(self._profile.value)["picons_dir_path"] self._services_view = view self._action = action self._old_service = None @@ -95,7 +97,7 @@ class ServiceDetailsDialog: # Service elements self._name_entry = builder.get_object("name_entry") self._package_entry = builder.get_object("package_entry") - self._srv_type_entry = builder.get_object("srv_type_entry") + self._srv_type_entry = self._non_empty_elements.get("srv_type_entry") self._service_type_combo_box = builder.get_object("service_type_combo_box") self._cas_entry = builder.get_object("cas_entry") self._reference_entry = builder.get_object("reference_entry") @@ -167,7 +169,6 @@ class ServiceDetailsDialog: # Service self._name_entry.set_text(srv.service) self._package_entry.set_text(srv.package) - self.select_active_text(self._service_type_combo_box, srv.service_type) self._sid_entry.set_text(str(int(srv.ssid, 16))) # Transponder self._freq_entry.set_text(srv.freq) @@ -196,8 +197,6 @@ class ServiceDetailsDialog: self.init_enigma2_pids(flags) self.init_enigma2_cas(flags) - self._reference_entry.set_text(srv.picon_id.replace("_", ":").rstrip(".png")) - def init_enigma2_flags(self, flags): f_flags = list(filter(lambda x: x.startswith("f:"), flags)) if f_flags: @@ -237,7 +236,6 @@ class ServiceDetailsDialog: elif pid.startswith(Pids.SUBTITLE.value): pass - @run_idle def init_enigma2_transponder_data(self, srv): """ Transponder data initialisation """ data = srv.data_id.split(":") @@ -253,21 +251,23 @@ class ServiceDetailsDialog: self._pls_code_entry.set_text(tr_data[12]) self.select_active_text(self._pls_mode_combo_box, PLS_MODE.get(tr_data[13])) - self._srv_type_entry.set_text(data[4]) self._namespace_entry.set_text(str(int(data[1], 16))) self._transponder_id_entry.set_text(str(int(data[2], 16))) self._network_id_entry.set_text(str(int(data[3], 16))) self.select_active_text(self._invertion_combo_box, Inversion(tr_data[5]).name) + # Should be called last to properly initialize the reference + self._srv_type_entry.set_text(data[4]) # ***************** Init Neutrino data *********************# def init_neutrino_data(self, srv): srv_data = srv.data_id.split(":") tr_data = srv.transponder.split(":") - self._reference_entry.set_text(srv.picon_id.rstrip(".png")) self._transponder_id_entry.set_text(str(int(tr_data[0], 16))) self._network_id_entry.set_text(str(int(tr_data[1], 16))) self.select_active_text(self._invertion_combo_box, Inversion(tr_data[3]).name) + self.select_active_text(self._service_type_combo_box, srv.service_type) + self.update_reference_entry() def init_neutrino_ui_elements(self): self._builder.get_object("flags_box").set_visible(False) @@ -330,18 +330,28 @@ class ServiceDetailsDialog: service = self.get_service(fav_id, data_id, transponder) old_fav_id = self._old_service.fav_id if old_fav_id != fav_id: - self._services.pop(old_fav_id, None) - for bq in self._bouquets.values(): - indexes = [] - for i, f_id in enumerate(bq): - if old_fav_id == f_id: - indexes.append(i) - for i in indexes: - bq[i] = fav_id + self.update_bouquets(fav_id, old_fav_id) self._services[fav_id] = service + if self._old_service.picon_id != service.picon_id: + self.update_picon_name(self._old_service.picon_id, service.picon_id) self._current_model.set(self._current_itr, {i: v for i, v in enumerate(service)}) self._old_service = service + def update_bouquets(self, fav_id, old_fav_id): + self._services.pop(old_fav_id, None) + for bq in self._bouquets.values(): + indexes = [] + for i, f_id in enumerate(bq): + if old_fav_id == f_id: + indexes.append(i) + for i in indexes: + bq[i] = fav_id + + def update_picon_name(self, old_name, new_name): + pass + # for file in os.listdir(self._picons_dir_path): + # os.rename(old_name, file.replace(old_name, new_name)) + def on_new(self): service = self.get_service(*self.get_srv_data(), self.get_transponder_data()) print(service) @@ -356,10 +366,10 @@ class ServiceDetailsDialog: locked=self._old_service.locked, hide=HIDE_ICON if self._hide_check_button.get_active() else None, package=self._package_entry.get_text(), - service_type=self._service_type_combo_box.get_active_id(), + service_type=SERVICE_TYPE.get(self._srv_type_entry.get_text(), SERVICE_TYPE["3"]), picon=self._old_service.picon, - picon_id=self._old_service.picon_id, - ssid="{:x}".format(int(self._sid_entry.get_text())), + picon_id=self._reference_entry.get_text().replace(":", "_") + ".png", + ssid="{:04x}".format(int(self._sid_entry.get_text())), freq=freq, rate=rate, pol=pol, @@ -523,6 +533,23 @@ class ServiceDetailsDialog: return False return True + def update_reference(self, entry, event=None): + if not self.is_data_correct() or (event is None and self._profile is Profile.NEUTRINO_MP): + return + self.update_reference_entry() + + def update_reference_entry(self): + srv_type = 0 if self._srv_type_entry.get_text() == "2" else 1 + ssid = int(self._sid_entry.get_text()) + tid = int(self._transponder_id_entry.get_text()) + nid = int(self._network_id_entry.get_text()) + if self._profile is Profile.ENIGMA_2: + on_id = int(self._namespace_entry.get_text()) + ref = "1:0:{}:{:X}:{:X}:{:X}:{:X}:0:0:0".format(srv_type, ssid, tid, nid, on_id) + self._reference_entry.set_text(ref) + else: + self._reference_entry.set_text("{:x}{:04x}{:04x}".format(tid, nid, ssid)) + class TransponderServicesDialog: def __init__(self, transient, model, transponder, tr_iters): diff --git a/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo b/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo index b3248e89..4102f139 100644 Binary files a/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo and b/deb/usr/share/locale/ru/LC_MESSAGES/demon-editor.mo differ diff --git a/po/ru/demon-editor.mo b/po/ru/demon-editor.mo index b3248e89..4102f139 100644 Binary files a/po/ru/demon-editor.mo and b/po/ru/demon-editor.mo differ diff --git a/po/ru/demon-editor.po b/po/ru/demon-editor.po index 0ed9a789..a146c2a8 100644 --- a/po/ru/demon-editor.po +++ b/po/ru/demon-editor.po @@ -443,6 +443,9 @@ msgstr "Пожалуйста, проверте параметры и попро msgid "No satellites.xml file is selected!" msgstr "Не выбран файл satellites.xml!" +msgid "Error. Verify the data!" +msgstr "Ошибка. Проверьте данные!" +