- Nuovo InfoPlus

- Piccole Migliorie
This commit is contained in:
Alhaziel01
2021-06-16 18:42:31 +02:00
parent 3d61f5dc54
commit e6c09ab8bb
113 changed files with 1458 additions and 900 deletions
-1
View File
@@ -273,7 +273,6 @@ def start(itemlist, item):
if autoplay_elem == autoplay_list[-1]: if autoplay_elem == autoplay_list[-1]:
platformtools.dialog_notification('AutoPlay', config.get_localized_string(60072) % name) platformtools.dialog_notification('AutoPlay', config.get_localized_string(60072) % name)
itemlist = [s['videoitem'] for s in autoplay_list]
else: else:
platformtools.dialog_notification(config.get_localized_string(60074), config.get_localized_string(60075)) platformtools.dialog_notification(config.get_localized_string(60074), config.get_localized_string(60075))
+15 -8
View File
@@ -147,8 +147,8 @@ def cache_response(fn):
# error getting data # error getting data
except Exception as ex: except Exception as ex:
message = "An exception of type %s occured. Arguments:\n%s" % (type(ex).__name__, repr(ex.args)) message = "An exception of type {} occured. Arguments:\n{}".format(type(ex).__name__, repr(ex.args))
logger.error("error in: %s" % message) logger.error("error in:", message)
return result return result
@@ -175,10 +175,10 @@ def set_infoLabels(source, seekTmdb=True, search_language=def_lang, forced=False
start_time = time.time() start_time = time.time()
if type(source) == list: if type(source) == list:
ret = set_infoLabels_itemlist(source, seekTmdb, search_language) ret = set_infoLabels_itemlist(source, seekTmdb, search_language)
logger.debug("The data of %i links were obtained in %f seconds" % (len(source), time.time() - start_time)) logger.debug("The data of {} links were obtained in {} seconds".format(len(source), time.time() - start_time))
else: else:
ret = set_infoLabels_item(source, seekTmdb, search_language) ret = set_infoLabels_item(source, seekTmdb, search_language)
logger.debug("The data were obtained in %f seconds" % (time.time() - start_time)) logger.debug("The data were obtained in {} seconds".format(time.time() - start_time))
return ret return ret
@@ -279,7 +279,7 @@ def set_infoLabels_item(item, seekTmdb=True, search_language=def_lang):
try: try:
ep = int(item.infoLabels['episode']) ep = int(item.infoLabels['episode'])
except ValueError: except ValueError:
logger.debug("The episode number (%s) is not valid" % repr(item.infoLabels['episode'])) logger.debug("The episode number ({}) is not valid".format(repr(item.infoLabels['episode'])))
return -1 * len(item.infoLabels) return -1 * len(item.infoLabels)
# We have valid season number and episode number... # We have valid season number and episode number...
@@ -1524,7 +1524,7 @@ class Tmdb(object):
seasons = [] seasons = []
if results and 'Error' not in results: if results and 'Error' not in results:
for season in results: for season in results:
url = '{host}/tv/{id}/season/{season}?api_key={api}&language={lang}'.format(host=host, id=self.search_id, season=season['season_number'], api=api, lang=self.search_language) url = '{}/tv/{}/season/{}?api_key={}&language={}'.format(host, self.search_id, season['season_number'], api, self.search_language)
try: start_from = requests.get(url).json()['episodes'][0]['episode_number'] try: start_from = requests.get(url).json()['episodes'][0]['episode_number']
except: start_from = 1 except: start_from = 1
seasons.append({'season_number':season['season_number'], 'episode_count':season['episode_count'], 'start_from':start_from}) seasons.append({'season_number':season['season_number'], 'episode_count':season['episode_count'], 'start_from':start_from})
@@ -1567,7 +1567,7 @@ class Tmdb(object):
for i in self.result['videos']: for i in self.result['videos']:
if i['site'] == "YouTube": if i['site'] == "YouTube":
ret.append({'name': i['name'], ret.append({'name': i['name'],
'url': "https://www.youtube.com/watch?v=%s" % i['key'], 'url': "plugin://plugin.video.youtube/play/?video_id={}".format(i['key']),
'size': str(i['size']), 'size': str(i['size']),
'type': i['type'], 'type': i['type'],
'language': i['iso_639_1']}) 'language': i['iso_639_1']})
@@ -1592,8 +1592,10 @@ class Tmdb(object):
l_country = [i.strip() for i in ret_infoLabels['country'].split(',') if ret_infoLabels['country']] l_country = [i.strip() for i in ret_infoLabels['country'].split(',') if ret_infoLabels['country']]
l_director = [i.strip() for i in ret_infoLabels['director'].split(',') if ret_infoLabels['director']] l_director = [i.strip() for i in ret_infoLabels['director'].split(',') if ret_infoLabels['director']]
l_director_image = ret_infoLabels.get('director_image', []) l_director_image = ret_infoLabels.get('director_image', [])
l_director_id = ret_infoLabels.get('director_id', [])
l_writer = [i.strip() for i in ret_infoLabels['writer'].split(',') if ret_infoLabels['writer']] l_writer = [i.strip() for i in ret_infoLabels['writer'].split(',') if ret_infoLabels['writer']]
l_writer_image = ret_infoLabels.get('writer_image', []) l_writer_image = ret_infoLabels.get('writer_image', [])
l_writer_id = ret_infoLabels.get('writer_id', [])
l_castandrole = ret_infoLabels.get('castandrole', []) l_castandrole = ret_infoLabels.get('castandrole', [])
if not origen: if not origen:
@@ -1699,7 +1701,7 @@ class Tmdb(object):
elif k == 'credits_cast' or k == 'season_cast' or k == 'episode_guest_stars': elif k == 'credits_cast' or k == 'season_cast' or k == 'episode_guest_stars':
dic_aux = dict((name, [character, thumb, order, id]) for (name, character, thumb, order, id) in l_castandrole) dic_aux = dict((name, [character, thumb, order, id]) for (name, character, thumb, order, id) in l_castandrole)
l_castandrole.extend([(p['name'], p.get('character', '') or p.get('character_name', ''), 'https://image.tmdb.org/t/p/original' + p.get('profile_path', '') if p.get('profile_path', '') else '', p.get('order'), p.get('credit_id')) \ l_castandrole.extend([(p['name'], p.get('character', '') or p.get('character_name', ''), 'https://image.tmdb.org/t/p/original' + p.get('profile_path', '') if p.get('profile_path', '') else '', p.get('order'), p.get('id')) \
for p in v if 'name' in p and p['name'] not in list(dic_aux.keys())]) for p in v if 'name' in p and p['name'] not in list(dic_aux.keys())])
elif k == 'videos': elif k == 'videos':
@@ -1739,12 +1741,15 @@ class Tmdb(object):
elif k == 'credits_crew' or k == 'episode_crew' or k == 'season_crew': elif k == 'credits_crew' or k == 'episode_crew' or k == 'season_crew':
for crew in v: for crew in v:
if crew['job'].lower() == 'director': if crew['job'].lower() == 'director':
# from core.support import dbg;dbg()
l_director = list(set(l_director + [crew['name']])) l_director = list(set(l_director + [crew['name']]))
l_director_image += ['https://image.tmdb.org/t/p/original' + crew['profile_path'] if crew['profile_path'] else ''] l_director_image += ['https://image.tmdb.org/t/p/original' + crew['profile_path'] if crew['profile_path'] else '']
l_director_id += [crew['id']]
elif crew['job'].lower() in ('screenplay', 'writer'): elif crew['job'].lower() in ('screenplay', 'writer'):
l_writer = list(set(l_writer + [crew['name']])) l_writer = list(set(l_writer + [crew['name']]))
l_writer_image += ['https://image.tmdb.org/t/p/original' + crew['profile_path'] if crew['profile_path'] else ''] l_writer_image += ['https://image.tmdb.org/t/p/original' + crew['profile_path'] if crew['profile_path'] else '']
l_writer_id += [crew['id']]
elif k == 'created_by': elif k == 'created_by':
for crew in v: for crew in v:
@@ -1766,9 +1771,11 @@ class Tmdb(object):
if l_director: if l_director:
ret_infoLabels['director'] = ', '.join(l_director) ret_infoLabels['director'] = ', '.join(l_director)
ret_infoLabels['director_image'] = l_director_image ret_infoLabels['director_image'] = l_director_image
ret_infoLabels['director_id'] = l_director_id
if l_writer: if l_writer:
ret_infoLabels['writer'] = ', '.join(l_writer) ret_infoLabels['writer'] = ', '.join(l_writer)
ret_infoLabels['writer_image'] = l_writer_image ret_infoLabels['writer_image'] = l_writer_image
ret_infoLabels['writer_id'] = l_writer_id
return ret_infoLabels return ret_infoLabels
+1
View File
@@ -0,0 +1 @@
# -*- coding: utf-8 -*-
+340 -508
View File
@@ -2,13 +2,17 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
# infoplus window with item information # infoplus window with item information
# ------------------------------------------------------------ # ------------------------------------------------------------
from typing import List
import xbmc, xbmcgui, sys, requests, re import xbmc, xbmcgui, sys, requests, re
from core import support, tmdb, filetools, channeltools, servertools from core import httptools, support, tmdb, filetools, channeltools, servertools, jsontools
from core.item import Item from core.item import Item
from platformcode import config, platformtools from platformcode import config, platformtools, logger, xbmc_videolibrary
from platformcode.logger import log from platformcode.logger import log
from core.scrapertools import decodeHtmlentities, htmlclean from core.scrapertools import decodeHtmlentities, htmlclean
from core.support import typo, dbg
PY3 = False PY3 = False
if sys.version_info[0] >= 3: PY3 = True if sys.version_info[0] >= 3: PY3 = True
if PY3: from concurrent import futures if PY3: from concurrent import futures
@@ -19,23 +23,16 @@ SearchWindows = []
api = 'k_0tdb8a8y' api = 'k_0tdb8a8y'
# Control ID # Control ID
FANART = 30000 LIST = 100
NUMBER = 30001 CAST = 101
TITLE = 30002 RECOMANDED = 102
TAGLINE = 30003 TRAILERS = 103
PLOT = 30004 FANARTS = 104
RATING_ICON = 30005
RATING = 30006
TRAILER = 30007 SEARCH = 200
SEARCH = 30008 BACK = 201
NEXT = 30009 CLOSE = 202
PREVIOUS = 30010
LOADING = 30011
COMMANDS = 30012
IMAGES = 30013
RECOMANDED = TRAILERS = 30500
ACTORS = 30501
CAST = 30502
# Actions # Actions
LEFT = 1 LEFT = 1
@@ -46,527 +43,362 @@ EXIT = 10
BACKSPACE = 92 BACKSPACE = 92
def start(item):
xbmc.executebuiltin('Dialog.Close(all)')
InfoPlus('InfoPlus.xml', config.get_runtime_path(), item=item)
def Main(item): class InfoPlus(xbmcgui.WindowXML):
if type(item) == Item:
item.channel = item.from_channel
global ITEM
ITEM = item
Info = xbmcgui.ListItem(item.infoLabels['title'])
for key, value in item.infoLabels.items():
Info.setProperty(key, str(value))
else:
Info = item
main = MainWindow('InfoPlus.xml', config.get_runtime_path())
add({'class':main, 'info':Info, 'id':RECOMANDED, RECOMANDED:0, ACTORS:0})
modal()
class MainWindow(xbmcgui.WindowXMLDialog):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.item = kwargs.get('item')
self.info = self.item.infoLabels
self.type = 'movie' if self.info.get('mediatype') == 'movie' else 'tv'
self.items = [] self.items = []
self.cast = [] self.cast = []
self.actors = [] self.actors = []
self.ids = {} self.ids = {}
self.tmdb = [] self.tmdb = []
self.recomanded = []
self.trailers = []
self.images = []
self.fanarts = []
if not self.item.focus: self.item.focus = {}
platformtools.dialog_busy(True)
if self.item:
# Find Video Info
tmdb.set_infoLabels_item(self.item)
self.info = self.item.infoLabels
title = typo(self.info.get('title'), 'bold')
tagline = self.info.get('tagline')
if tagline: title += '\n' + typo(tagline, 'italic')
# Set Listitem
self.listitem = xbmcgui.ListItem(title)
# Set Image
if self.info['mediatype'] == 'episode':
self.listitem.setArt({'poster':self.info['thumbnail'], 'fanart':self.info['poster_path']})
else:
self.listitem.setArt({'poster':self.item.thumbnail, 'fanart':self.item.fanart})
# Set Rating
self.listitem.setProperty('rating',str(int(self.info.get('rating',10) * 10)))
rating = self.info.get('rating', 'N/A')
color = 'FFFFFFFF' if rating == 'N/A' else 'FFDB2360' if rating < 4 else 'FFD2D531' if rating < 7 else 'FF21D07A'
self.listitem.setProperty('color',color)
# Set infoLabels
platformtools.set_infolabels(self.listitem, self.item)
# Add Cast Info
for cast in self.info.get('castandrole',[]):
castitem = xbmcgui.ListItem(cast[0], cast[1])
castitem.setArt({'poster':cast[2]})
castitem.setProperties({'order':str(cast[3]), 'id':cast[4]})
self.cast.append(castitem)
self.cast.sort(key=lambda c: c.getProperty('order'))
directors = self.info.get('director')
if directors:
for i, director in enumerate(directors.split(',')):
directoritem = xbmcgui.ListItem(director, 'Regista')
directoritem.setArt({'poster':self.info.get('director_image')[i]})
directoritem .setProperty('id', str(self.info.get('director_id')[i]))
self.cast.insert(i, directoritem)
# Add Recomandations
self.get_recomendations()
# Add Trailers
self.get_trailers()
# Add Fanart
self.get_fanarts()
platformtools.dialog_busy(False)
self.doModal()
def onInit(self): def onInit(self):
#### Compatibility with Kodi 18 #### self.getControl(LIST).addItem(self.listitem)
if config.get_platform(True)['num_version'] < 18:
self.setCoordinateResolution(2) self.getControl(CAST).addItems(self.cast)
if Info.getProperty('id'):self.items = get_movies(Info) if self.item.cast: self.getControl(CAST).selectItem(self.item.cast)
else: self.items = get_recomendations(Info)
self.cast, self.actors = get_cast(Info) self.getControl(RECOMANDED).addItems(self.recomanded)
self.getControl(LOADING).setVisible(False) if self.item.recomanded: self.getControl(RECOMANDED).selectItem(self.item.recomanded)
self.getControl(RECOMANDED).addItems(self.items)
self.getControl(FANART).setImage(Info.getProperty('fanart')) self.getControl(TRAILERS).addItems(self.trailers)
self.getControl(ACTORS).addItems(self.actors) self.getControl(FANARTS).addItems(self.fanarts)
if self.cast:
self.getControl(CAST).setVisible(True) # Set Focus
self.getControl(CAST).addItems(self.cast) if self.item.focus:
else: for k, v in self.item.focus.items():
self.getControl(CAST).setVisible(False) self.getControl(k).selectItem(v)
if Info.getProperty('rating'): rating = str(Info.getProperty('rating')) xbmc.sleep(200)
else: rating = 'N/A' self.setFocusId(self.item.setFocus)
self.getControl(RATING).setText(rating) else: self.setFocusId(LIST)
getFocus(self)
def onClick(self, control_id):
setFocus(self)
title = self.getControl(RECOMANDED).getSelectedItem().getProperty('title')
mode = self.getControl(RECOMANDED).getSelectedItem().getProperty('mediatype')
if control_id in [SEARCH]:
self.close()
if self.getControl(RECOMANDED).getSelectedPosition() > 0:
Search(ITEM.clone(action='search', search_text=title))
else:
Search(ITEM.clone(channel='search', action='new_search', search_text=title, mode=mode))
elif control_id in [TRAILER]:
info = self.getControl(RECOMANDED).getSelectedItem()
self.close()
Trailer(info)
elif control_id in [IMAGES]:
info = self.getControl(RECOMANDED).getSelectedItem()
images = tmdb.Tmdb(id_Tmdb=info.getProperty('tmdb_id'), search_type='movie' if mode == 'movie' else 'tv').result.get("images", {})
for key, value in list(images.items()):
if not value: images.pop(key)
ImagesWindow(tmdb = images).doModal()
elif control_id in [ACTORS, CAST]:
self.close()
Main(self.getControl(self.getFocusId()).getSelectedItem())
elif control_id in [RECOMANDED] and self.getControl(RECOMANDED).getSelectedPosition() > 0:
self.close()
Main(self.getControl(RECOMANDED).getSelectedItem())
def onAction(self, action): def onAction(self, action):
if self.getFocusId() in [ACTORS, RECOMANDED]:
self.ids[self.getFocusId()] = self.getControl(self.getFocusId()).getSelectedPosition()
if self.getFocusId() in [ACTORS, CAST] and action not in [BACKSPACE, EXIT]:
actors_more_info(self.getControl(self.getFocusId()).getSelectedItem())
if self.getFocusId() in [RECOMANDED]:
fanart = self.getControl(self.getFocusId()).getSelectedItem().getProperty('fanart')
rating = self.getControl(self.getFocusId()).getSelectedItem().getProperty('rating')
if not rating: rating = 'N/A'
self.getControl(FANART).setImage(fanart)
self.getControl(RATING).setText(rating)
cast, actors = get_cast(self.getControl(self.getFocusId()).getSelectedItem())
self.getControl(ACTORS).reset()
self.getControl(ACTORS).addItems(actors)
self.getControl(CAST).reset()
self.getControl(CAST).addItems(cast)
action = action.getId() action = action.getId()
if action in [BACKSPACE]: focus = self.getFocusId()
self.close() if action in [EXIT]:
remove()
modal()
elif action in [EXIT]:
self.close() self.close()
elif action in [BACKSPACE]:
back(self)
elif action in [UP, DOWN, LEFT, RIGHT] and focus not in [LIST, CAST, RECOMANDED, TRAILERS, FANARTS, SEARCH, BACK, CLOSE]:
self.setFocusId(LIST)
if focus > 0:
self.item.setFocus = focus
self.item.focus[focus] = self.getControl(focus).getSelectedPosition()
def Search(item): def onClick(self, control):
if item.action == 'findvideos': XML = 'ServersWindow.xml'
else: XML = 'SearchWindow.xml'
global Info
Info = item
main = SearchWindow(XML, config.get_runtime_path())
add({'class':main, 'info':item, 'id':RECOMANDED})
modal()
class SearchWindow(xbmcgui.WindowXMLDialog):
def __init__(self, *args, **kwargs):
self.items = []
self.itemlist = []
self.commands = []
self.ids = {}
self.channel = None
def onInit(self):
#### Compatibility with Kodi 18 ####
if config.get_platform(True)['num_version'] < 18:
self.setCoordinateResolution(2)
if len(self.items) == 0:
if Info.action == 'new_search' and Info.mode:
from specials.search import new_search
itemlist = new_search(Info)
elif Info.action == 'channel_search':
from specials.search import channel_search
itemlist = channel_search(Info)
else:
self.channel = __import__('channels.%s' % Info.channel, fromlist=["channels.%s" % Info.channel])
if Info.action == 'search': itemlist = getattr(self.channel, 'search')(Info, Info.search_text)
else: itemlist = getattr(self.channel, Info.action)(Info)
if not itemlist:
if platformtools.dialog_yesno(config.get_localized_string(60473), config.get_localized_string(70820) % Info.channel):
remove()
self.close()
return Search(Info.clone(mode=Info.infoLabels['mediatype']))
else:
remove()
self.close()
modal()
for item in itemlist:
if item.action not in ['save_download', 'add_movie_to_library', 'add_serie_to_library', ''] and item.infoLabels['title']:
if item.action == 'findvideos' and item.contentType in ['episode', 'tvshow']:
it = xbmcgui.ListItem(re.sub(r'\[[^\]]+\]', '', item.title))
self.getControl(NUMBER).setText(support.typo(config.get_localized_string(70362),'uppercase bold'))
else:
it = xbmcgui.ListItem(item.infoLabels['title'])
it.setProperty('channelname', channeltools.get_channel_parameters(item.channel).get('title',''))
it.setProperty('channel', item.channel)
it.setProperty('action', item.action)
it.setProperty('server', servertools.get_server_parameters(item.server.lower()).get('name',item.server))
it.setProperty('url', item.url)
for key, value in item.infoLabels.items():
it.setProperty(key, str(value))
if item.action == 'play':
it.setProperty('thumbnail', "https://raw.githubusercontent.com/kodiondemand/media/master/resources/servers/%s.png" % item.server.lower())
self.items.append(it)
self.itemlist.append(item)
if itemlist[0].contentType == 'movie':
if not itemlist[0].server:
self.commands.append(itemlist[0].clone(action='add_movie_to_library', thumbnail=support.thumb('add_to_videolibrary')))
self.commands.append(itemlist[0].clone(channel='downloads', action='save_download', from_channel=itemlist[0].channel, from_action=itemlist[0].action, thumbnail=support.thumb('downloads')))
else:
self.commands.append(Info.clone(channel='downloads', action='save_download', from_channel=Info.channel, from_action=Info.action, thumbnail=support.thumb('downloads')))
if itemlist[0].contentType in ['tvshow', 'episode']:
if not itemlist[0].server:
self.commands.append(itemlist[0].clone(action='add_serie_to_library', thumbnail=support.thumb('add_to_videolibrary')))
self.commands.append(itemlist[0].clone(channel='downloads', action='save_download', from_channel=itemlist[0].channel, from_action=itemlist[0].action, thumbnail=support.thumb('downloads')))
else:
self.commands.append(Info.clone(channel='downloads', action='save_download', from_channel=Info.channel, from_action=Info.action, thumbnail=support.thumb('downloads')))
if self.commands:
commands = []
for command in self.commands:
it = xbmcgui.ListItem(command.title)
path = filetools.join(config.get_runtime_path(),'resources','skins','Default','media','Infoplus',command.thumbnail.split('/')[-1].replace('thumb_',''))
it.setProperty('thumbnail',path)
commands.append(it)
self.getControl(COMMANDS).addItems(commands)
if self.items:
self.getControl(FANART).setImage(self.items[0].getProperty('fanart'))
self.getControl(RECOMANDED).addItems(self.items)
self.getControl(LOADING).setVisible(False)
getFocus(self)
def onClick(self, control_id):
setFocus(self)
if control_id == COMMANDS:
from platformcode.launcher import run
pos = self.getControl(COMMANDS).getSelectedPosition()
if self.commands[pos].action =='save_download' and self.commands[pos].contentType == 'tvshow':
actions = [self.commands[-1].clone(), self.commands[-1].clone(download='season')]
options = [config.get_localized_string(60355),config.get_localized_string(60357)]
run(actions[platformtools.dialog_select(config.get_localized_string(60498),options)])
else:
run(self.commands[pos])
else:
action = self.getControl(RECOMANDED).getSelectedItem().getProperty('action')
channel = self.getControl(RECOMANDED).getSelectedItem().getProperty('channel')
url = self.getControl(RECOMANDED).getSelectedItem().getProperty('url')
item = Item(channel=channel, action=action, url=url)
if action == 'play':
item.server = self.getControl(RECOMANDED).getSelectedItem().getProperty('server')
self.close()
from platformcode.launcher import run
run(item)
xbmc.sleep(500)
while xbmc.Player().isPlaying():
xbmc.sleep(500)
modal()
elif config.get_setting('autoplay'):
item.quality = self.getControl(RECOMANDED).getSelectedItem().getProperty('quality')
getattr(self.channel, item.action)(item)
self.close()
xbmc.sleep(500)
while xbmc.Player().isPlaying():
xbmc.sleep(500)
modal()
else:
pos = self.getControl(RECOMANDED).getSelectedPosition()
self.close()
if self.itemlist[pos].mode: remove()
Search(self.itemlist[pos])
def onAction(self, action):
if self.getFocusId() in [RECOMANDED]:
fanart = self.getControl(self.getFocusId()).getSelectedItem().getProperty('fanart')
self.getControl(FANART).setImage(fanart)
action = action.getId()
if action in [BACKSPACE]:
self.close()
remove()
modal()
elif action in [EXIT]:
self.close()
def Trailer(info):
global info_list, trailers
trailers = []
trailers_list = []
Type = info.getProperty('mediatype')
if Type != "movie": Type = "tv"
trailers_list = tmdb.Tmdb(id_Tmdb=info.getProperty('tmdb_id'), search_type=Type).get_videos()
if trailers_list:
for i, trailer in enumerate(trailers_list):
item = xbmcgui.ListItem(trailer['name'])
item.setProperties({'tile':trailer['name'],
'url': trailer['url'],
'thumbnail': 'http://img.youtube.com/vi/' + trailer['url'].split('=')[-1] + '/0.jpg',
'fanart':info.getProperty('fanart'),
'position':'%s/%s' % (i + 1, len(trailers_list))})
trailers.append(item)
else: # TRY youtube search
patron = r'thumbnails":\[\{"url":"(https://i.ytimg.com/vi[^"]+).*?'
patron += r'text":"([^"]+).*?'
patron += r'simpleText":"[^"]+.*?simpleText":"([^"]+).*?'
patron += r'url":"([^"]+)'
matches = support.match('https://www.youtube.com/results?search_query=' + info.getProperty('title').replace(' ','+') + '+trailer+ita', patron = patron).matches
i = 0
for thumb, title, text, url in matches:
i += 1
item = xbmcgui.ListItem(title + ' - '+ text)
item.setProperties({'tile':title + ' - '+ text, 'url': url, 'thumbnail': thumb, 'fanart':info.getProperty('fanart'), 'position':'%s/%s' % (i, len(matches))})
trailers.append(item)
main = TrailerWindow('TrailerWindow.xml', config.get_runtime_path())
add({'class':main, 'info':trailers, 'id':RECOMANDED, TRAILERS:0})
modal()
class TrailerWindow(xbmcgui.WindowXMLDialog):
def __init__(self, *args, **kwargs):
self.ids = {}
def onInit(self):
#### Compatibility with Kodi 18 ####
if config.get_platform(True)['num_version'] < 18:
self.setCoordinateResolution(2)
self.getControl(FANART).setImage(trailers[0].getProperty('fanart'))
self.getControl(NUMBER).setText(trailers[0].getProperty('position'))
self.getControl(TRAILERS).addItems(trailers)
self.setFocusId(TRAILERS)
getFocus(self)
def onClick(self, control_id):
setFocus(self)
if control_id in [TRAILERS]:
selected = self.getControl(TRAILERS).getSelectedItem()
platformtools.play_video(Item(title=selected.getProperty('title'), action='play', url=selected.getProperty('url'), server='youtube'))
while not xbmc.Player().isPlaying():
xbmc.sleep(100)
self.close()
while xbmc.Player().isPlaying():
xbmc.sleep(100)
modal()
def onAction(self, action):
if self.getFocusId() in [TRAILERS]:
self.ids[self.getFocusId()] = self.getControl(self.getFocusId()).getSelectedPosition()
fanart = self.getControl(TRAILERS).getSelectedItem().getProperty('fanart')
position = self.getControl(TRAILERS).getSelectedItem().getProperty('position')
self.getControl(FANART).setImage(fanart)
self.getControl(NUMBER).setText(position)
action = action.getId()
global info_list global info_list
if action in [BACKSPACE]:
self.close() if control in [SEARCH]:
remove() from specials.globalsearch import Search
modal() if self.item.contentType == 'episode':
elif action in [EXIT]: self.item.mode = 'tvshow'
self.item.text = self.item.contentSerieName
else:
self.item.mode = self.item.contentType
Search(self.item)
elif control in [CLOSE]:
self.close() self.close()
class ImagesWindow(xbmcgui.WindowDialog): elif control in [BACK]:
back(self)
elif control in [CAST]:
info_list.append(self.item)
listitem = self.getControl(CAST).getSelectedItem()
it = Item(id=listitem.getProperty('id'), poster=listitem.getArt('poster'))
self.close()
showCast(it)
elif control in [RECOMANDED]:
info_list.append(self.item)
listitem = self.getControl(RECOMANDED).getSelectedItem()
it = Item(title=listitem.getLabel(), infoLabels={'tmdb_id':listitem.getProperty('id'), 'mediatype':listitem.getProperty('mediatype')})
self.close()
start(it)
elif control in [TRAILERS]:
listitem = self.getControl(TRAILERS).getSelectedItem()
xbmc.executebuiltin('RunPlugin({})'.format(listitem.getPath()))
elif control in [FANARTS]:
position = showImages(self.images, self.getControl(FANARTS).getSelectedPosition())
self.getControl(FANARTS).selectItem(position)
def get_recomendations(self):
# Function for recomanded
search = {'url': '{}/{}/recommendations'.format(self.type, self.info.get('tmdb_id')), 'language': 'it', 'page': 1}
tmdb_res = tmdb.Tmdb(discover=search, search_type=self.type, language_search='it').results
search = {'url': '{}/{}/recommendations'.format(self.type, self.info.get('tmdb_id')), 'language': 'it', 'page': 2}
tmdb_res += tmdb.Tmdb(discover=search, search_type=self.type, language_search='it').results[1:]
for result in tmdb_res:
title = result.get("title", result.get("name", ''))
original_title = result.get("original_title", result.get("original_name", ''))
thumbnail ='https://image.tmdb.org/t/p/w342' + result.get("poster_path", "") if result.get("poster_path", "") else ''
recomandationsitem = xbmcgui.ListItem(title, original_title)
recomandationsitem.setArt({'poster':thumbnail})
recomandationsitem.setInfo("video",{'plot':result.get('overview', ''), 'rating':result.get('vote_average', 0)})
rating = result.get('vote_average', 'N/A')
color = 'FFFFFFFF' if rating == 'N/A' else 'FFDB2360' if rating < 4 else 'FFD2D531' if rating < 7 else 'FF21D07A'
recomandationsitem.setProperties({'id': result.get('id', 0), 'mediatype': self.info.get('mediatype'), 'rating':str(int(result.get('vote_average',10) * 10)), 'color':color})
self.recomanded.append(recomandationsitem)
def get_trailers(self):
trailers = tmdb.Tmdb(id_Tmdb=self.info.get('tmdb_id'), search_type=self.type).get_videos()
if trailers:
for trailer in trailers:
traileitem = xbmcgui.ListItem(trailer['name'], path=trailer['url'])
traileitem.setArt({'thumb':'http://img.youtube.com/vi/' + trailer['url'].split('=')[-1] + '/0.jpg'})
self.trailers.append(traileitem)
def get_fanarts(self):
_id = self.info.get('tmdb_id')
res = {}
fanarts = self.info.get('fanarts',[])
if _id:
_type = self.item.contentType.replace('show','').replace('movie','movies')
host = 'http://webservice.fanart.tv/v3/{}/{}?api_key=cab16e262d72fea6a6843d679aa10300'
res = httptools.downloadpage(host.format(_type, _id)).json
if res: fanarts += [k.get('url') for k in res.get('moviebackground', [])] if _type == 'movies' else [k.get('url') for k in res.get('showbackground', [])]
if fanarts:
for i, fanart in enumerate(fanarts):
fanartitem = xbmcgui.ListItem(str(i))
fanartitem.setArt({'fanart':fanart})
self.images.append(fanart)
self.fanarts.append(fanartitem)
def showCast(item):
xbmc.executebuiltin('Dialog.Close(all)')
CastWindow('CastWindow.xml', config.get_runtime_path(), item=item)
class CastWindow(xbmcgui.WindowXML):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.tmdb = kwargs.get("tmdb", {}) self.item = kwargs.get('item')
self.imdb = kwargs.get("imdb", {}) self.id = self.item.id
self.mal = kwargs.get("mal", {}) self.item.InfoWindow = 'cast'
self.fanartv = kwargs.get("fanartv", {}) self.host = tmdb.host
self.api = tmdb.api
self.movies = []
self.tvshows = []
self.movieItems = []
self.tvshowItems = []
if not self.item.focus: self.item.focus = {}
if self.item:
platformtools.dialog_busy(True)
self.get_person_info()
self.get_credits()
platformtools.dialog_busy(False)
self.doModal()
self.image_list = [] def get_person_info(self):
# Function for Person Info
url = '{}/person/{}?api_key={}&language=en'.format(self.host, self.id, self.api)
translation_url = '{}/person/{}/translations?api_key={}'.format(self.host, self.id, self.api)
info = httptools.downloadpage(url).json
for key, value in self.tmdb.items():
for detail in value: self.image_list.append('https://image.tmdb.org/t/p/original' + detail["file_path"])
for image in self.imdb: self.image_list.append(image["src"])
for image, title in self.mal: self.image_list.append(image)
for key, value in self.fanartv.items():
for image in value: self.image_list.append(image["url"])
#### Kodi 18 Compatibility #### biography = info.get('biography', '')
if config.get_platform(True)['num_version'] < 18: self.setCoordinateResolution(2) if not biography:
log translation = httptools.downloadpage(translation_url).json
self.background = xbmcgui.ControlImage(0, 0, 1280, 720, imagepath('white'), colorDiffuse='FF232323') if translation:
self.addControl(self.background) for t in translation['translations']:
main_image = self.image_list[0] if self.image_list else '' if t['iso_639_1'] == 'en':
self.main_image = xbmcgui.ControlImage(0, 0, 1280, 720, main_image, 2) biography = t['data']['biography']
self.addControl(self.main_image) break
if self.image_list: born = info.get('birthday').split('-')[0] if info.get('birthday') else ''
self.counter = xbmcgui.ControlTextBox(1180, 640, 60, 40, 'font13') dead = info.get('deathday').split('-')[0] if info.get('deathday') else ''
self.addControl(self.counter) place = info.get('place_of_birth')
self.counter.setText('%s/%s' % (1,len(self.image_list))) self.castitem = xbmcgui.ListItem(info.get('name'))
else: birth = born + (' - ' + dead if dead else '') + (' [B]•[/B] ' + place if place else '')
self.text = xbmcgui.ControlLabel(0, 0, 1280, 720, 'NESSUNA IMMAGINE', 'font13', alignment=2|4) self.castitem.setArt({'poster':self.item.poster})
self.addControl(self.text) self.castitem.setProperties({'birth':birth, 'plot':biography})
self.close_btn = xbmcgui.ControlButton(0, 0, 1280, 720, '' ,'', '') def onInit(self):
self.addControl(self.close_btn) self.getControl(LIST).addItem(self.castitem)
self.getControl(CAST).addItems(self.movies)
self.getControl(RECOMANDED).addItems(self.tvshows)
if len(self.image_list) > 1: # Set Focus
# BUTTON LEFT xbmc.sleep(200)
self.btn_left = xbmcgui.ControlButton(0, 330, 60, 60, '', imagepath('previous_focus'), imagepath('previous_nofocus')) if self.item.focus:
self.addControl(self.btn_left) for k, v in self.item.focus.items():
self.btn_left.setAnimations([('WindowOpen', 'effect=slide start=-60,0 end=0,0 delay=100 time=200'),('WindowClose', 'effect=slide start=0,0 end=-60,0 delay=100 time=200')]) self.getControl(k).selectItem(v)
self.setFocusId(self.item.setFocus)
# BUTTON RIGHT else: self.setFocusId(LIST)
self.btn_right = xbmcgui.ControlButton(1220, 330, 60, 60, '', imagepath('next_focus'), imagepath('next_nofocus'))
self.addControl(self.btn_right)
self.btn_right.setAnimations([('WindowOpen', 'effect=slide start=60,0 end=0,0 delay=100 time=200'),('WindowClose', 'effect=slide start=0,0 end=60,0 delay=100 time=200')])
self.count = 0
def onAction(self, action): def onAction(self, action):
action = action.getId()
focus = self.getFocusId()
if action in [EXIT]:
self.close()
elif action in [BACKSPACE]:
back(self)
elif action in [UP, DOWN, LEFT, RIGHT] and focus not in [LIST, CAST, RECOMANDED, TRAILERS, FANARTS, SEARCH, BACK, CLOSE]:
self.setFocusId(LIST)
if focus > 0:
self.item.setFocus = focus
self.item.focus[focus] = self.getControl(focus).getSelectedPosition()
def onClick(self, control):
global info_list
if control in [CLOSE]:
self.close()
elif control in [BACK]:
back(self)
elif control in [CAST]:
info_list.append(self.item)
self.close()
start(self.movieItems[self.getControl(CAST).getSelectedPosition()])
elif control in [RECOMANDED]:
info_list.append(self.item)
self.close()
start(self.tvshowItems[self.getControl(RECOMANDED).getSelectedPosition()])
def get_credits(self):
# Function for Credits Info
url = '{}/person/{}/combined_credits?api_key={}&language=it'.format(self.host, self.id, self.api)
info = httptools.downloadpage(url).json
for video in info.get('cast',[]) + info.get('crew',[]):
year = video.get('release_date', video.get('first_air_date'))
poster = 'https://image.tmdb.org/t/p/original/' + video.get('poster_path') if video.get('poster_path') else ''
infoLabels = {
'rating':video.get('vote_average', 0),
'plot':video.get('overview',''),
'mediatype':video.get('media_type','').replace('tv','tvshow'),
'thumbnail': poster,
'tmdb_id':video.get('id'),
'title':video.get('title',video.get('name','')),
'year':year.split('-')[0] if year else ''
}
item = Item(infoLabels=infoLabels)
videoitem = xbmcgui.ListItem(video.get('title',video.get('name','')), video.get('character', video.get('job')))
videoitem.setArt({'poster':infoLabels['thumbnail']})
rating = video.get('vote_average', 'N/A')
color = 'FFFFFFFF' if rating == 'N/A' else 'FFDB2360' if rating < 4 else 'FFD2D531' if rating < 7 else 'FF21D07A'
videoitem.setProperties({'rating':str(int(video.get('vote_average',10) * 10)), 'color':color})
platformtools.set_infolabels(videoitem, item)
if video.get('media_type') == 'movie':
self.movies.append(videoitem)
self.movieItems.append(item)
else:
self.tvshows.append(videoitem)
self.tvshowItems.append(item)
def showImages(images, position):
xbmc.executebuiltin('Dialog.Close(all)')
ImagesWindow('imageWindow.xml', config.get_runtime_path(), images=images, position=position)
class ImagesWindow(xbmcgui.WindowXMLDialog):
def __init__(self, *args, **kwargs):
self.images = []
self.position = kwargs.get('position')
for i, image in enumerate(kwargs.get('images', [])):
listitem = xbmcgui.ListItem(str(i+1), str(len(kwargs.get('images', []))))
listitem.setArt({'fanart':image})
self.images.append(listitem)
self.doModal()
return self.position
def onInit(self):
self.getControl(LIST).addItems(self.images)
self.setFocusId(LIST)
self.getControl(LIST).selectItem(self.position)
def onAction(self, action):
action = action.getId()
self.position = self.getControl(LIST).getSelectedPosition()
if action in [BACKSPACE, EXIT]: if action in [BACKSPACE, EXIT]:
self.close() self.close()
if len(self.image_list) > 1:
if action in [RIGHT, DOWN]:
self.count += 1
if self.count > len(self.image_list) -1: self.count = 0
self.main_image.setImage(self.image_list[self.count])
self.counter.setText('%s/%s' % (self.count,len(self.image_list)))
if action in [LEFT, UP]:
self.count -= 1
if self.count < 0: self.count = len(self.image_list) -1
self.main_image.setImage(self.image_list[self.count])
self.counter.setText('%s/%s' % (self.count,len(self.image_list)))
def onControl(self, control):
if len(self.image_list) > 1:
if control.getId() == self.btn_right.getId():
self.count += 1
if self.count > len(self.image_list) -1: self.count = 0
self.main_image.setImage(self.image_list[self.count])
elif control.getId() == self.btn_left.getId(): def back(self):
self.count -= 1
if self.count < 0: self.count = len(self.image_list) -1
self.main_image.setImage(self.image_list[self.count])
else:
self.close()
else:
self.close()
def get_recomendations(info):
recommendations = [info]
Type = info.getProperty('mediatype')
if Type != "movie": Type = "tv"
search = {'url': '%s/%s/recommendations' % (Type, info.getProperty('tmdb_id')), 'language': 'it', 'page': 1}
tmdb_res = tmdb.Tmdb(discover=search, search_type=Type, idioma_Search='it').results
for result in tmdb_res:
if Type == 'movie':
title = result.get("title", '')
original_title = result.get("original_title", "")
else:
title = result.get("name", '')
original_title = result.get("original_name", '')
thumbnail ='https://image.tmdb.org/t/p/w342' + result.get("poster_path", "") if result.get("poster_path", "") else ''
fanart = 'https://image.tmdb.org/t/p/original' + result.get("backdrop_path", "") if result.get("backdrop_path", "") else ''
item = xbmcgui.ListItem(title)
item.setProperties({'title': title,
'original_title': original_title,
'mediatype': info.getProperty('mediatype'),
'tmdb_id': result.get('id', 0),
'imdb_id': info.getProperty('imdb_id'),
'rating': result.get('vote_average', 0),
'plot': result.get('overview', ''),
'year': result.get('release_date', '').split('-')[0],
'thumbnail': thumbnail,
'fanart': fanart})
recommendations.append(item)
return recommendations
def get_cast(info):
cast_list = []
actors_list = []
Type = "movie" if info.getProperty('mediatype') == 'movie' else 'tv'
otmdb = tmdb.Tmdb(id_Tmdb=info.getProperty('tmdb_id'), search_type=Type)
actors = otmdb.result.get("credits", {}).get("cast", [])
cast = otmdb.result.get("credits", {}).get("crew", []) if Type == 'movie' else otmdb.result.get("created_by", [])
for i, crew in enumerate(cast):
if crew.get('job', '') == 'Director' or Type!= "movie":
actors.insert(0, crew)
else:
res = xbmcgui.ListItem(crew.get('name', ''))
res.setProperties({'title': crew.get('name', ''),
'job': crew.get('job', '') if crew.get('job', '') else crew.get('character',''),
'thumbnail': "https://image.tmdb.org/t/p/w342" + crew.get('profile_path', '') if crew.get('profile_path', '') else '',
'department': crew.get('department', ''),
'type': Type,
'id': crew.get('id', ''),
'mediatype': info.getProperty('mediatype')})
cast_list.append(res)
for actor in actors:
res = xbmcgui.ListItem(actor.get('name', ''))
res.setProperties({'title': actor.get('name', ''),
'job': actor.get('job', '') if actor.get('job', '') else actor.get('character',''),
'thumbnail': "https://image.tmdb.org/t/p/w342" + actor.get('profile_path', '') if actor.get('profile_path', '') else imagepath('no_photo'),
'type': Type,
'id': actor.get('id', ''),
'mediatype': info.getProperty('mediatype')})
actors_list.append(res)
return cast_list, actors_list
def imagepath(image):
if len(image.split('.')) == 1: image += '.png'
path = filetools.join(config.get_runtime_path(), 'resources', 'skins' , 'Default', 'media', 'Infoplus', image)
return path
def actors_more_info(ListItem):
Type = ListItem.getProperty('type')
actor_id = ListItem.getProperty('id')
more = tmdb.Tmdb(discover={'url': 'person/' + str(actor_id), 'language': 'en'}).results
if more['biography']: ListItem.setProperty('bio', more['biography'])
def get_movies(info):
Type = info.getProperty('mediatype') if info.getProperty('mediatype') == 'movie' else 'tv'
more = tmdb.Tmdb(discover={'url': 'person/' + str(info.getProperty('id')), 'language': 'it', 'append_to_response': Type + '_credits'}).results
movies = []
for movie in more.get(Type + '_credits', {}).get('cast',[]) + more.get(Type + '_credits', {}).get('crew',[]):
ret = {}
ret['mediatype'] = info.getProperty('mediatype')
thumbnail = movie.get('poster_path','')
ret['thumbnail'] = "https://image.tmdb.org/t/p/w342" + thumbnail if thumbnail else imagepath(Type)
ret['title'] = movie.get('title','') if Type == 'movie' else movie.get('name','')
ret['original_title'] = movie.get('original_title','') if Type == 'movie' else movie.get("original_name", '')
ret['tmdb_id'] = movie.get('id',0)
if ret not in movies: movies.append(ret)
itemlist = []
with futures.ThreadPoolExecutor() as executor:
List = [executor.submit(add_infoLabels, movie) for movie in movies]
for res in futures.as_completed(List):
if res.result():
itemlist.append(res.result())
itemlist = sorted(itemlist, key=lambda it: (it.getProperty('year'),it.getProperty('title')))
return itemlist
def add_infoLabels(movie):
it = Item(title=movie['title'], infoLabels=movie, contentType=movie['mediatype'])
tmdb.set_infoLabels_item(it, True)
movie=it.infoLabels
item = xbmcgui.ListItem(movie['title'])
for key, value in movie.items():
item.setProperty(key, str(value))
return item
def add(Dict):
global info_list
info_list.append(Dict)
def remove():
global info_list
info_list = info_list[:-1]
def modal():
global Info
global info_list global info_list
if info_list: if info_list:
Info = info_list[-1]['info'] self.close()
info_list[-1]['class'].doModal() it = info_list[-1]
info_list = info_list[:-1]
def getFocus(self): if it.InfoWindow == 'cast':
global info_list showCast(it)
for key, value in info_list[-1].items(): else:
if key not in ['class', 'info', 'id']: start(it)
self.getControl(int(key)).selectItem(value) else:
self.setFocusId(info_list[-1]['id']) self.close()
def setFocus(self):
global info_list
info_list[-1]['id'] = self.getFocusId()
for key, values in self.ids.items():
info_list[-1][key] = values
+1 -1
View File
@@ -111,7 +111,7 @@ def run(item=None):
elif item.channel == "infoplus": elif item.channel == "infoplus":
from platformcode import infoplus from platformcode import infoplus
return infoplus.Main(item) return infoplus.start(item)
elif item.channel == "backup": elif item.channel == "backup":
from platformcode import backup from platformcode import backup
+13 -9
View File
@@ -289,6 +289,11 @@ def dialog_select_group(heading, _list, preselect=0):
return dialog return dialog
def dialog_busy(state):
if state: xbmc.executebuiltin('ActivateWindow(busydialognocancel)')
else: xbmc.executebuiltin('Dialog.Close(busydialognocancel)')
def itemlist_refresh(offset=0): def itemlist_refresh(offset=0):
try: try:
_id = xbmcgui.getCurrentWindowId() _id = xbmcgui.getCurrentWindowId()
@@ -349,11 +354,8 @@ def render_items(itemlist, parent_item):
if not item.title: if not item.title:
item.title = '' item.title = ''
# If there is no action or it is findvideos / play, folder = False because no listing will be returned # If there is no action or it is findvideos / play, folder = False because no listing will be returned
if item.folder == "": # not set if item.action in ['play', '']:
if item.action in ['play', '']: item.folder = False
item.folder = False
else:
item.folder = True
if item.fanart == "": if item.fanart == "":
item.fanart = parent_item.fanart item.fanart = parent_item.fanart
if item.action == 'play' and thumb_type == 1 and not item.forcethumb: if item.action == 'play' and thumb_type == 1 and not item.forcethumb:
@@ -403,7 +405,8 @@ def render_items(itemlist, parent_item):
if item.infoLabels.get('disc'): art['banner'] = item.infoLabels['disc'] if item.infoLabels.get('disc'): art['banner'] = item.infoLabels['disc']
listitem.setArt(art) listitem.setArt(art)
listitem.setProperty('IsPlayable', str(config.get_setting("player_mode") == 1 and item.action == "play" and not item.nfo).lower()) if config.get_setting("player_mode") == 1 and item.action == "play" and not item.nfo:
listitem.setProperty('IsPlayable', 'true')
if item.infoLabels.get('castandrole'): if item.infoLabels.get('castandrole'):
cast = [{'name':c[0], 'role':c[1], 'thumbnail':c[2], 'order':c[3]} for c in item.infoLabels.get("castandrole", [])] cast = [{'name':c[0], 'role':c[1], 'thumbnail':c[2], 'order':c[3]} for c in item.infoLabels.get("castandrole", [])]
@@ -649,11 +652,12 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
# context_commands.append((config.get_localized_string(60348), "Action(Info)")) # context_commands.append((config.get_localized_string(60348), "Action(Info)"))
# InfoPlus # InfoPlus
if config.get_setting("infoplus"): # from core.support import dbg;dbg()
# if config.get_setting("infoplus"):
#if item.infoLabels['tmdb_id'] or item.infoLabels['imdb_id'] or item.infoLabels['tvdb_id'] or \ #if item.infoLabels['tmdb_id'] or item.infoLabels['imdb_id'] or item.infoLabels['tvdb_id'] or \
# (item.contentTitle and item.infoLabels["year"]) or item.contentSerieName: # (item.contentTitle and item.infoLabels["year"]) or item.contentSerieName:
if item.infoLabels['tmdb_id'] or item.infoLabels['imdb_id'] or item.infoLabels['tvdb_id']: if item.infoLabels['tmdb_id'] or item.infoLabels['imdb_id'] or item.infoLabels['tvdb_id']:
context_commands.append(("InfoPlus", "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'channel=infoplus&action=Main&from_channel=' + item.channel))) context_commands.append(("InfoPlus", "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'channel=infoplus&action=start&from_channel=' + item.channel)))
# Open in browser and previous menu # Open in browser and previous menu
if parent_item.channel not in ["news", "channelselector", "downloads", "search"] and item.action != "mainlist" and not parent_item.noMainMenu: if parent_item.channel not in ["news", "channelselector", "downloads", "search"] and item.action != "mainlist" and not parent_item.noMainMenu:
+2
View File
@@ -5,6 +5,7 @@
from __future__ import division from __future__ import division
import sys, os, inspect, xbmcgui, xbmc import sys, os, inspect, xbmcgui, xbmc
from core import support
PY3 = False PY3 = False
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
from builtins import range from builtins import range
@@ -363,6 +364,7 @@ class SettingsWindow(xbmcgui.WindowXMLDialog):
control.setVisible(False) control.setVisible(False)
label.setVisible(False) label.setVisible(False)
logger.debug('VALUES',c["lvalues"][self.values[c["id"]]])
label.setLabel(c["lvalues"][self.values[c["id"]]]) label.setLabel(c["lvalues"][self.values[c["id"]]])
c["control"] = control c["control"] = control
+1 -1
View File
@@ -156,7 +156,7 @@
<!-- <setting id="kod_menu" type="bool" label="60026" default="true"/>--> <!-- <setting id="kod_menu" type="bool" label="60026" default="true"/>-->
<setting id="infoplus" type="bool" label="70151" default="false"/> <setting id="infoplus" type="bool" label="70151" default="false"/>
<!-- <setting id="infoplus_set" type="bool" label="70128" visible="eq(-1,true)" default="false" subsetting="true"/> --> <!-- <setting id="infoplus_set" type="bool" label="70128" visible="eq(-1,true)" default="false" subsetting="true"/> -->
<setting id="extended_info" type="bool" label="70152" default="false"/> <!-- <setting id="extended_info" type="bool" label="70152" default="false"/> -->
<!-- Shortcut --> <!-- Shortcut -->
<setting label="30998" type="lsep"/> <setting label="30998" type="lsep"/>
<setting id="shortcut_key" type="action" label="30999" action="RunPlugin(plugin://plugin.video.kod/?ew0KICAgICJhY3Rpb24iOiAia2V5bWFwIg0KfQ==)"/> <setting id="shortcut_key" type="action" label="30999" action="RunPlugin(plugin://plugin.video.kod/?ew0KICAgICJhY3Rpb24iOiAia2V5bWFwIg0KfQ==)"/>
+420
View File
@@ -0,0 +1,420 @@
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<window>
<depth>0.52</depth>
<coordinates>
<left>0</left>
<top>0</top>
</coordinates>
<backgroundcolor>FF232323</backgroundcolor>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" />
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="100" delay='100'/>
</animation>
<controls>
<control type='image'>
<description>Fanart</description>
<top>0</top>
<left>0</left>
<width>1280</width>
<height>720</height>
<texture colordiffuse='FF555555'>$INFO[Container(100).ListItem.Art(fanart)]</texture>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<description>Poster</description>
<top>0</top>
<left>0</left>
<width>480</width>
<height>720</height>
<texture>$INFO[Container(100).ListItem.Art(poster)]</texture>
<aspectratio>scale</aspectratio>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" delay='100'/>
<effect type="slide" start="-200,0" end='0,0' time="200" delay='100'/>
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="200" />
<effect type="slide" start="0,0" end='-200,0' time="200" />
</animation>
</control>
<!-- Header Group -->
<control type='group'>
<top>30</top>
<left>510</left>
<width>720</width>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" delay='100'/>
<effect type="slide" start="0,-80" end='0,0' time="200" delay='100'/>
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="200" />
<effect type="slide" start="0,0" end='0,-80' time="300" />
</animation>
<control type='textbox'>
<description>Name</description>
<top>0</top>
<left>0</left>
<height>60</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Label]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='image'>
<description>Separator</description>
<top>80</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>
</control>
</control>
<!-- Info Group -->
<control type='grouplist'>
<top>130</top>
<left>510</left>
<width>720</width>
<itemgap>40</itemgap>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" delay='100'/>
<effect type="slide" start="300,0" end='0,0' time="200" delay='100'/>
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="200" />
<effect type="slide" start="0,0" end='300,0' time="200" />
</animation>
<!-- Cast Info -->
<control type='group'>
<description>Cast Info</description>
<visible>Integer.IsGreater(Container(100).NumItems, 0)</visible>
<top>0</top>
<height>261</height>
<control type='list' id='100'>
<description>Control List</description>
<orientation>horizontal</orientation>
<itemlayout/>
<focusedlayout/>
<onup>201</onup>
<ondown>101</ondown>
</control>
<control type='textbox'>
<description>Birth</description>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Property(birth)]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Description</description>
<top>50</top>
<left>0</left>
<height>200</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Property(plot)]</label>
<align>left</align>
<aligny>top</aligny>
<autoscroll time='3000' delay='3000' repeat='3000'>True</autoscroll>
</control>
<control type='image'>
<description>Separator</description>
<top>260</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>
</control>
</control>
<!-- Movie -->
<control type='group'>
<description>Movie Group</description>
<!-- <visible>Integer.IsGreater(Container(102).NumItems, 0)</visible> -->
<height>241</height>
<control type='textbox'>
<description>Movie Title</description>
<left>10</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>Movie</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='fixedlist' id='101'>
<description>Movie List</description>
<top>30</top>
<onup>100</onup>
<ondown>102</ondown>
<height>200</height>
<orientation>horizontal</orientation>
<itemgap>10</itemgap>
<itemlayout width='133' height='200'>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout width='133' height='200'>
<control type='image'>
<texture colordiffuse='FF0082C2'>white.png</texture>
<bordersize>5</bordersize>
<aspectratio>scale</aspectratio>
<visible>Control.HasFocus(101)</visible>
</control>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
<control type='group'>
<top>30</top>
<left>133</left>
<height>200</height>
<visible>Control.HasFocus(101)</visible>
<animation effect='zoom' start='0,100' center='720,0' reversible='true' time='160' condition='Control.HasFocus(101)'>Conditional</animation>
<animation effect='fade' start='0' reversible='true' time='100' condition='Control.HasFocus(101)'>Conditional</animation>
<control type='image'>
<texture colordiffuse='CC000000'>white.png</texture>
</control>
<control type='textbox'>
<description>Title</description>
<top>50</top>
<left>40</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(101).ListItem.Year]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Year</description>
<top>90</top>
<left>40</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(101).ListItem.Label][/B]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>As</description>
<visible>!String.IsEmpty(Container(101).ListItem.Label2)</visible>
<top>130</top>
<left>40</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>as: $INFO[Container(101).ListItem.Label2]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Rating</description>
<top>20</top>
<right>50</right>
<width>40</width>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(101).ListItem.Rating][/B]</label>
<align>right</align>
<aligny>center</aligny>
</control>
<control type='image'>
<description>Rating Circle</description>
<top>20</top>
<right>15</right>
<width>30</width>
<height>30</height>
<texture colordiffuse='$INFO[Container(101).ListItem.Property(color)]'>Circular/$INFO[Container(101).ListItem.Property(rating)].png</texture>
<aspectratio>scale</aspectratio>
</control>
</control>
<control type='image'>
<description>Separator</description>
<top>240</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>ù
</control>
</control>
<!-- Show -->
<control type='group'>
<description>Show Group</description>
<!-- <visible>Integer.IsGreater(Container(102).NumItems, 0)</visible> -->
<height>241</height>
<control type='textbox'>
<description>Show Title</description>
<left>10</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>Show</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='fixedlist' id='102'>
<description>Show List</description>
<top>30</top>
<onup>101</onup>
<height>200</height>
<orientation>horizontal</orientation>
<itemgap>10</itemgap>
<itemlayout width='133' height='200'>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout width='133' height='200'>
<control type='image'>
<texture colordiffuse='FF0082C2'>white.png</texture>
<bordersize>5</bordersize>
<aspectratio>scale</aspectratio>
<visible>Control.HasFocus(102)</visible>
</control>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
<control type='group'>
<top>30</top>
<left>133</left>
<height>200</height>
<visible>Control.HasFocus(102)</visible>
<animation effect='zoom' start='0,100' center='720,0' reversible='true' time='160' condition='Control.HasFocus(102)'>Conditional</animation>
<animation effect='fade' start='0' reversible='true' time='100' condition='Control.HasFocus(102)'>Conditional</animation>
<control type='image'>
<texture colordiffuse='CC000000'>white.png</texture>
</control>
<control type='textbox'>
<description>Title</description>
<top>50</top>
<left>40</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(102).ListItem.Year]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Year</description>
<top>90</top>
<left>40</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(102).ListItem.Label][/B]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>As</description>
<visible>!String.IsEmpty(Container(102).ListItem.Label2)</visible>
<top>130</top>
<left>40</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>as: $INFO[Container(102).ListItem.Label2]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Rating</description>
<top>20</top>
<right>50</right>
<width>40</width>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(102).ListItem.Rating][/B]</label>
<align>right</align>
<aligny>center</aligny>
</control>
<control type='image'>
<description>Rating Circle</description>
<top>20</top>
<right>15</right>
<width>30</width>
<height>30</height>
<texture colordiffuse='$INFO[Container(102).ListItem.Property(color)]'>Circular/$INFO[Container(102).ListItem.Property(rating)].png</texture>
<aspectratio>scale</aspectratio>
</control>
</control>
</control>
</control>
<control type='grouplist'>
<ondown>100</ondown>
<top>30</top>
<right>30</right>
<height>40</height>
<width>80</width>
<!-- <itemgap>10</itemgap> -->
<orientation>horizontal</orientation>
<control type="button" id="201">
<description>Back</description>
<height>40</height>
<width>40</width>
<texturefocus colordiffuse="FFFFFFFF">left.png</texturefocus>
<texturenofocus colordiffuse="80FFFFFF">left.png</texturenofocus>
</control>
<control type="button" id="202">
<description>Close</description>
<height>40</height>
<width>40</width>
<texturefocus colordiffuse="FFFFFFFF">close.png</texturefocus>
<texturenofocus colordiffuse="80FFFFFF">close.png</texturenofocus>
</control>
</control>
</controls>
</window>
@@ -0,0 +1,68 @@
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<window>
<depth>0.52</depth>
<coordinates>
<left>0</left>
<top>0</top>
</coordinates>
<backgroundcolor>FF232323</backgroundcolor>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" />
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="100" delay='100'/>
</animation>
<controls>
<control type='image'>
<description>Fanart</description>
<top>0</top>
<left>0</left>
<width>1280</width>
<height>720</height>
<texture colordiffuse='FF232323'>white.png</texture>
<aspectratio>scale</aspectratio>
</control>
<control type='fixedlist' id='100'>
<description>Fanart List</description>
<top>0</top>
<onup>202</onup>
<orientation>horizontal</orientation>
<itemgap>10</itemgap>
<itemlayout width='1280' height='720'>
<control type='image'>
<texture>$INFO[ListItem.Art(fanart)]</texture>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout width='1280' height='720'>
<control type='image'>
<texture>$INFO[ListItem.Art(fanart)]</texture>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
<control type='textbox'>
<description>Count</description>
<right>70</right>
<top>30</top>
<height>40</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Label]/$INFO[Container(100).ListItem.Label2]</label>
<align>right</align>
<aligny>center</aligny>
</control>
<control type="button" id="202">
<description>Close</description>
<top>30</top>
<right>20</right>
<ondown>100</ondown>
<height>40</height>
<width>40</width>
<texturefocus colordiffuse="FFFFFFFF">close.png</texturefocus>
<texturenofocus colordiffuse="80FFFFFF">close.png</texturenofocus>
<onclick>Action(close)</onclick>
</control>
</controls>
</window>
+586 -359
View File
@@ -1,364 +1,591 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml version='1.0' encoding='utf-8' standalone='yes'?>
<window> <window>
<depth>0.52</depth> <depth>0.52</depth>
<coordinates> <coordinates>
<left>0</left> <left>0</left>
<top>0</top> <top>0</top>
</coordinates> </coordinates>
<controls> <backgroundcolor>FF232323</backgroundcolor>
<!-- CLOSE BUTTON / BACKGROUND --> <animation type="WindowOpen" reversible="false">
<control type="button"> <effect type="fade" start="0" end="100" time="100" />
<left>0</left> </animation>
<top>0</top> <animation type="WindowClose" reversible="false">
<width>100%</width> <effect type="fade" start="100" end="0" time="100" delay='100'/>
<height>100%</height> </animation>
<texturefocus colordiffuse="FF232323">white.png</texturefocus> <controls>
<texturenofocus colordiffuse="FF232323">white.png</texturenofocus> <control type='image'>
<animation effect="fade" time="200">WindowOpen</animation> <description>Fanart</description>
<animation effect="fade" time="200">WindowClose</animation> <top>0</top>
<onclick>Action(close)</onclick> <left>0</left>
</control> <width>1280</width>
<!-- GROUP CONTROLS --> <height>720</height>
<control type="group"> <texture colordiffuse='FF555555'>$INFO[Container(100).ListItem.Art(fanart)]</texture>
<left>0</left> <aspectratio>scale</aspectratio>
<top>0</top> </control>
<animation type="WindowOpen" reversible="false"> <control type='image'>
<effect type="slide" start="0,100" end="0,0" delay="160" time="160" /> <description>Poster</description>
<effect type="fade" delay="160" end="100" time="100" /> <top>0</top>
</animation> <left>0</left>
<animation type="WindowClose" reversible="false"> <width>480</width>
<effect type="slide" start="0,0" end="0,100" delay="160" time="160" /> <height>720</height>
<effect type="fade" delay="160" start="100" end="0" time="100" /> <texture>$INFO[Container(100).ListItem.Art(poster)]</texture>
</animation> <aspectratio>scale</aspectratio>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" delay='100'/>
<effect type="slide" start="-200,0" end='0,0' time="200" delay='100'/>
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="200" />
<effect type="slide" start="0,0" end='-200,0' time="200" />
</animation>
</control>
<!-- Header Group -->
<control type='group'>
<top>30</top>
<left>510</left>
<width>720</width>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" delay='100'/>
<effect type="slide" start="0,-80" end='0,0' time="200" delay='100'/>
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="200" />
<effect type="slide" start="0,0" end='0,-80' time="300" />
</animation>
<control type='image'>
<description>Rating Circle</description>
<top>0</top>
<left>0</left>
<width>60</width>
<height>60</height>
<texture colordiffuse='$INFO[Container(100).ListItem.Property(color)]'>Circular/$INFO[Container(100).ListItem.Property(rating)].png</texture>
<aspectratio>scale</aspectratio>
</control>
<control type='textbox'>
<description>Rating</description>
<top>15</top>
<left>10</left>
<height>30</height>
<width>40</width>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Rating()]</label>
<align>center</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Title</description>
<top>0</top>
<left>80</left>
<height>60</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Label]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='image'>
<description>Separator</description>
<top>80</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>
</control>
</control>
<!-- Info Group -->
<control type='grouplist'>
<top>130</top>
<left>510</left>
<width>720</width>
<itemgap>40</itemgap>
<animation type="WindowOpen" reversible="false">
<effect type="fade" start="0" end="100" time="100" delay='100'/>
<effect type="slide" start="300,0" end='0,0' time="200" delay='100'/>
</animation>
<animation type="WindowClose" reversible="false">
<effect type="fade" start="100" end="0" time="200" />
<effect type="slide" start="0,0" end='300,0' time="200" />
</animation>
<!-- Video Info -->
<control type='group'>
<description>Video Info</description>
<visible>Integer.IsGreater(Container(100).NumItems, 0)</visible>
<top>0</top>
<height>261</height>
<control type='grouplist'>
<top>0</top>
<height>30</height>
<width>300</width>
<itemgap>10</itemgap>
<orientation>horizontal</orientation>
<align>left</align>
<control type='textbox'>
<description>Year</description>
<height>30</height>
<width>45</width>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Year]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Separator</description>
<height>30</height>
<width>10</width>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<visible>!String.IsEmpty(Container(100).ListItem.Duration())</visible>
<label>[B]•[/B]</label>
<align>center</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Year</description>
<height>30</height>
<width>50</width>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Duration(hh:mm)]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Separator</description>
<height>30</height>
<width>10</width>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<visible>!String.IsEmpty(Container(100).ListItem.Mpaa)</visible>
<label>[B]•[/B]</label>
<align>center</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Year</description>
<height>30</height>
<width>60</width>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Mpaa]</label>
<align>left</align>
<aligny>center</aligny>
</control>
</control>
<control type='textbox'>
<description>Plot</description>
<top>50</top>
<left>0</left>
<height>200</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(100).ListItem.Plot]</label>
<align>left</align>
<aligny>top</aligny>
<autoscroll time='3000' delay='3000' repeat='3000'>True</autoscroll>
</control>
<control type='image'>
<description>Separator</description>
<top>260</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>
</control>
</control>
<!-- Cast -->
<control type='group'>
<description>Cast Group</description>
<visible>Integer.IsGreater(Container(101).NumItems, 0)</visible>
<height>241</height>
<control type='list' id='100'>
<description>Control List</description>
<orientation>horizontal</orientation>
<itemlayout/>
<focusedlayout/>
<onup>200</onup>
<ondown>101</ondown>
</control>
<control type='textbox'>
<description>Cast Title</description>
<left>10</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>Cast</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='fixedlist' id='101'>
<description>Cast List</description>
<top>30</top>
<onup>100</onup>
<ondown>102</ondown>
<height>200</height>
<orientation>horizontal</orientation>
<itemgap>10</itemgap>
<itemlayout width='133' height='200'>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout width='133' height='200'>
<control type='image'>
<texture colordiffuse='FF0082C2'>white.png</texture>
<bordersize>5</bordersize>
<aspectratio>scale</aspectratio>
<visible>Control.HasFocus(101)</visible>
</control>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
<control type='group'>
<top>30</top>
<left>133</left>
<height>200</height>
<visible>Control.HasFocus(101)</visible>
<animation effect='zoom' start='0,100' center='720,0' reversible='true' time='160' condition='Control.HasFocus(101)'>Conditional</animation>
<animation effect='fade' start='0' reversible='true' time='100' condition='Control.HasFocus(101)'>Conditional</animation>
<control type='image'>
<texture colordiffuse='CC000000'>white.png</texture>
</control>
<control type='textbox'>
<description>Name</description>
<top>50</top>
<left>40</left>
<height>50</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(101).ListItem.Label][/B]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Name</description>
<top>100</top>
<left>40</left>
<height>50</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(101).ListItem.Label2]</label>
<align>left</align>
<aligny>center</aligny>
</control>
</control>
<control type='image'>
<description>Separator</description>
<top>240</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>ù
</control>
</control>
<!-- Recomended -->
<control type='group'>
<description>Recomanded Group</description>
<!-- <visible>Integer.IsGreater(Container(102).NumItems, 0)</visible> -->
<height>241</height>
<control type='textbox'>
<description>Cast Title</description>
<left>10</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>Recomanded</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='fixedlist' id='102'>
<description>Recomanded List</description>
<top>30</top>
<onup>101</onup>
<ondown>103</ondown>
<height>200</height>
<orientation>horizontal</orientation>
<itemgap>10</itemgap>
<itemlayout width='133' height='200'>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout width='133' height='200'>
<control type='image'>
<texture colordiffuse='FF0082C2'>white.png</texture>
<bordersize>5</bordersize>
<aspectratio>scale</aspectratio>
<visible>Control.HasFocus(102)</visible>
</control>
<control type='image'>
<texture>Infoplus/no_photo.png</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(poster)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
<control type='group'>
<top>30</top>
<left>133</left>
<height>200</height>
<visible>Control.HasFocus(102)</visible>
<animation effect='zoom' start='0,100' center='720,0' reversible='true' time='160' condition='Control.HasFocus(102)'>Conditional</animation>
<animation effect='fade' start='0' reversible='true' time='100' condition='Control.HasFocus(102)'>Conditional</animation>
<control type='image'>
<texture colordiffuse='CC000000'>white.png</texture>
</control>
<control type='textbox'>
<description>Name</description>
<top>20</top>
<left>40</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(102).ListItem.Label][/B]</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='textbox'>
<description>Name</description>
<top>20</top>
<right>50</right>
<width>40</width>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(102).ListItem.Rating][/B]</label>
<align>right</align>
<aligny>center</aligny>
</control>
<control type='image'>
<description>Rating Circle</description>
<top>20</top>
<right>15</right>
<width>30</width>
<height>30</height>
<texture colordiffuse='$INFO[Container(102).ListItem.Property(color)]'>Circular/$INFO[Container(102).ListItem.Property(rating)].png</texture>
<aspectratio>scale</aspectratio>
</control>
<control type='textbox'>
<description>Plot</description>
<top>60</top>
<left>40</left>
<height>100</height>
<width>520</width>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[Container(102).ListItem.Plot]</label>
<autoscroll time='3000' delay='3000' repeat='3000'>True</autoscroll>
<align>left</align>
<aligny>center</aligny>
</control>
</control>
<control type='image'>
<description>Separator</description>
<top>240</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>ù
</control>
</control>
<!-- Trailers -->
<control type='group'>
<description>Trailers Group</description>
<visible>Integer.IsGreater(Container(103).NumItems, 0)</visible>
<height>241</height>
<visible></visible>
<control type='textbox'>
<description>Cast Title</description>
<left>10</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>Trailers</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='fixedlist' id='103'>
<description>Trailers List</description>
<top>30</top>
<onup>102</onup>
<ondown>104</ondown>
<height>200</height>
<orientation>horizontal</orientation>
<itemgap>10</itemgap>
<itemlayout width='340' height='200'>
<control type='image'>
<texture>$INFO[ListItem.Art(thumb)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout width='340' height='200'>
<control type='image'>
<texture colordiffuse='FF0082C2'>white.png</texture>
<bordersize>5</bordersize>
<aspectratio>scale</aspectratio>
<visible>Control.HasFocus(103)</visible>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(thumb)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
<control type='group'>
<top>30</top>
<left>340</left>
<height>200</height>
<visible>Control.HasFocus(103)</visible>
<animation effect='zoom' start='0,100' center='720,0' reversible='true' time='160' condition='Control.HasFocus(103)'>Conditional</animation>
<animation effect='fade' start='0' reversible='true' time='100' condition='Control.HasFocus(103)'>Conditional</animation>
<control type='image'>
<texture colordiffuse='CC000000'>white.png</texture>
</control>
<control type='textbox'>
<description>Name</description>
<top>20</top>
<left>40</left>
<height>160</height>
<width>320</width>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[Container(103).ListItem.Label][/B]</label>
<autoscroll time='1000' delay='1000' repeat='1000'>True</autoscroll>
<align>left</align>
<aligny>center</aligny>
</control>
</control>
<control type='image'>
<description>Separator</description>
<top>240</top>
<left>0</left>
<height>0.5</height>
<texture>white.png</texture>
</control>
</control>
<!-- Fanart Group -->
<control type='group'>
<description>Fanart Group</description>
<visible>Integer.IsGreater(Container(104).NumItems, 0)</visible>
<height>241</height>
<visible></visible>
<control type='textbox'>
<description>Cast Title</description>
<left>10</left>
<height>30</height>
<font>font13</font>
<textcolor>ffFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>FANARTS</label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type='fixedlist' id='104'>
<description>Fanart List</description>
<top>30</top>
<onup>103</onup>
<height>200</height>
<orientation>horizontal</orientation>
<itemgap>10</itemgap>
<itemlayout width='340' height='200'>
<control type='image'>
<texture>$INFO[ListItem.Art(fanart)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</itemlayout>
<focusedlayout width='340' height='200'>
<control type='image'>
<texture colordiffuse='FF0082C2'>white.png</texture>
<bordersize>5</bordersize>
<aspectratio>scale</aspectratio>
<visible>Control.HasFocus(104)</visible>
</control>
<control type='image'>
<texture>$INFO[ListItem.Art(fanart)]</texture>
<bordersize>10</bordersize>
<aspectratio>scale</aspectratio>
</control>
</focusedlayout>
</control>
</control>
</control>
<!-- BACKGROUND --> <control type='grouplist'>
<control type="image" id='30000'> <ondown>100</ondown>
<width>1280</width> <top>30</top>
<height>720</height> <right>30</right>
<texture colordiffuse="FF555555"></texture> <height>40</height>
</control> <width>120</width>
<!-- <itemgap>10</itemgap> -->
<orientation>horizontal</orientation>
<control type="button" id="200">
<description>search</description>
<height>40</height>
<width>40</width>
<texturefocus colordiffuse="FFFFFFFF">search.png</texturefocus>
<texturenofocus colordiffuse="80FFFFFF">search.png</texturenofocus>
</control>
<!-- LOADING --> <control type="button" id="201">
<control type="image" id='30011'> <description>Back</description>
<top>355</top> <height>40</height>
<left>490</left> <width>40</width>
<width>300</width> <texturefocus colordiffuse="FFFFFFFF">left.png</texturefocus>
<height>10</height> <texturenofocus colordiffuse="80FFFFFF">left.png</texturenofocus>
<texture>white.png</texture> </control>
<animation effect="zoom" pulse ="true" center="auto" start="0,100" end="100,100" time="1000" condition="Control.IsVisible(30011)">Conditional</animation>
</control>
<control type="grouplist"> <control type="button" id="202">
<top>75</top> <description>Close</description>
<orientation>vertical</orientation> <height>40</height>
<defaultcontrol>30500</defaultcontrol> <width>40</width>
<width>1280</width> <texturefocus colordiffuse="FFFFFFFF">close.png</texturefocus>
<height>570</height> <texturenofocus colordiffuse="80FFFFFF">close.png</texturenofocus>
<onup>30007</onup> </control>
<scrolltime tween="cubic" easing="out">300</scrolltime> </control>
</controls>
<!-- RECOMMENDATIONS -->
<control type="wraplist" id="30500">
<width>100%</width>
<height>570</height>
<viewtype>wrap</viewtype>
<orientation>horizontal</orientation>
<scrolltime tween="cubic" easing="out">300</scrolltime>
<itemlayout height="570" width="180">
<!-- Poster -->
<control type="image">
<top>300</top>
<left>0</left>
<width>180</width>
<height>270</height>
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
</itemlayout>
<focusedlayout height="570" width="380">
<!-- Title -->
<control type="textbox">
<left>400</left>
<top>10</top>
<width>840</width>
<height>30</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Label] [COLOR FFAAAAAA] $INFO[ListItem.Property(year)][/COLOR][/B] </label>
<align>left</align>
<aligny>center</aligny>
</control>
<!-- Plot -->
<control type="textbox">
<left>400</left>
<top>70</top>
<width>840</width>
<height>190</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[ListItem.Property(plot)]</label>
<autoscroll time="3000" delay="3000" repeat="3000">True</autoscroll>
<align>left</align>
</control>
<!-- Poster -->
<control type="image">
<top>0</top>
<left>0</left>
<width>380</width>
<height>570</height>
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
</focusedlayout>
</control>
<!-- Actors -->
<control type="wraplist" id="30501">
<width>1280</width>
<height>570</height>
<viewtype>wrap</viewtype>
<orientation>horizontal</orientation>
<scrolltime tween="cubic" easing="out">300</scrolltime>
<itemlayout height="570" width="180">
<!-- Poster -->
<control type="image">
<top>300</top>
<left>0</left>
<width>180</width>
<height>270</height>
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
</itemlayout>
<focusedlayout height="570" width="380">
<!-- Title -->
<control type="textbox">
<left>400</left>
<top>10</top>
<width>840</width>
<height>30</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Property(title)][/B] </label>
<align>left</align>
<aligny>center</aligny>
</control>
<!-- Tagline -->
<control type="textbox">
<left>400</left>
<top>50</top>
<width>840</width>
<height>30</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Property(job)][/B]</label>
<align>left</align>
</control>
<!-- Plot -->
<control type="textbox">
<left>400</left>
<top>90</top>
<width>830</width>
<height>180</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[ListItem.Property(bio)]</label>
<autoscroll delay="3000" time="2000" repeat="3000"></autoscroll>
<align>left</align>
</control>
<!-- Poster -->
<control type="image">
<top>0</top>
<left>0</left>
<width>380</width>
<height>570</height>
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
</focusedlayout>
</control>
<!-- CAST -->
<control type="wraplist" id="30502">
<width>1280</width>
<height>570</height>
<viewtype>wrap</viewtype>
<orientation>horizontal</orientation>
<scrolltime tween="cubic" easing="out">300</scrolltime>
<itemlayout height="570" width="180">
<!-- Background -->
<control type="image">
<top>300</top>
<left>0</left>
<width>180</width>
<height>270</height>
<texture colordiffuse="FF232323">white.png</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
<!-- Poster -->
<control type="image">
<top>300</top>
<left>0</left>
<width>180</width>
<height>270</height>
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
<!-- DEPARTMENT -->
<control type="textbox">
<visible>String.IsEmpty(ListItem.Property(thumbnail))</visible>
<left>10</left>
<top>300</top>
<width>160</width>
<height>270</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<label>[B]$INFO[ListItem.Property(department)][/B]</label>
<autoscroll delay="3000" time="2000" repeat="3000"></autoscroll>
<align>center</align>
<aligny>center</aligny>
</control>
</itemlayout>
<focusedlayout height="570" width="380">
<!-- Title -->
<control type="textbox">
<left>400</left>
<top>10</top>
<width>840</width>
<height>30</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Property(title)][/B] </label>
<align>left</align>
<aligny>center</aligny>
</control>
<!-- Tagline -->
<control type="textbox">
<left>400</left>
<top>50</top>
<width>840</width>
<height>30</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>[B]$INFO[ListItem.Property(job)][/B]</label>
<align>left</align>
</control>
<!-- Plot -->
<control type="textbox">
<left>400</left>
<top>90</top>
<width>830</width>
<height>180</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<label>$INFO[ListItem.Property(bio)]</label>
<autoscroll delay="3000" time="2000" repeat="3000"></autoscroll>
<align>left</align>
</control>
<!-- Background -->
<control type="image">
<top>0</top>
<left>0</left>
<width>380</width>
<height>570</height>
<texture colordiffuse="FF232323">white.png</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
<!-- Poster -->
<control type="image">
<top>0</top>
<left>0</left>
<width>380</width>
<height>570</height>
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
<aspectratio>scale</aspectratio>
<bordersize>10</bordersize>
</control>
<!-- Department -->
<control type="textbox">
<visible>String.IsEmpty(ListItem.Property(thumbnail))</visible>
<left>0</left>
<top>0</top>
<width>380</width>
<height>570</height>
<font>font13</font>
<textcolor>FFFFFFFF</textcolor>
<label>$INFO[ListItem.Property(department)]</label>
<autoscroll delay="3000" time="2000" repeat="3000"></autoscroll>
<align>center</align>
<aligny>center</aligny>
</control>
</focusedlayout>
</control>
</control>
<control type="group">
<top>25</top>
<right>25</right>
<height>50</height>
<width>300</width>
<visible allowhiddenfocus="true">Control.HasFocus(30500) | Control.HasFocus(30006) | Control.HasFocus(30007) | Control.HasFocus(30008) | Control.HasFocus(30013)</visible>
<control type="image">
<width>50</width>
<height>50</height>
<texture >Infoplus/tmdb.png</texture>
</control>
<control type="textbox" id="30006">
<top>0</top>
<left>60</left>
<width>40</width>
<height>50</height>
<textcolor>FFFFFFFF</textcolor>
<shadowcolor>00000000</shadowcolor>
<font>font13</font>
<label></label>
<align>left</align>
<aligny>center</aligny>
</control>
<control type="button" id="30007">
<left>120</left>
<width>50</width>
<height>50</height>
<texturenofocus colordiffuse="AAFFFFFF">Infoplus/trailer.png</texturenofocus>
<texturefocus colordiffuse="FFFFFFFF">Infoplus/trailer.png</texturefocus>
<ondown>30500</ondown>
<onleft>30008</onleft>
<onright>30013</onright>
</control>
<control type="button" id="30013">
<left>180</left>
<width>50</width>
<height>50</height>
<texturenofocus colordiffuse="AAFFFFFF">Infoplus/fanart.png</texturenofocus>
<texturefocus colordiffuse="FFFFFFFF">Infoplus/fanart.png</texturefocus>
<ondown>30500</ondown>
<onleft>30007</onleft>
<onright>30008</onright>
</control>
<control type="button" id="30008">
<left>240</left>
<width>50</width>
<height>50</height>
<texturenofocus colordiffuse="AAFFFFFF">Infoplus/search.png</texturenofocus>
<texturefocus colordiffuse="FFFFFFFF">Infoplus/search.png</texturefocus>
<ondown>30500</ondown>
<onleft>30013</onleft>
<onright>30007</onright>
</control>
</control>
</control> <!-- GROUP CONTROLS END -->
</controls>
</window> </window>
Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Some files were not shown because too many files have changed in this diff Show More