From 5ded562e12fdc6db7b19e7e07ae1cdb0790b3910 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Wed, 28 Apr 2021 14:12:59 +0300 Subject: [PATCH] builder creation refactoring --- app/ui/backup.py | 7 ++----- app/ui/control.py | 9 +++------ app/ui/dialogs.py | 21 ++++++++++++++++++++ app/ui/download_dialog.py | 6 ++---- app/ui/epg_dialog.py | 10 ++++------ app/ui/ftp.py | 6 ++---- app/ui/imports.py | 9 +++------ app/ui/iptv.py | 34 +++++++++++--------------------- app/ui/main_app_window.py | 6 ++---- app/ui/picons_manager.py | 6 ++---- app/ui/satellites_dialog.py | 34 ++++++++++---------------------- app/ui/service_details_dialog.py | 14 ++++--------- app/ui/settings_dialog.py | 6 ++---- app/ui/transmitter.py | 5 ++--- 14 files changed, 70 insertions(+), 103 deletions(-) diff --git a/app/ui/backup.py b/app/ui/backup.py index 278f2893..c3f2cc12 100644 --- a/app/ui/backup.py +++ b/app/ui/backup.py @@ -8,7 +8,7 @@ from enum import Enum from app.commons import run_idle from app.settings import SettingsType -from app.ui.dialogs import show_dialog, DialogType +from app.ui.dialogs import show_dialog, DialogType, get_builder from app.ui.main_helper import append_text_to_tview from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey @@ -30,10 +30,7 @@ class BackupDialog: "on_resize": self.on_resize, "on_key_release": self.on_key_release} - builder = Gtk.Builder() - builder.set_translation_domain("demon-editor") - builder.add_from_file(UI_RESOURCES_PATH + "backup_dialog.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "backup_dialog.glade", handlers) self._settings = settings self._s_type = settings.setting_type diff --git a/app/ui/control.py b/app/ui/control.py index 264f1b52..83bccc64 100644 --- a/app/ui/control.py +++ b/app/ui/control.py @@ -6,7 +6,7 @@ from urllib.parse import quote from gi.repository import GLib -from .dialogs import get_dialogs_string, show_dialog, DialogType, get_message +from .dialogs import show_dialog, DialogType, get_message, get_builder from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, Column from ..commons import run_task, run_with_delay, log, run_idle from ..connections import HttpAPI @@ -84,8 +84,7 @@ class ControlBox(Gtk.HBox): self._timer = timer - builder = Gtk.Builder() - builder.add_from_string(get_dialogs_string(self._UI_PATH)) + builder = get_builder(self._UI_PATH, None, use_str=True) row_box = builder.get_object("timer_row_box") name_label = builder.get_object("timer_name_label") description_label = builder.get_object("timer_description_label") @@ -130,9 +129,7 @@ class ControlBox(Gtk.HBox): "on_timers_press": self.on_timers_press, "on_timers_drag_data_received": self.on_timers_drag_data_received} - builder = Gtk.Builder() - builder.add_from_file(UI_RESOURCES_PATH + "control.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "control.glade", handlers) self.add(builder.get_object("main_box_frame")) self._stack = builder.get_object("stack") diff --git a/app/ui/dialogs.py b/app/ui/dialogs.py index 6b21f1b4..1c7a2330 100644 --- a/app/ui/dialogs.py +++ b/app/ui/dialogs.py @@ -185,5 +185,26 @@ def get_dialogs_string(path): return "".join(f) +def get_builder(path, handlers=None, use_str=False, objects=None): + """ Creates and returns a Gtk.Builder instance. """ + builder = Gtk.Builder() + builder.set_translation_domain(TEXT_DOMAIN) + + if use_str: + if objects: + builder.add_objects_from_string(get_dialogs_string(path).format(use_header=IS_GNOME_SESSION), objects) + else: + builder.add_from_string(get_dialogs_string(path).format(use_header=IS_GNOME_SESSION)) + else: + if objects: + builder.add_objects_from_file(path, objects) + else: + builder.add_from_file(path) + + builder.connect_signals(handlers or {}) + + return builder + + if __name__ == "__main__": pass diff --git a/app/ui/download_dialog.py b/app/ui/download_dialog.py index ac1dadc1..bf8cae66 100644 --- a/app/ui/download_dialog.py +++ b/app/ui/download_dialog.py @@ -8,7 +8,7 @@ from app.settings import SettingsType from app.ui.backup import backup_data, restore_data from app.ui.main_helper import append_text_to_tview from app.ui.settings_dialog import show_settings_dialog -from .dialogs import show_dialog, DialogType, get_message +from .dialogs import show_dialog, DialogType, get_message, get_builder from .uicommons import Gtk, UI_RESOURCES_PATH @@ -27,9 +27,7 @@ class DownloadDialog: "on_remove_unused_bouquets_toggled": self.on_remove_unused_bouquets_toggled, "on_info_bar_close": self.on_info_bar_close} - builder = Gtk.Builder() - builder.add_from_file(UI_RESOURCES_PATH + "download_dialog.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "download_dialog.glade", handlers) self._dialog_window = builder.get_object("download_dialog_window") self._dialog_window.set_transient_for(transient) diff --git a/app/ui/epg_dialog.py b/app/ui/epg_dialog.py index a87a34f3..6e970a78 100644 --- a/app/ui/epg_dialog.py +++ b/app/ui/epg_dialog.py @@ -8,13 +8,14 @@ from enum import Enum from urllib.error import HTTPError, URLError from gi.repository import GLib + from app.commons import run_idle, run_task from app.connections import download_data, DownloadType from app.eparser.ecommons import BouquetService, BqServiceType from app.tools.epg import EPG, ChannelsParser -from app.ui.dialogs import get_message, show_dialog, DialogType +from app.ui.dialogs import get_message, show_dialog, DialogType, get_builder from .main_helper import on_popup_menu, update_entry_data -from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN, Column, EPG_ICON, KeyboardKey +from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, Column, EPG_ICON, KeyboardKey class RefsSource(Enum): @@ -66,10 +67,7 @@ class EpgDialog: self._show_tooltips = True self._download_xml_is_active = False - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_from_file(UI_RESOURCES_PATH + "epg_dialog.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "epg_dialog.glade", handlers) self._dialog = builder.get_object("epg_dialog_window") self._dialog.set_transient_for(transient) diff --git a/app/ui/ftp.py b/app/ui/ftp.py index cba301e1..13194c66 100644 --- a/app/ui/ftp.py +++ b/app/ui/ftp.py @@ -12,7 +12,7 @@ from gi.repository import GLib from app.commons import log, run_task, run_idle from app.connections import UtfFTP -from app.ui.dialogs import show_dialog, DialogType +from app.ui.dialogs import show_dialog, DialogType, get_builder from app.ui.main_helper import on_popup_menu from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, MOD_MASK @@ -68,9 +68,7 @@ class FtpClientBox(Gtk.HBox): "on_view_press": self.on_view_press, "on_view_release": self.on_view_release} - builder = Gtk.Builder() - builder.add_from_file(UI_RESOURCES_PATH + "ftp.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "ftp.glade", handlers) self.add(builder.get_object("main_frame")) self._ftp_info_label = builder.get_object("ftp_info_label") diff --git a/app/ui/imports.py b/app/ui/imports.py index 206f1138..d683200c 100644 --- a/app/ui/imports.py +++ b/app/ui/imports.py @@ -6,7 +6,7 @@ from app.eparser import get_bouquets, get_services, BouquetsReader from app.eparser.ecommons import BqType, BqServiceType, Bouquet from app.eparser.neutrino.bouquets import parse_webtv, parse_bouquets as get_neutrino_bouquets from app.settings import SettingsType -from app.ui.dialogs import show_dialog, DialogType, get_chooser_dialog, get_message +from app.ui.dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder from app.ui.main_helper import on_popup_menu from .uicommons import Gtk, UI_RESOURCES_PATH, KeyboardKey, Column @@ -80,10 +80,7 @@ class ImportDialog: "on_resize": self.on_resize, "on_key_press": self.on_key_press} - builder = Gtk.Builder() - builder.set_translation_domain("demon-editor") - builder.add_from_file(UI_RESOURCES_PATH + "import_dialog.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "import_dialog.glade", handlers) self._bq_services = {} self._services = {} @@ -124,7 +121,7 @@ class ImportDialog: for bq in bqs.bouquets: self._main_model.append((bq.name, bq.type, True)) self._bq_services[(bq.name, bq.type)] = bq.services - + if self._profile is SettingsType.ENIGMA_2: services = get_services(path, self._profile, 5 if self._settings.v5_support else 4) elif self._profile is SettingsType.NEUTRINO_MP: diff --git a/app/ui/iptv.py b/app/ui/iptv.py index b5f7f6cb..6b08367d 100644 --- a/app/ui/iptv.py +++ b/app/ui/iptv.py @@ -14,10 +14,9 @@ from app.eparser.iptv import (NEUTRINO_FAV_ID_FORMAT, StreamType, ENIGMA2_FAV_ID parse_m3u) from app.settings import SettingsType from app.tools.yt import YouTubeException, YouTube -from app.ui.dialogs import Action, show_dialog, DialogType, get_dialogs_string, get_message +from app.ui.dialogs import Action, show_dialog, DialogType, get_message, get_builder from app.ui.main_helper import get_base_model, get_iptv_url, on_popup_menu, get_picon_pixbuf -from app.ui.uicommons import (Gtk, Gdk, TEXT_DOMAIN, UI_RESOURCES_PATH, IPTV_ICON, Column, IS_GNOME_SESSION, - KeyboardKey, get_yt_icon) +from app.ui.uicommons import (Gtk, Gdk, UI_RESOURCES_PATH, IPTV_ICON, Column, KeyboardKey, get_yt_icon) _DIGIT_ENTRY_NAME = "digit-entry" _ENIGMA2_REFERENCE = "{}:0:{}:{:X}:{:X}:{:X}:{:X}:0:0:0" @@ -66,11 +65,8 @@ class IptvDialog: self._yt_links = None self._yt_dl = None - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_string(get_dialogs_string(_UI_PATH).format(use_header=IS_GNOME_SESSION), - ("iptv_dialog", "stream_type_liststore", "yt_quality_liststore")) - builder.connect_signals(handlers) + builder = get_builder(_UI_PATH, handlers, use_str=True, + objects=("iptv_dialog", "stream_type_liststore", "yt_quality_liststore")) self._dialog = builder.get_object("iptv_dialog") self._dialog.set_transient_for(transient) @@ -322,10 +318,8 @@ class SearchUnavailableDialog: def __init__(self, transient, model, fav_bouquet, iptv_rows, s_type): handlers = {"on_response": self.on_response} - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_file(UI_RESOURCES_PATH + "iptv.glade", ("search_unavailable_streams_dialog",)) - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "iptv.glade", handlers, + objects=("search_unavailable_streams_dialog",)) self._dialog = builder.get_object("search_unavailable_streams_dialog") self._dialog.set_transient_for(transient) @@ -420,11 +414,8 @@ class IptvListDialog: self._s_type = s_type - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_string(get_dialogs_string(_UI_PATH).format(use_header=IS_GNOME_SESSION), - ("iptv_list_configuration_dialog", "stream_type_liststore")) - builder.connect_signals(handlers) + builder = get_builder(_UI_PATH, handlers, use_str=True, + objects=("iptv_list_configuration_dialog", "stream_type_liststore")) self._dialog = builder.get_object("iptv_list_configuration_dialog") self._dialog.set_transient_for(transient) @@ -799,12 +790,9 @@ class YtListImportDialog: self._settings = settings self._yt = None - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_string(get_dialogs_string(_UI_PATH).format(use_header=IS_GNOME_SESSION), - ("yt_import_dialog_window", "yt_liststore", "yt_quality_liststore", - "yt_popup_menu", "remove_selection_image")) - builder.connect_signals(handlers) + builder = get_builder(_UI_PATH, handlers, use_str=True, + objects=("yt_import_dialog_window", "yt_liststore", "yt_quality_liststore", + "yt_popup_menu", "remove_selection_image")) self._dialog = builder.get_object("yt_import_dialog_window") self._dialog.set_transient_for(transient) diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index ebbfbd4b..fd3afbf5 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -22,7 +22,7 @@ from app.tools.media import Player, Recorder from app.ui.epg_dialog import EpgDialog from app.ui.transmitter import LinksTransmitter from .backup import BackupDialog, backup_data, clear_data_path -from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog, get_message +from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog, get_message, get_builder from .download_dialog import DownloadDialog from .imports import ImportDialog, import_bouquet from .iptv import IptvDialog, SearchUnavailableDialog, IptvListConfigurationDialog, YtListImportDialog, M3uImportDialog @@ -219,9 +219,7 @@ class Application(Gtk.Application): self._NEW_COLOR = None # Color for new services in the main list self._EXTRA_COLOR = None # Color for services with a extra name for the bouquet - builder = Gtk.Builder() - builder.add_from_file(UI_RESOURCES_PATH + "main_window.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "main_window.glade", handlers) self._main_window = builder.get_object("main_window") main_window_size = self._settings.get("window_size") # Setting the last size of the window if it was saved diff --git a/app/ui/picons_manager.py b/app/ui/picons_manager.py index a1de5fdf..a4d0e924 100644 --- a/app/ui/picons_manager.py +++ b/app/ui/picons_manager.py @@ -12,7 +12,7 @@ from app.connections import upload_data, DownloadType, download_data, remove_pic from app.settings import SettingsType, Settings from app.tools.picons import PiconsParser, parse_providers, Provider, convert_to, download_picon from app.tools.satellites import SatellitesParser, SatelliteSource -from .dialogs import show_dialog, DialogType, get_message +from .dialogs import show_dialog, DialogType, get_message, get_builder from .main_helper import (update_entry_data, append_text_to_tview, scroll_to, on_popup_menu, get_base_model, set_picon, get_picon_pixbuf) from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TV_ICON, Column, KeyboardKey @@ -76,9 +76,7 @@ class PiconsDialog: "on_tree_view_key_press": self.on_tree_view_key_press, "on_popup_menu": on_popup_menu} - builder = Gtk.Builder() - builder.add_from_file(UI_RESOURCES_PATH + "picons_manager.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "picons_manager.glade", handlers) self._dialog = builder.get_object("picons_dialog") self._dialog.set_transient_for(transient) diff --git a/app/ui/satellites_dialog.py b/app/ui/satellites_dialog.py index c76f2483..066fb9b3 100644 --- a/app/ui/satellites_dialog.py +++ b/app/ui/satellites_dialog.py @@ -9,10 +9,10 @@ from app.commons import run_idle, run_task, log from app.eparser import get_satellites, write_satellites, Satellite, Transponder from app.eparser.ecommons import PLS_MODE, get_key_by_value from app.tools.satellites import SatellitesParser, SatelliteSource, ServicesParser -from .dialogs import show_dialog, DialogType, get_dialogs_string, get_chooser_dialog, get_message +from .dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder from .main_helper import move_items, scroll_to, append_text_to_tview, get_base_model, on_popup_menu from .search import SearchProvider -from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN, MOVE_KEYS, KeyboardKey, IS_GNOME_SESSION, MOD_MASK +from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK _UI_PATH = UI_RESOURCES_PATH + "satellites_dialog.glade" @@ -44,12 +44,9 @@ class SatellitesDialog: "on_resize": self.on_resize, "on_quit": self.on_quit} - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_string(get_dialogs_string(_UI_PATH), - ("satellites_editor_window", "satellites_tree_store", "popup_menu", - "left_header_menu", "popup_menu_add_image", "popup_menu_add_image_2")) - builder.connect_signals(handlers) + builder = get_builder(_UI_PATH, handlers, use_str=True, + objects=("satellites_editor_window", "satellites_tree_store", "popup_menu", + "left_header_menu", "popup_menu_add_image", "popup_menu_add_image_2")) self._window = builder.get_object("satellites_editor_window") self._window.set_transient_for(transient) @@ -315,13 +312,8 @@ class TransponderDialog: def __init__(self, transient, transponder: Transponder = None): handlers = {"on_entry_changed": self.on_entry_changed} - - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_string(get_dialogs_string(_UI_PATH).format(use_header=IS_GNOME_SESSION), - ("transponder_dialog", "pol_store", "fec_store", "mod_store", "system_store", - "pls_mode_store")) - builder.connect_signals(handlers) + objects = ("transponder_dialog", "pol_store", "fec_store", "mod_store", "system_store", "pls_mode_store") + builder = get_builder(_UI_PATH, handlers, use_str=True, objects=objects) self._dialog = builder.get_object("transponder_dialog") self._dialog.set_transient_for(transient) @@ -400,10 +392,7 @@ class SatelliteDialog: """ Shows dialog for adding or edit satellite """ def __init__(self, transient, satellite: Satellite = None): - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_string(get_dialogs_string(_UI_PATH).format(use_header=IS_GNOME_SESSION), - ("satellite_dialog", "side_store", "pos_adjustment")) + builder = get_builder(_UI_PATH, use_str=True, objects=("satellite_dialog", "side_store", "pos_adjustment")) self._dialog = builder.get_object("satellite_dialog") self._dialog.set_transient_for(transient) @@ -465,14 +454,11 @@ class UpdateDialog: self._parser = None self._size_name = "{}_window_size".format("_".join(re.findall("[A-Z][^A-Z]*", self.__class__.__name__))).lower() - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_file(UI_RESOURCES_PATH + "satellites_dialog.glade", - ("satellites_update_window", "update_source_store", "update_sat_list_store", + builder = get_builder(UI_RESOURCES_PATH + "satellites_dialog.glade", handlers, + objects=("satellites_update_window", "update_source_store", "update_sat_list_store", "update_sat_list_model_filter", "update_sat_list_model_sort", "side_store", "pos_adjustment", "pos_adjustment2", "satellites_update_popup_menu", "remove_selection_image", "update_transponder_store", "update_service_store")) - builder.connect_signals(handlers) self._window = builder.get_object("satellites_update_window") self._window.set_transient_for(transient) diff --git a/app/ui/service_details_dialog.py b/app/ui/service_details_dialog.py index 23ff6c5f..1be8e4a0 100644 --- a/app/ui/service_details_dialog.py +++ b/app/ui/service_details_dialog.py @@ -8,9 +8,9 @@ from app.eparser.ecommons import (MODULATION, Inversion, ROLL_OFF, Pilot, Flag, TrType, SystemCable, T_SYSTEM, BANDWIDTH, TRANSMISSION_MODE, GUARD_INTERVAL, T_FEC, HIERARCHY, A_MODULATION) from app.settings import SettingsType -from .dialogs import show_dialog, DialogType, Action, get_dialogs_string +from .dialogs import show_dialog, DialogType, Action, get_builder from .main_helper import get_base_model -from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, HIDE_ICON, TEXT_DOMAIN, CODED_ICON, Column, IS_GNOME_SESSION +from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, HIDE_ICON, CODED_ICON, Column _UI_PATH = UI_RESOURCES_PATH + "service_details_dialog.glade" @@ -46,10 +46,7 @@ class ServiceDetailsDialog: "on_non_empty_entry_changed": self.on_non_empty_entry_changed, "on_cancel": lambda item: self._dialog.destroy()} - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_from_string(get_dialogs_string(_UI_PATH).format(use_header=IS_GNOME_SESSION)) - builder.connect_signals(handlers) + builder = get_builder(_UI_PATH, handlers, use_str=True) self._builder = builder self._dialog = builder.get_object("service_details_dialog") @@ -875,10 +872,7 @@ class ServiceDetailsDialog: class TransponderServicesDialog: def __init__(self, transient, services_view, transponder, tr_iters): - builder = Gtk.Builder() - builder.set_translation_domain(TEXT_DOMAIN) - builder.add_objects_from_string(get_dialogs_string(_UI_PATH).format(use_header=IS_GNOME_SESSION), - ("tr_services_dialog", "transponder_services_liststore")) + builder = get_builder(_UI_PATH, use_str=True, objects=("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") diff --git a/app/ui/settings_dialog.py b/app/ui/settings_dialog.py index 0a3ee94a..7b73b7b8 100644 --- a/app/ui/settings_dialog.py +++ b/app/ui/settings_dialog.py @@ -4,7 +4,7 @@ import re from app.commons import run_task, run_idle, log from app.connections import test_telnet, test_ftp, TestException, test_http, HttpApiException from app.settings import SettingsType, Settings, PlayStreamsMode -from app.ui.dialogs import show_dialog, DialogType, get_message, get_chooser_dialog +from app.ui.dialogs import show_dialog, DialogType, get_message, get_chooser_dialog, get_builder from .main_helper import update_entry_data, scroll_to, get_picon_pixbuf from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, FavClickMode, DEFAULT_ICON, APP_FONT @@ -64,9 +64,7 @@ class SettingsDialog: self._profiles = self._settings.profiles self._s_type = self._settings.setting_type - builder = Gtk.Builder() - builder.add_from_file(UI_RESOURCES_PATH + "settings_dialog.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "settings_dialog.glade", handlers) self._dialog = builder.get_object("settings_dialog") self._dialog.set_transient_for(transient) diff --git a/app/ui/transmitter.py b/app/ui/transmitter.py index 616ae82e..726a311b 100644 --- a/app/ui/transmitter.py +++ b/app/ui/transmitter.py @@ -7,6 +7,7 @@ from gi.repository import GLib from app.commons import log from app.connections import HttpAPI from app.tools.yt import YouTube +from app.ui.dialogs import get_builder from app.ui.iptv import get_yt_icon from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH @@ -34,9 +35,7 @@ class LinksTransmitter: self._app_window = app_window self._is_status_icon = True - builder = Gtk.Builder() - builder.add_from_file(UI_RESOURCES_PATH + "transmitter.glade") - builder.connect_signals(handlers) + builder = get_builder(UI_RESOURCES_PATH + "transmitter.glade", handlers) self._main_window = builder.get_object("main_window") self._url_entry = builder.get_object("url_entry")