# -*- coding: utf-8 -*- from builtins import map import sys, xbmc, xbmcaddon, xbmcgui, base64, json, os, re from threading import Timer from platformcode import config, logger, platformtools, launcher from core.item import Item import channelselector addon_icon = os.path.join( config.__settings__.getAddonInfo( "path" ),'resources', 'media', 'logo.png' ) background = 'FF232323' text = 'FFFFFFFF' select = 'FF0082C2' if config.get_setting('icon_set') == 'dark': background = 'FFDCDCDC' text = 'FF232323' select = '880082C2' class KeyListener(xbmcgui.WindowXMLDialog): TIMEOUT = 10 def __new__(cls): gui_api = tuple(map(int, xbmcaddon.Addon('xbmc.gui').getAddonInfo('version').split('.'))) if gui_api >= (5, 11, 0): filenname = "DialogNotification.xml" else: filenname = "DialogKaiToast.xml" return super(KeyListener, cls).__new__(cls, filenname, "") def __init__(self): self.key = None def onInit(self): try: logger.debug('ICONA',addon_icon) self.getControl(400).setImage(addon_icon) self.getControl(401).addLabel(config.get_localized_string(70698)) self.getControl(402).addLabel(config.get_localized_string(70699) % self.TIMEOUT) except AttributeError: self.getControl(400).setImage(addon_icon) self.getControl(401).setLabel(config.get_localized_string(70698)) self.getControl(402).setLabel(config.get_localized_string(70699) % self.TIMEOUT) def onAction(self, action): code = action.getButtonCode() if code == 0: self.key = None else: self.key = str(code) self.close() @staticmethod def record_key(): dialog = KeyListener() timeout = Timer(KeyListener.TIMEOUT, dialog.close) timeout.start() dialog.doModal() timeout.cancel() key = dialog.key del dialog return key def set_key(): saved_key = config.get_setting("shortcut_key") new_key = KeyListener().record_key() if new_key and saved_key != new_key: from core import filetools from platformcode import platformtools import xbmc file_xml = "special://profile/keymaps/kod.xml" data = '' % new_key + 'runplugin(plugin://plugin.video.kod/?ew0KICAgICJhY3Rpb24iOiAia2V5bWFwIiwNCiAgICAib3BlbiI6IHRydWUNCn0=)' filetools.write(xbmc.translatePath(file_xml), data) # platformtools.dialog_notification(config.get_localized_string(70700),config.get_localized_string(70702),4) config.set_setting("shortcut_key", new_key) return def delete_key(): from core import filetools from platformcode import platformtools import xbmc filetools.remove(xbmc.translatePath( "special://profile/keymaps/kod.xml")) # platformtools.dialog_notification(config.get_localized_string(70701),config.get_localized_string(70702),4) config.set_setting("shortcut_key", '') xbmc.executebuiltin('Action(reloadkeymaps)') LEFT = 1 RIGHT = 2 UP = 3 DOWN = 4 EXIT = 10 BACKSPACE = 92 RIGHTCLICK = 101 class Main(xbmcgui.WindowXMLDialog): def __init__(self, *args, **kwargs): self.items = [] def onInit(self): self.MENU = self.getControl(1) self.SUBMENU = self.getControl(2) #### Compatibility with Kodi 18 #### if config.get_platform(True)['num_version'] < 18: self.setCoordinateResolution(2) itemlist = self.menulist(channelselector.getmainlist()) self.MENU.addItems(itemlist) self.setFocusId(1) self.submenu() def menulist(self, menu): itemlist = [] for menuentry in menu: # if not menuentry.channel: menuentry.channel = 'news' item = xbmcgui.ListItem(menuentry.title) item.setProperty('background', background) item.setProperty('text', text) item.setProperty('select', select) item.setProperty('channel', menuentry.channel) item.setProperty('focus', '0') item.setProperty('thumbnail', menuentry.thumbnail) if menuentry.channel in ['news', 'channelselector', 'search', 'videolibrary', 'favorites']: item.setProperty('sub', 'true') item.setProperty('run', menuentry.tourl()) itemlist.append(item) return itemlist def onClick(self, control_id): if control_id in [1, 2]: action = self.getControl(control_id).getSelectedItem().getProperty('run') self.close() if self.getControl(control_id).getSelectedItem().getProperty('folder') == 'False': xbmc.executebuiltin('RunPlugin("plugin://plugin.video.kod/?' + action + '")') else: xbmc.executebuiltin('ActivateWindow(10025, "plugin://plugin.video.kod/?' + action + '")') elif control_id in [101]: logger.debug('DOWN') self.setFocusId(2) elif control_id in [102]: logger.debug('UP') self.setFocusId(1) def onAction(self, action): if action.getButtonCode() == config.get_setting('shortcut_key'): self.close() action = action.getId() if action in [EXIT, BACKSPACE, RIGHTCLICK]: self.close() focus = self.getFocusId() if action in [LEFT, RIGHT]: if focus in [1]: self.submenu() else: itfocus = str(self.SUBMENU.getSelectedPosition()) self.MENU.getSelectedItem().setProperty('focus', itfocus) def submenu(self): channel_name = self.MENU.getSelectedItem().getProperty('channel') focus = int(self.MENU.getSelectedItem().getProperty('focus')) if channel_name == 'channelselector': import channelselector itemlist = self.menulist(channelselector.getchanneltypes()) elif channel_name in ['news', 'channelselector', 'search', 'videolibrary', 'favorites']: channel = __import__('specials.%s' % channel_name, fromlist=["specials.%s" % channel_name]) itemlist = self.menulist(channel.mainlist(Item().fromurl(self.MENU.getSelectedItem().getProperty('run')))) self.SUBMENU.reset() self.SUBMENU.addItems(itemlist) self.SUBMENU.selectItem(focus) def context(self): focus = self.getFocusId() item_url = self.MENU.getSelectedItem().getProperty('run') item = Item().fromurl(item_url) logger.debug(item) commands = platformtools.set_context_commands(item, item_url, Item()) context = [c[0] for c in commands] context_commands = [c[1].replace('Container.Refresh', 'RunPlugin').replace('Container.Update', 'RunPlugin') for c in commands] index = xbmcgui.Dialog().contextmenu(context) if index > 0: xbmc.executebuiltin(context_commands[index]) def open_shortcut_menu(): logger.debug('WID',xbmcgui.getCurrentWindowDialogId()) if xbmcgui.getCurrentWindowDialogId() == 9999: main = Main('ShortCutMenu.xml', config.get_runtime_path()) main.doModal()