diff --git a/app/ui/iptv.py b/app/ui/iptv.py index 9ee5140e..5923fa41 100644 --- a/app/ui/iptv.py +++ b/app/ui/iptv.py @@ -7,14 +7,15 @@ from urllib.request import Request, urlopen from gi.repository import GLib -from app.commons import run_idle, run_task, log +from app.commons import run_idle, run_task from app.eparser.ecommons import BqServiceType, Service from app.eparser.iptv import NEUTRINO_FAV_ID_FORMAT, StreamType, ENIGMA2_FAV_ID_FORMAT, get_fav_id, MARKER_FORMAT from app.settings import SettingsType from app.tools.yt import YouTube, PlayListParser from .dialogs import Action, show_dialog, DialogType, get_dialogs_string, get_message from .main_helper import get_base_model, get_iptv_url, on_popup_menu -from .uicommons import Gtk, Gdk, TEXT_DOMAIN, UI_RESOURCES_PATH, IPTV_ICON, Column, IS_GNOME_SESSION, KeyboardKey +from .uicommons import Gtk, Gdk, TEXT_DOMAIN, UI_RESOURCES_PATH, IPTV_ICON, Column, IS_GNOME_SESSION, KeyboardKey, \ + get_yt_icon _DIGIT_ENTRY_NAME = "digit-entry" _ENIGMA2_REFERENCE = "{}:0:{}:{:X}:{:X}:{:X}:{:X}:0:0:0" diff --git a/app/ui/transmitter.py b/app/ui/transmitter.py index 8367526a..0e8e5ea5 100644 --- a/app/ui/transmitter.py +++ b/app/ui/transmitter.py @@ -4,7 +4,7 @@ from gi.repository import GLib from app.connections import HttpRequestType from app.tools.yt import YouTube -from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN +from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, get_yt_icon class LinksTransmitter: @@ -82,7 +82,7 @@ class LinksTransmitter: yield True if yt_id: - self._url_entry.set_icon_from_stock(Gtk.EntryIconPosition.SECONDARY, Gtk.STOCK_INFO) + self._url_entry.set_icon_from_pixbuf(Gtk.EntryIconPosition.SECONDARY, get_yt_icon("youtube", 32)) links, title = YouTube.get_yt_link(yt_id) yield True if links: diff --git a/app/ui/uicommons.py b/app/ui/uicommons.py index 43d28d46..5ace90fc 100644 --- a/app/ui/uicommons.py +++ b/app/ui/uicommons.py @@ -2,10 +2,12 @@ import os import sys from enum import Enum, IntEnum from app.settings import Settings, SettingsException +from functools import lru_cache import gi -gi.require_version('Gtk', '3.0') +gi.require_version("Gtk", "3.0") +gi.require_version("Gdk", "3.0") from gi.repository import Gtk, Gdk IS_DARWIN = sys.platform == "darwin" @@ -55,6 +57,24 @@ EPG_ICON = theme.load_icon("gtk-index", 16, 0) if theme.lookup_icon("gtk-index", DEFAULT_ICON = theme.load_icon("emblem-default", 16, 0) if theme.lookup_icon("emblem-default", 16, 0) else None +@lru_cache(maxsize=1) +def get_yt_icon(icon_name, size=24): + """ Getting YouTube icon. If the icon is not found in the icon themes, the "Info" icon is returned by default! """ + default_theme = Gtk.IconTheme.get_default() + if default_theme.has_icon(icon_name): + return default_theme.load_icon(icon_name, size, 0) + + n_theme = Gtk.IconTheme.new() + import glob + + for theme_name in map(os.path.basename, filter(os.path.isdir, glob.glob("/usr/share/icons/*"))): + theme.set_custom_theme(theme_name) + if n_theme.has_icon(icon_name): + return n_theme.load_icon(icon_name, size, 0) + + return default_theme.load_icon("info", size, 0) + + class KeyboardKey(Enum): """ The raw(hardware) codes of the keyboard keys. """ F = 3 if IS_DARWIN else 41