Menu personalizado + Menu Rapido

This commit is contained in:
Unknown
2017-11-24 16:54:15 -03:00
parent 3f1baae10c
commit 5c90256a3d
14 changed files with 401 additions and 32 deletions
+113 -3
View File
@@ -15,6 +15,7 @@ from core import scrapertools
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
from platformcode import platformtools from platformcode import platformtools
from core import jsontools
THUMBNAILS = {'0': 'posters', '1': 'banners', '2': 'squares'} THUMBNAILS = {'0': 'posters', '1': 'banners', '2': 'squares'}
@@ -27,11 +28,16 @@ perfil = [['0xFF0B7B92', '0xFF89FDFB', '0xFFACD5D4'],
['0xFFA5DEE5', '0xFFE0F9B5', '0xFFFEFDCA'], ['0xFFA5DEE5', '0xFFE0F9B5', '0xFFFEFDCA'],
['0xFFF23557', '0xFF22B2DA', '0xFFF0D43A']] ['0xFFF23557', '0xFF22B2DA', '0xFFF0D43A']]
#color1, color2, color3 = ["white", "white", "white"]
color1, color2, color3 = perfil[__perfil__] color1, color2, color3 = perfil[__perfil__]
list_newest = [] list_newest = []
list_newest_tourl = []
channels_id_name = {} channels_id_name = {}
menu_cache_path = os.path.join(config.get_data_path(), "settings_channels", 'menu_cache_data.json')
menu_settings_path = os.path.join(config.get_data_path(), "settings_channels", 'menu_settings_data.json')
def mainlist(item): def mainlist(item):
logger.info() logger.info()
@@ -150,6 +156,64 @@ def get_channels_list():
return list_canales, any_active return list_canales, any_active
def set_cache(item):
logger.info()
item.mode = 'set_cache'
t = Thread(target=novedades, args=[item])
t.start()
#t.join()
def get_from_cache(item):
logger.info()
itemlist=[]
cache_node = jsontools.get_node_from_file('menu_cache_data.json', 'cached')
first=item.last
last = first+40
#if last >=len(cache_node[item.extra]):
# last = len(cache_node[item.extra])
for cached_item in cache_node[item.extra][first:last]:
new_item= Item()
new_item = new_item.fromurl(cached_item)
itemlist.append(new_item)
if item.mode == 'silent':
set_cache(item)
if last >= len(cache_node[item.extra]):
item.mode='finish'
itemlist = add_menu_items(item, itemlist)
else:
item.mode='get_cached'
item.last =last
itemlist = add_menu_items(item, itemlist)
return itemlist
def add_menu_items(item, itemlist):
logger.info()
menu_icon = get_thumb('menu.png')
menu = Item(channel="channelselector", action="getmainlist", viewmode="movie", thumbnail=menu_icon, title='Menu')
itemlist.insert(0, menu)
if item.mode != 'finish':
if item.mode == 'get_cached':
last=item.last
else:
last = len(itemlist)
refresh_icon = get_thumb('more.png')
refresh = item.clone(thumbnail=refresh_icon, mode='get_cached',title='Mas', last=last)
itemlist.insert(len(itemlist), refresh)
return itemlist
def set_menu_settings(item):
if os.path.exists(menu_settings_path):
menu_node = jsontools.get_node_from_file('menu_settings_data.json', 'menu')
else:
menu_node = {}
menu_node['categoria actual'] = item.extra
jsontools.update_node(menu_node, 'menu_settings_data.json', "menu")
def novedades(item): def novedades(item):
logger.info() logger.info()
@@ -159,6 +223,14 @@ def novedades(item):
list_newest = [] list_newest = []
start_time = time.time() start_time = time.time()
mode = item.mode
if mode == '':
mode = 'normal'
if mode=='get_cached':
if os.path.exists(menu_cache_path):
return get_from_cache(item)
multithread = config.get_setting("multithread", "news") multithread = config.get_setting("multithread", "news")
logger.info("multithread= " + str(multithread)) logger.info("multithread= " + str(multithread))
@@ -170,8 +242,22 @@ def novedades(item):
if config.set_setting("multithread", True, "news"): if config.set_setting("multithread", True, "news"):
multithread = True multithread = True
if mode == 'normal':
progreso = platformtools.dialog_progress(item.category, "Buscando canales...") progreso = platformtools.dialog_progress(item.category, "Buscando canales...")
list_canales, any_active = get_channels_list() list_canales, any_active = get_channels_list()
if mode=='silent' and any_active and len(list_canales[item.extra]) > 0:
set_menu_settings(item)
aux_list=[]
for canal in list_canales[item.extra]:
if len(aux_list)<2:
aux_list.append(canal)
list_canales[item.extra]=aux_list
if mode == 'set_cache':
list_canales[item.extra] = list_canales[item.extra][2:]
if any_active and len(list_canales[item.extra])>0: if any_active and len(list_canales[item.extra])>0:
import math import math
# fix float porque la division se hace mal en python 2.x # fix float porque la division se hace mal en python 2.x
@@ -191,10 +277,12 @@ def novedades(item):
t = Thread(target=get_newest, args=[channel_id, item.extra], name=channel_title) t = Thread(target=get_newest, args=[channel_id, item.extra], name=channel_title)
t.start() t.start()
threads.append(t) threads.append(t)
if mode == 'normal':
progreso.update(percentage, "", "Buscando en '%s'..." % channel_title) progreso.update(percentage, "", "Buscando en '%s'..." % channel_title)
# Modo single Thread # Modo single Thread
else: else:
if mode == 'normal':
logger.info("Obteniendo novedades de channel_id=" + channel_id) logger.info("Obteniendo novedades de channel_id=" + channel_id)
progreso.update(percentage, "", "Buscando en '%s'..." % channel_title) progreso.update(percentage, "", "Buscando en '%s'..." % channel_title)
get_newest(channel_id, item.extra) get_newest(channel_id, item.extra)
@@ -208,6 +296,7 @@ def novedades(item):
percentage = int(math.ceil(index * t)) percentage = int(math.ceil(index * t))
list_pendent_names = [a.getName() for a in pendent] list_pendent_names = [a.getName() for a in pendent]
if mode == 'normal':
mensaje = "Buscando en %s" % (", ".join(list_pendent_names)) mensaje = "Buscando en %s" % (", ".join(list_pendent_names))
progreso.update(percentage, "Finalizado en %d/%d canales..." % (len(threads) - len(pendent), len(threads)), progreso.update(percentage, "Finalizado en %d/%d canales..." % (len(threads) - len(pendent), len(threads)),
mensaje) mensaje)
@@ -219,7 +308,7 @@ def novedades(item):
time.sleep(0.5) time.sleep(0.5)
pendent = [a for a in threads if a.isAlive()] pendent = [a for a in threads if a.isAlive()]
if mode == 'normal':
mensaje = "Resultados obtenidos: %s | Tiempo: %2.f segundos" % (len(list_newest), time.time() - start_time) mensaje = "Resultados obtenidos: %s | Tiempo: %2.f segundos" % (len(list_newest), time.time() - start_time)
progreso.update(100, mensaje, " ", " ") progreso.update(100, mensaje, " ", " ")
logger.info(mensaje) logger.info(mensaje)
@@ -227,6 +316,9 @@ def novedades(item):
# logger.debug(start_time) # logger.debug(start_time)
result_mode = config.get_setting("result_mode", "news") result_mode = config.get_setting("result_mode", "news")
if mode != 'normal':
result_mode=0
if result_mode == 0: # Agrupados por contenido if result_mode == 0: # Agrupados por contenido
ret = group_by_content(list_newest) ret = group_by_content(list_newest)
elif result_mode == 1: # Agrupados por canales elif result_mode == 1: # Agrupados por canales
@@ -237,10 +329,16 @@ def novedades(item):
while time.time() - start_time < 2: while time.time() - start_time < 2:
# mostrar cuadro de progreso con el tiempo empleado durante almenos 2 segundos # mostrar cuadro de progreso con el tiempo empleado durante almenos 2 segundos
time.sleep(0.5) time.sleep(0.5)
if mode == 'normal':
progreso.close() progreso.close()
if mode == 'silent':
set_cache(item)
item.mode = 'set_cache'
ret = add_menu_items(item, ret)
if mode != 'set_cache':
return ret return ret
else: else:
if mode != 'set_cache':
no_channels = platformtools.dialog_ok('Novedades - %s'%item.extra, 'No se ha definido ningun canal para la ' no_channels = platformtools.dialog_ok('Novedades - %s'%item.extra, 'No se ha definido ningun canal para la '
'busqueda.','Utilice el menu contextual ' 'busqueda.','Utilice el menu contextual '
'para agregar al menos uno') 'para agregar al menos uno')
@@ -251,6 +349,7 @@ def get_newest(channel_id, categoria):
logger.info("channel_id=" + channel_id + ", categoria=" + categoria) logger.info("channel_id=" + channel_id + ", categoria=" + categoria)
global list_newest global list_newest
global list_newest_tourl
# Solicitamos las novedades de la categoria (item.extra) buscada en el canal channel # Solicitamos las novedades de la categoria (item.extra) buscada en el canal channel
# Si no existen novedades para esa categoria en el canal devuelve una lista vacia # Si no existen novedades para esa categoria en el canal devuelve una lista vacia
@@ -271,11 +370,22 @@ def get_newest(channel_id, categoria):
logger.info("running channel " + modulo.__name__ + " " + modulo.__file__) logger.info("running channel " + modulo.__name__ + " " + modulo.__file__)
list_result = modulo.newest(categoria) list_result = modulo.newest(categoria)
logger.info("canal= %s %d resultados" % (channel_id, len(list_result))) logger.info("canal= %s %d resultados" % (channel_id, len(list_result)))
exist=False
if os.path.exists(menu_cache_path):
cache_node = jsontools.get_node_from_file('menu_cache_data.json', 'cached')
exist=True
else:
cache_node = {}
#logger.debug('cache node: %s' % cache_node)
for item in list_result: for item in list_result:
# logger.info("item="+item.tostring()) # logger.info("item="+item.tostring())
item.channel = channel_id item.channel = channel_id
list_newest.append(item) list_newest.append(item)
list_newest_tourl.append(item.tourl())
cache_node[categoria] = list_newest_tourl
jsontools.update_node(cache_node, 'menu_cache_data.json', "cached")
except: except:
logger.error("No se pueden recuperar novedades de: " + channel_id) logger.error("No se pueden recuperar novedades de: " + channel_id)
@@ -43,7 +43,7 @@ def newest(categoria):
elif categoria == 'terror': elif categoria == 'terror':
item.url = HOST + '/genero/terror.html' item.url = HOST + '/genero/terror.html'
itemlist = peliculas(item) itemlist = peliculas(item)
if "Pagina" in itemlist[-1].title: if ">> Página siguiente" in itemlist[-1].title:
itemlist.pop() itemlist.pop()
except: except:
import sys import sys
+210
View File
@@ -0,0 +1,210 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
import os
from core.item import Item
from core import jsontools
from platformcode import config, logger
from platformcode import launcher
import xbmc, xbmcgui, xbmcplugin, xbmcaddon
media_path = os.path.join(config.get_runtime_path(), "resources/skins/Default/media/side_menu/")
menu_node = jsontools.get_node_from_file('menu_settings_data.json', 'menu')
category = menu_node['categoria actual']
ACTION_SHOW_FULLSCREEN = 36
ACTION_GESTURE_SWIPE_LEFT = 511
ACTION_SELECT_ITEM = 7
ACTION_PREVIOUS_MENU = 10
ACTION_MOVE_LEFT = 1
ACTION_MOVE_RIGHT = 2
ACTION_MOVE_DOWN = 4
ACTION_MOVE_UP = 3
def open_menu(item):
main = Main('side_menu.xml', config.get_runtime_path())
main.doModal()
del main
class Main(xbmcgui.WindowXMLDialog):
def __init__(self, *args, **kwargs):
self.items = []
def onInit(self):
self.setCoordinateResolution(2)
self.focus = -1
self.buttons = []
posx= 22
posy= 170
space = 30
selected = 'selected.png'
width = 216
height = 30
textcolor = "0xff000000"
shadow = "0xFFffff00"
offsetx = 30
label = 'Menú Clasico'
self.button_alfa = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14', alignment=0x00000000,
noFocusTexture='', focusTexture=media_path+selected,
textColor=textcolor, shadowColor=shadow, textOffsetX=offsetx,
textOffsetY=-3)
self.addControl(self.button_alfa)
self.buttons.append(self.button_alfa)
posy += space*2
label = 'Peliculas'
self.button_peliculas = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14',
alignment=0x00000000, noFocusTexture='',
focusTexture=media_path+selected, textColor=textcolor,
shadowColor=shadow, textOffsetX=offsetx, textOffsetY=-3)
self.addControl(self.button_peliculas)
self.buttons.append(self.button_peliculas)
posy += space
label = 'Series'
self.button_series = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14',
alignment=0x00000000, noFocusTexture='',
focusTexture=media_path+selected, textColor=textcolor,
shadowColor=shadow, textOffsetX=offsetx, textOffsetY=-3)
self.addControl(self.button_series)
self.buttons.append(self.button_series)
posy += space
label = 'Anime'
self.button_anime = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14', alignment=0x00000000,
noFocusTexture='', focusTexture=media_path+selected,
textColor=textcolor, shadowColor=shadow, textOffsetX=offsetx,
textOffsetY=-3)
self.addControl(self.button_anime)
self.buttons.append(self.button_anime)
posy += space
label = 'Infantiles'
self.button_infantil = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14',
alignment=0x00000000, noFocusTexture='',
focusTexture=media_path+selected, textColor=textcolor,
shadowColor=shadow, textOffsetX=offsetx, textOffsetY=-3)
self.addControl(self.button_infantil)
self.buttons.append(self.button_infantil)
posy += space
label = 'Documentales'
self.button_docu = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14',
alignment=0x00000000, noFocusTexture='',
focusTexture=media_path + selected, textColor=textcolor,
shadowColor=shadow, textOffsetX=offsetx, textOffsetY=-3)
self.addControl(self.button_docu)
self.buttons.append(self.button_docu)
posy += space
label = 'Terror'
self.button_terror = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14',
alignment=0x00000000, noFocusTexture='',
focusTexture=media_path+selected, textColor=textcolor,
shadowColor=shadow, textOffsetX=offsetx, textOffsetY=-3)
self.addControl(self.button_terror)
self.buttons.append(self.button_terror)
posy += space
label = 'Castellano'
self.button_cast = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14', alignment=0x00000000,
noFocusTexture='', focusTexture=media_path+selected,
textColor=textcolor, shadowColor=shadow, textOffsetX=offsetx,
textOffsetY=-3)
self.addControl(self.button_cast)
self.buttons.append(self.button_cast)
posy += space
label = 'Latino'
self.button_lat = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14', alignment=0x00000000,
noFocusTexture='', focusTexture=media_path+selected,
textColor=textcolor, shadowColor=shadow, textOffsetX=offsetx,
textOffsetY=-3)
self.addControl(self.button_lat)
self.buttons.append(self.button_lat)
posy += space
label = 'Torrents'
self.button_torrent = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14',
alignment=0x00000000, noFocusTexture='',
focusTexture=media_path+selected, textColor=textcolor,
shadowColor=shadow, textOffsetX=offsetx, textOffsetY=-3)
self.addControl(self.button_torrent)
self.buttons.append(self.button_torrent)
posy += space
label = 'Canales Activos'
self.button_config = xbmcgui.ControlButton(posx, posy, width, height, label, font='font14',
alignment=0x00000000, noFocusTexture='',
focusTexture=media_path+selected, textColor=textcolor,
shadowColor=shadow, textOffsetX=offsetx, textOffsetY=-3)
self.addControl(self.button_config)
self.buttons.append(self.button_config)
label=''
self.button_close = xbmcgui.ControlButton(260, 0, 1020, 725, label, noFocusTexture='', focusTexture='')
self.addControl(self.button_close)
def onClick(self, control):
new_item=''
control = self.getControl(control).getLabel()
if control == u'Menú Clasico':
new_item = Item(channel='', action='getmainlist', title='Menú Alfa')
elif control == 'Peliculas':
new_item = Item(channel='news', action="novedades", extra="peliculas", mode='silent')
elif control == 'Series':
new_item = Item(channel='news', action="novedades", extra="series", mode='silent')
elif control == 'Anime':
new_item = Item(channel='news', action="novedades", extra="anime", mode='silent')
elif control == 'Infantiles':
new_item = Item(channel='news', action="novedades", extra="infantiles", mode='silent')
elif control == 'Documentales':
new_item = Item(channel='news', action="novedades", extra="documentales", mode='silent')
elif control == 'Terror':
new_item = Item(channel='news', action="novedades", extra="terror", mode='silent')
elif control == 'Castellano':
new_item = Item(channel='news', action="novedades", extra="castellano", mode='silent')
elif control == 'Latino':
new_item = Item(channel='news', action="novedades", extra="latino", mode='silent')
elif control == 'Torrents':
new_item = Item(channel='news', action="novedades", extra="torrent", mode='silent')
elif control == 'Canales Activos':
new_item = Item(channel='news', action="setting_channel", extra=category, menu=True)
elif control == '':
self.close()
if new_item !='':
self.run_action(new_item)
def onAction(self, action):
if action == ACTION_PREVIOUS_MENU or action == ACTION_GESTURE_SWIPE_LEFT or action == 110 or action == 92:
self.close()
if action == ACTION_MOVE_RIGHT or action == ACTION_MOVE_DOWN:
if self.focus < len(self.buttons) - 1:
self.focus += 1
while True:
id_focus = str(self.buttons[self.focus].getId())
if xbmc.getCondVisibility('[Control.IsVisible(' + id_focus + ')]'):
self.setFocus(self.buttons[self.focus])
break
self.focus += 1
if self.focus == len(self.buttons):
break
if action == ACTION_MOVE_LEFT or action == ACTION_MOVE_UP:
if self.focus > 0:
self.focus -= 1
while True:
id_focus = str(self.buttons[self.focus].getId())
if xbmc.getCondVisibility('[Control.IsVisible(' + id_focus + ')]'):
self.setFocus(self.buttons[self.focus])
break
self.focus -= 1
if self.focus == len(self.buttons):
break
def run_action(self, item):
logger.info()
if item.menu != True:
self.close()
xbmc.executebuiltin("Container.update(%s)"%launcher.run(item))
+1 -1
View File
@@ -217,7 +217,7 @@ def newest(categoria):
return [] return []
itemlist = scraper(item) itemlist = scraper(item)
if itemlist[-1].title == "» Siguiente »": if itemlist[-1].title == "[COLOR crimson]Siguiente >>[/COLOR]":
itemlist.pop() itemlist.pop()
# Se captura la excepción, para no interrumpir al canal novedades si un canal falla # Se captura la excepción, para no interrumpir al canal novedades si un canal falla
+1 -1
View File
@@ -104,7 +104,7 @@ def get_node_from_file(name_file, node, path=None):
if node in dict_data: if node in dict_data:
dict_node = dict_data[node] dict_node = dict_data[node]
logger.debug("dict_node: %s" % dict_node) #logger.debug("dict_node: %s" % dict_node)
return dict_node return dict_node
+4 -1
View File
@@ -36,9 +36,12 @@ def run(item=None):
item = Item().fromurl(sys.argv[2]) item = Item().fromurl(sys.argv[2])
# If no item, this is mainlist # If no item, this is mainlist
else:
if config.get_setting("custom_menu") == True:
category = config.get_setting("category").lower()
item = Item(channel="news", action="novedades", extra=category, mode = 'silent')
else: else:
item = Item(channel="channelselector", action="getmainlist", viewmode="movie") item = Item(channel="channelselector", action="getmainlist", viewmode="movie")
logger.info(item.tostring()) logger.info(item.tostring())
try: try:
@@ -95,6 +95,7 @@ def render_items(itemlist, parent_item):
""" """
# Si el itemlist no es un list salimos # Si el itemlist no es un list salimos
if not type(itemlist) == list: if not type(itemlist) == list:
return return
# Si no hay ningun item, mostramos un aviso # Si no hay ningun item, mostramos un aviso
@@ -103,7 +104,6 @@ def render_items(itemlist, parent_item):
# Recorremos el itemlist # Recorremos el itemlist
for item in itemlist: for item in itemlist:
# logger.debug(item)
# Si el item no contiene categoria, le ponemos la del item padre # Si el item no contiene categoria, le ponemos la del item padre
if item.category == "": if item.category == "":
item.category = parent_item.category item.category = parent_item.category
@@ -181,7 +181,6 @@ def render_items(itemlist, parent_item):
if config.get_setting("forceview"): if config.get_setting("forceview"):
# ...forzamos segun el viewcontent # ...forzamos segun el viewcontent
xbmcplugin.setContent(int(sys.argv[1]), parent_item.viewcontent) xbmcplugin.setContent(int(sys.argv[1]), parent_item.viewcontent)
# logger.debug(parent_item)
elif parent_item.channel not in ["channelselector", ""]: elif parent_item.channel not in ["channelselector", ""]:
# ... o segun el canal # ... o segun el canal
xbmcplugin.setContent(int(sys.argv[1]), "movies") xbmcplugin.setContent(int(sys.argv[1]), "movies")
@@ -199,9 +198,12 @@ def render_items(itemlist, parent_item):
if config.get_setting("forceview"): if config.get_setting("forceview"):
viewmode_id = get_viewmode_id(parent_item) viewmode_id = get_viewmode_id(parent_item)
xbmc.executebuiltin("Container.SetViewMode(%s)" % viewmode_id) xbmc.executebuiltin("Container.SetViewMode(%s)" % viewmode_id)
if parent_item.mode in ['silent', 'get_cached', 'set_cache','finish']:
xbmc.executebuiltin("Container.SetViewMode(500)")
def get_viewmode_id(parent_item): def get_viewmode_id(parent_item):
# viewmode_json habria q guardarlo en un archivo y crear un metodo para q el user fije sus preferencias en: # viewmode_json habria q guardarlo en un archivo y crear un metodo para q el user fije sus preferencias en:
# user_files, user_movies, user_tvshows, user_season y user_episodes. # user_files, user_movies, user_tvshows, user_season y user_episodes.
viewmode_json = {'skin.confluence': {'default_files': 50, viewmode_json = {'skin.confluence': {'default_files': 50,
@@ -393,7 +395,6 @@ def set_context_commands(item, parent_item):
(sys.argv[0], item.clone(channel="favorites", action="addFavourite", (sys.argv[0], item.clone(channel="favorites", action="addFavourite",
from_channel=item.channel, from_channel=item.channel,
from_action=item.action).tourl()))) from_action=item.action).tourl())))
#Buscar en otros canales #Buscar en otros canales
if item.contentType in ['movie','tvshow']and item.channel != 'search': if item.contentType in ['movie','tvshow']and item.channel != 'search':
# Buscar en otros canales # Buscar en otros canales
@@ -468,7 +469,19 @@ def set_context_commands(item, parent_item):
context_commands.append(("Super Favourites Menu", context_commands.append(("Super Favourites Menu",
"XBMC.RunScript(special://home/addons/plugin.program.super.favourites/LaunchSFMenu.py)")) "XBMC.RunScript(special://home/addons/plugin.program.super.favourites/LaunchSFMenu.py)"))
return sorted(context_commands, key=lambda comand: comand[0])
context_commands = sorted(context_commands, key=lambda comand: comand[0])
# Menu Rapido
context_commands.insert(0,("[COLOR 0xffccff00]<Menú Rápido>[/COLOR]",
"XBMC.Container.Update (%s?%s)" % (sys.argv[0], Item(channel='side_menu',
action="open_menu",
parent=parent_item.tourl()).tourl(
))))
return context_commands
def is_playing(): def is_playing():
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

