From d78cee1241fd9bf63a1166c2f425c7183585b0d9 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Mon, 18 Aug 2025 14:20:14 +0300 Subject: [PATCH] enable support for creating a new channel --- app/ui/main.glade | 1 + app/ui/main.py | 21 +++++++------ app/ui/service_details_dialog.glade | 5 +-- app/ui/service_details_dialog.py | 47 ++++++++++++++++++----------- 4 files changed, 46 insertions(+), 28 deletions(-) diff --git a/app/ui/main.glade b/app/ui/main.glade index ceec920b..798bf3b9 100644 --- a/app/ui/main.glade +++ b/app/ui/main.glade @@ -1551,6 +1551,7 @@ Author: Dmitriy Yefremov + True False New diff --git a/app/ui/main.py b/app/ui/main.py index f2d623b4..155ce71e 100644 --- a/app/ui/main.py +++ b/app/ui/main.py @@ -102,7 +102,9 @@ class Application(Gtk.Application): # Dynamically active elements depending on the selected view _SERVICE_ELEMENTS = ("services_to_fav_end_move_popup_item", "services_to_fav_move_popup_item", "services_create_bouquet_popup_item", "services_copy_popup_item", "services_edit_popup_item", - "services_add_new_popup_item", "services_picon_popup_item", "services_remove_popup_item") + "services_mark_not_in_bq_popup_item", "services_clear_not_in_bq_popup_item", + "services_clear_new_flag_item", "services_picon_popup_item", "services_remove_popup_item", + "services_reference_popup_item") _FAV_ELEMENTS = ("fav_cut_popup_item", "fav_paste_popup_item", "fav_locate_popup_item", "fav_iptv_popup_item", "fav_insert_marker_popup_item", "fav_insert_space_popup_item", "fav_edit_sub_menu_popup_item", @@ -3069,18 +3071,15 @@ class Application(Gtk.Application): self._tool_elements[elem].set_sensitive(self._bq_selected and not is_service) else: self._tool_elements[elem].set_sensitive(not_empty and not is_service) - for elem in self._SERVICE_ELEMENTS: - self._tool_elements[elem].set_sensitive(not_empty and is_service) - for elem in self._BOUQUET_ELEMENTS: - self._tool_elements[elem].set_sensitive(False) - + [self._tool_elements[elem].set_sensitive(not_empty and is_service) for elem in self._SERVICE_ELEMENTS] + [self._tool_elements[elem].set_sensitive(False) for elem in self._BOUQUET_ELEMENTS] for elem in self._FAV_IPTV_ELEMENTS: is_iptv = self._bq_selected and not is_service if self._s_type is SettingsType.NEUTRINO_MP: is_iptv = is_iptv and BqType(self._bq_selected.split(":")[1]) is BqType.WEBTV self._tool_elements[elem].set_sensitive(is_iptv) - for elem in self._COMMONS_ELEMENTS: - self._tool_elements[elem].set_sensitive(not_empty) + + [self._tool_elements[elem].set_sensitive(not_empty) for elem in self._COMMONS_ELEMENTS] if self._s_type is not SettingsType.ENIGMA_2: for elem in self._FAV_ENIGMA_ELEMENTS: @@ -4041,9 +4040,13 @@ class Application(Gtk.Application): if model_name == self.IPTV_MODEL: self.on_iptv_service_edit(model[paths][Column.IPTV_FAV_ID], view) else: - ServiceDetailsDialog(self, self._NEW_COLOR).show() + ServiceDetailsDialog(self).show() def on_services_add_new(self, item): + if self._s_type is SettingsType.NEUTRINO_MP: + self.show_error_message("Neutrino at the moment not supported!") + return + ServiceDetailsDialog(self, action=Action.ADD).show() def on_bouquets_edit(self, view): diff --git a/app/ui/service_details_dialog.glade b/app/ui/service_details_dialog.glade index 5bd88d27..52ba1bb3 100644 --- a/app/ui/service_details_dialog.glade +++ b/app/ui/service_details_dialog.glade @@ -298,12 +298,13 @@ Author: Dmitriy Yefremov - Create + Add True True Create and save as new service center - + + diff --git a/app/ui/service_details_dialog.py b/app/ui/service_details_dialog.py index 1eaed8c6..9e535c40 100644 --- a/app/ui/service_details_dialog.py +++ b/app/ui/service_details_dialog.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2018-2024 Dmitriy Yefremov +# Copyright (c) 2018-2025 Dmitriy Yefremov # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -62,10 +62,9 @@ class ServiceDetailsDialog: _DIGIT_ENTRY_NAME = "digit-entry" - def __init__(self, app, new_color, action=Action.EDIT): + def __init__(self, app, action=Action.EDIT): handlers = {"on_system_changed": self.on_system_changed, "on_save": self.on_save, - "on_create_new": self.on_create_new, "on_tr_edit_toggled": self.on_tr_edit_toggled, "update_reference": self.update_reference, "on_cas_entry_changed": self.on_cas_entry_changed, @@ -89,7 +88,7 @@ class ServiceDetailsDialog: self._old_service = None self._services = app.current_services self._bouquets = app.current_bouquets - self._new_color = new_color + self._new_color = app._NEW_COLOR self._transponder_services_iters = None self._current_model = None self._current_itr = None @@ -177,20 +176,30 @@ class ServiceDetailsDialog: @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") + + 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) - for elem in self._non_empty_elements.values(): - elem.set_text(" ") - elem.set_text("") + [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._current_model = get_base_model(self._services_view.get_model()) + def update_data_elements(self): model, paths = self._services_view.get_selection().get_selected_rows() # Unpacking to search for an iterator for the base model @@ -403,9 +412,6 @@ class ServiceDetailsDialog: def on_save(self, item): self.save_data() - def on_create_new(self, item): - self.save_data() - def save_data(self): if self._s_type is SettingsType.NEUTRINO_MP and self._tr_type is not TrType.Satellite: show_dialog(DialogType.ERROR, transient=self._dialog, text="Not implemented yet!") @@ -423,12 +429,21 @@ class ServiceDetailsDialog: def on_new(self): """ Create new service. """ - service = self.get_service(*self.get_srv_data(), self.get_satellite_transponder_data()) - show_dialog(DialogType.ERROR, transient=self._dialog, text="Not implemented yet!") + 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))) return True def on_edit(self): """ Edit current service. """ + service, extra_data = self.update_service_data() + self._current_model.set(self._current_itr, extra_data) + self._current_model.set(self._current_itr, {i: v for i, v in enumerate(service)}) + self.update_fav_view(self._old_service, service) + return True + + def update_service_data(self): fav_id, data_id = self.get_srv_data() # Transponder transponder = self._old_service.transponder @@ -443,7 +458,7 @@ class ServiceDetailsDialog: elif self._tr_type is TrType.ATSC: transponder = self.get_atsc_transponder_data() except Exception as e: - log("Edit service error: {}".format(e)) + log(f"Edit service error: {e}") show_dialog(DialogType.ERROR, transient=self._dialog, text="Error getting transponder parameters!") else: if self._transponder_services_iters: @@ -470,11 +485,9 @@ class ServiceDetailsDialog: if f_flags and Flag.is_new(Flag.parse(f_flags[0])): extra_data[Column.SRV_BACKGROUND] = self._new_color - self._current_model.set(self._current_itr, extra_data) - self._current_model.set(self._current_itr, {i: v for i, v in enumerate(service)}) - self.update_fav_view(self._old_service, service) self._old_service = service - return True + + return service, extra_data def update_bouquets(self, fav_id, old_fav_id): self._services.pop(old_fav_id, None)