From 4154f4d2f5f0b53763f68005f3e1aeec2962e7e7 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Sat, 20 Jan 2024 19:04:20 +0300 Subject: [PATCH] display info messages refactoring --- app/ui/backup.py | 8 +++----- app/ui/epg/epg.py | 7 +++---- app/ui/imports.py | 8 +++----- app/ui/iptv.py | 37 +++++++++++++++++++++---------------- app/ui/main.py | 8 ++------ app/ui/main_helper.py | 13 +++++++++++-- app/ui/settings_dialog.py | 9 +++------ app/ui/xml/dialogs.py | 8 +------- 8 files changed, 47 insertions(+), 51 deletions(-) diff --git a/app/ui/backup.py b/app/ui/backup.py index f7fd2f29..cda305a0 100644 --- a/app/ui/backup.py +++ b/app/ui/backup.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2018-2023 Dmitriy Yefremov +# Copyright (c) 2018-2024 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 @@ -38,7 +38,7 @@ from pathlib import Path from app.commons import run_idle, get_size_from_bytes from app.settings import SettingsType, SEP from app.ui.dialogs import show_dialog, DialogType, get_builder -from app.ui.main_helper import append_text_to_tview +from app.ui.main_helper import append_text_to_tview, show_info_bar_message from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, MOD_MASK, HeaderBar @@ -153,9 +153,7 @@ class BackupDialog: @run_idle def show_info_message(self, text, message_type): - self._info_bar.set_visible(True) - self._info_bar.set_message_type(message_type) - self._message_label.set_text(text) + show_info_bar_message(self._info_bar, self._message_label, text, message_type) def on_info_bar_close(self, bar=None, resp=None): self._info_bar.set_visible(False) diff --git a/app/ui/epg/epg.py b/app/ui/epg/epg.py index 073031d5..24b61710 100644 --- a/app/ui/epg/epg.py +++ b/app/ui/epg/epg.py @@ -50,7 +50,8 @@ from app.tools.epg import EPG, ChannelsParser, EpgEvent, XmlTvReader from app.ui.dialogs import translate, show_dialog, DialogType, get_builder, get_chooser_dialog from app.ui.tasks import BGTaskWidget from app.ui.timers import TimerTool -from ..main_helper import on_popup_menu, update_entry_data, scroll_to, update_toggle_model, update_filter_sat_positions +from ..main_helper import on_popup_menu, update_entry_data, scroll_to, update_toggle_model, update_filter_sat_positions, \ + show_info_bar_message from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, Column, EPG_ICON, KeyboardKey, Page, HeaderBar @@ -1175,9 +1176,7 @@ class EpgDialog: @run_idle def show_info_message(self, text, message_type): - self._info_bar.set_visible(True) - self._info_bar.set_message_type(message_type) - self._message_label.set_text(text) + show_info_bar_message(self._info_bar, self._message_label, text, message_type) @run_idle def update_source_info(self, info): diff --git a/app/ui/imports.py b/app/ui/imports.py index df6dd5b9..c108aa44 100644 --- a/app/ui/imports.py +++ b/app/ui/imports.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2018-2023 Dmitriy Yefremov +# Copyright (c) 2018-2024 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 @@ -36,7 +36,7 @@ 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, IS_DARWIN, SEP from app.ui.dialogs import show_dialog, DialogType, get_chooser_dialog, translate, get_builder -from app.ui.main_helper import on_popup_menu, get_iptv_data +from app.ui.main_helper import on_popup_menu, get_iptv_data, show_info_bar_message from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, KeyboardKey, Column, Page, HeaderBar @@ -373,9 +373,7 @@ class ImportDialog: @run_idle def show_info_message(self, text, message_type): - self._info_bar.set_visible(True) - self._info_bar.set_message_type(message_type) - self._message_label.set_text(text) + show_info_bar_message(self._info_bar, self._message_label, text, message_type) @run_idle def on_info_bar_close(self, bar=None, resp=None): diff --git a/app/ui/iptv.py b/app/ui/iptv.py index 05caa4d8..fefaa8b5 100644 --- a/app/ui/iptv.py +++ b/app/ui/iptv.py @@ -44,7 +44,7 @@ from app.eparser.iptv import (NEUTRINO_FAV_ID_FORMAT, StreamType, ENIGMA2_FAV_ID from app.settings import SettingsType from app.tools.yt import YouTubeException, YouTube from app.ui.dialogs import Action, show_dialog, DialogType, translate, get_builder -from app.ui.main_helper import get_iptv_url, on_popup_menu, get_picon_pixbuf +from app.ui.main_helper import get_iptv_url, on_popup_menu, get_picon_pixbuf, show_info_bar_message from app.ui.uicommons import (Gtk, Gdk, UI_RESOURCES_PATH, IPTV_ICON, Column, KeyboardKey, get_yt_icon, HeaderBar) _DIGIT_ENTRY_NAME = "digit-entry" @@ -163,14 +163,14 @@ class IptvDialog: self.on_url_changed(self._url_entry) if not is_data_correct(self._digit_elems) or self._url_entry.get_name() == _DIGIT_ENTRY_NAME: - self.show_info_message(translate("Error. Verify the data!"), Gtk.MessageType.ERROR) + self.show_info_message("Error. Verify the data!", Gtk.MessageType.ERROR) return url = self._url_entry.get_text() if all((self._url_prefix_box.get_visible(), self._url_prefix_combobox.get_active_id(), url.count("http") > 1 or urlparse(url).scheme.upper() in _URL_PREFIXES)): - self.show_info_message(translate("Invalid prefix for the given URL!"), Gtk.MessageType.ERROR) + self.show_info_message("Invalid prefix for the given URL!", Gtk.MessageType.ERROR) return if show_dialog(DialogType.QUESTION, self._dialog) in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT): @@ -390,9 +390,7 @@ class IptvDialog: @run_idle def show_info_message(self, text, message_type): - self._info_bar.set_visible(True) - self._info_bar.set_message_type(message_type) - self._message_label.set_text(text) + show_info_bar_message(self._info_bar, self._message_label, text, message_type) class SearchUnavailableDialog: @@ -509,6 +507,7 @@ class IptvListDialog: self._data_box = builder.get_object("iptv_list_data_box") self._start_values_grid = builder.get_object("start_values_grid") self._info_bar = builder.get_object("list_configuration_info_bar") + self._message_label = builder.get_object("list_configuration_message_label") self._reference_label = builder.get_object("reference_label") self._stream_type_check_button = builder.get_object("stream_type_default_check_button") self._id_default_check_button = builder.get_object("id_default_check_button") @@ -590,6 +589,10 @@ class IptvListDialog: for el in self._default_elems: el.set_active(True) + @run_idle + def show_info_message(self, text, message_type=Gtk.MessageType.INFO): + show_info_bar_message(self._info_bar, self._message_label, text, message_type) + def on_info_bar_close(self, bar=None, resp=None): self._info_bar.set_visible(False) @@ -630,7 +633,7 @@ class IptvListConfigurationDialog(IptvListDialog): @run_idle def on_apply(self, item): if not is_data_correct(self._digit_elems): - show_dialog(DialogType.ERROR, self._dialog, "Error. Verify the data!") + self.show_info_message("Error. Verify the data!", Gtk.MessageType.ERROR) return if self._s_type is SettingsType.ENIGMA_2: @@ -677,7 +680,7 @@ class IptvListConfigurationDialog(IptvListDialog): self._bouquet.clear() list(map(lambda r: self._bouquet.append(r[Column.FAV_ID]), self._fav_model)) - self._info_bar.set_visible(True) + self.show_info_message("Done!", Gtk.MessageType.INFO) self._ok_button.set_visible(True) @@ -728,8 +731,12 @@ class M3uImportDialog(IptvListDialog): GLib.idle_add(self._spinner.set_property, "active", False) def on_apply(self, item): + if not self._app.current_bouquet: + self.show_info_message("Error. No bouquet is selected!", Gtk.MessageType.ERROR) + return + if not is_data_correct(self._digit_elems): - show_dialog(DialogType.ERROR, self._dialog, "Error. Verify the data!") + self.show_info_message("Error. Verify the data!", Gtk.MessageType.ERROR) return picons = {} @@ -761,8 +768,8 @@ class M3uImportDialog(IptvListDialog): if self._picon_switch.get_active(): if self.is_default_values(): - show_dialog(DialogType.ERROR, self._dialog, - "Set values for TID, NID and Namespace for correct naming of the picons!") + msg = "Set values for TID, NID and Namespace for correct naming of the picons!" + self.show_info_message(msg, Gtk.MessageType.ERROR) return self.download_picons(picons) @@ -856,7 +863,7 @@ class M3uImportDialog(IptvListDialog): @run_idle def on_apply_done(self): - self._info_bar.set_visible(True) + self.show_info_message("Done!", Gtk.MessageType.INFO) self._ok_button.set_visible(True) self._picon_box.set_sensitive(False) @@ -1060,7 +1067,7 @@ class YtListImportDialog: srvs.append(srv) self.appender(srvs) - self.show_info_message(translate("Done!"), Gtk.MessageType.INFO) + self.show_info_message("Done!", Gtk.MessageType.INFO) @run_idle def update_active_elements(self, sensitive): @@ -1091,9 +1098,7 @@ class YtListImportDialog: @run_idle def show_info_message(self, text, message_type): - self._info_bar.set_visible(True) - self._info_bar.set_message_type(message_type) - self._message_label.set_text(text) + show_info_bar_message(self._info_bar, self._message_label, text, message_type) def on_selected_toggled(self, toggle, path): self._model.set_value(self._model.get_iter(path), 2, not toggle.get_active()) diff --git a/app/ui/main.py b/app/ui/main.py index 825fb536..37a658c9 100644 --- a/app/ui/main.py +++ b/app/ui/main.py @@ -3215,8 +3215,7 @@ class Application(Gtk.Application): self.show_error_message("No m3u file is selected!") return - if self._bq_selected: - M3uImportDialog(self._main_window, self._s_type, response, self).show() + M3uImportDialog(self._main_window, self._s_type, response, self).show() def append_imported_services(self, services): bq_services = self._bouquets.get(self._bq_selected) @@ -4438,10 +4437,7 @@ class Application(Gtk.Application): @run_idle def show_info_message(self, text, message_type=Gtk.MessageType.INFO): - self._info_bar.set_visible(False) - self._info_label.set_text(translate(text)) - self._info_bar.set_message_type(message_type) - self._info_bar.set_visible(True) + show_info_bar_message(self._info_bar, self._info_label, text, message_type) def on_info_bar_close(self, bar=None, resp=None): self._info_bar.set_visible(False) diff --git a/app/ui/main_helper.py b/app/ui/main_helper.py index b19c8af2..ffa19a7a 100644 --- a/app/ui/main_helper.py +++ b/app/ui/main_helper.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2018-2023 Dmitriy Yefremov +# Copyright (c) 2018-2024 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 @@ -33,7 +33,8 @@ __all__ = ("insert_marker", "move_items", "rename", "ViewTarget", "set_flags", " "is_only_one_item_selected", "gen_bouquets", "BqGenType", "get_selection", "get_service_reference", "get_model_data", "remove_all_unused_picons", "get_picon_pixbuf", "get_base_itrs", "get_iptv_url", "get_iptv_data", "update_entry_data", "append_text_to_tview", "on_popup_menu", "get_picon_file_name", - "update_toggle_model", "update_popup_filter_model", "update_filter_sat_positions", "get_pos_num") + "update_toggle_model", "update_popup_filter_model", "update_filter_sat_positions", "get_pos_num", + "show_info_bar_message") import os import re @@ -846,5 +847,13 @@ def on_popup_menu(menu, event): menu.popup(None, None, None, None, event.button, event.time) +def show_info_bar_message(bar, label, text, message_type=Gtk.MessageType.INFO): + """ Shows a message for info bars. """ + bar.set_visible(False) + label.set_text(translate(text)) + bar.set_message_type(message_type) + bar.set_visible(True) + + if __name__ == "__main__": pass diff --git a/app/ui/settings_dialog.py b/app/ui/settings_dialog.py index 80a76004..c8755522 100644 --- a/app/ui/settings_dialog.py +++ b/app/ui/settings_dialog.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2018-2023 Dmitriy Yefremov +# Copyright (c) 2018-2024 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 @@ -34,7 +34,7 @@ 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, PlaybackMode, IS_LINUX, SEP, IS_WIN from app.ui.dialogs import show_dialog, DialogType, translate, get_chooser_dialog, get_builder -from .main_helper import update_entry_data, scroll_to, get_picon_pixbuf +from .main_helper import update_entry_data, scroll_to, get_picon_pixbuf, show_info_bar_message from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, DEFAULT_ICON, APP_FONT, HeaderBar @@ -476,10 +476,7 @@ class SettingsDialog: @run_idle def show_info_message(self, text, message_type): - self._info_bar.set_visible(False) - self._info_bar.set_message_type(message_type) - self._message_label.set_text(translate(text)) - self._info_bar.set_visible(True) + show_info_bar_message(self._info_bar, self._message_label, text, message_type) @run_idle def show_spinner(self, show): diff --git a/app/ui/xml/dialogs.py b/app/ui/xml/dialogs.py index 46e23fd5..fa222342 100644 --- a/app/ui/xml/dialogs.py +++ b/app/ui/xml/dialogs.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2018-2023 Dmitriy Yefremov +# Copyright (c) 2018-2024 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 @@ -593,12 +593,6 @@ class UpdateDialog: def update_receive_button_state(self, model): self._receive_button.set_sensitive((any(r[4] for r in model))) - @run_idle - def show_info_message(self, text, message_type): - self._sat_update_info_bar.set_visible(True) - self._sat_update_info_bar.set_message_type(message_type) - self._info_bar_message_label.set_text(text) - def on_info_bar_close(self, bar=None, resp=None): self._sat_update_info_bar.set_visible(False)