+6
View File
@@ -37,6 +37,12 @@
<setting id="folder_movies" type="text" label="Nombre de carpeta para 'Peliculas'" default="CINE"/> <setting id="folder_movies" type="text" label="Nombre de carpeta para 'Peliculas'" default="CINE"/>
<setting id="videolibrary_kodi_flag" type="number" label="" default="0" visible="false"/> <setting id="videolibrary_kodi_flag" type="number" label="" default="0" visible="false"/>
<setting id="videolibrary_kodi" type="bool" label="Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" enable="lt(-1,2)+eq(0,false)" default="false"/> <setting id="videolibrary_kodi" type="bool" label="Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" enable="lt(-1,2)+eq(0,false)" default="false"/>
</category>
<category label="Menu Inicial">
<setting id="custom_menu" type="bool" label="Menu Personal" default="false"/>
<setting id="category" type="labelenum" label="Mostrar en inicio"
values="Peliculas|Series|Anime|Infantiles|Documentales|Terror|Castellano|Latino|Torrents"
default="Peliculas" visible="eq(-1,True)"/>
</category> </category>
<category label="Opciones Visuales"> <category label="Opciones Visuales">
<setting id="icon_set" type="labelenum" label="Set de iconos" values="default|dark" default="default"/> <setting id="icon_set" type="labelenum" label="Set de iconos" values="default|dark" default="default"/>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<window>
<coordinates>
<left>0</left>
<top>0</top>
</coordinates>
<zorder>1</zorder>
<controls>
<control type="image">
<animation type="WindowOpen" reversible="false">
<effect type="slide" start="-200" end="0" time="80"/>
</animation>
<left>0</left>
<top>0</top>
<width>260</width>
<height>725</height>
<texture border="2">side_menu/bg.png</texture>
</control>
<control type="image">
<left>25</left>
<top>30</top>
<width>200</width>
<height>70</height>
<texture border="2">side_menu/logo.png</texture>
</control>
</controls>
</window>
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B