Merge remote-tracking branch 'origin/master' into master
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
"active": true,
|
||||
"thumbnail": "cinemalibero.png",
|
||||
"banner": "cinemalibero.png",
|
||||
"categories": ["movie","tvshow"],
|
||||
"categories": ["movie","tvshow","anime"],
|
||||
"not_active": ["include_in_newest_anime", "include_in_newest_peliculas"],
|
||||
"settings": []
|
||||
}
|
||||
|
||||
@@ -4,332 +4,52 @@ import xbmcgui
|
||||
|
||||
from core.tmdb import Tmdb
|
||||
from platformcode import config, logger
|
||||
from core import filetools
|
||||
|
||||
ID_BUTTON_CLOSE = 10003
|
||||
ID_BUTTON_PREVIOUS = 10025
|
||||
ID_BUTTON_NEXT = 10026
|
||||
ID_BUTTON_CANCEL = 10027
|
||||
ID_BUTTON_OK = 10028
|
||||
BACKGROUND = 30000
|
||||
LOADING = 30001
|
||||
SELECT = 30002
|
||||
|
||||
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
|
||||
|
||||
class InfoWindow(xbmcgui.WindowXMLDialog):
|
||||
otmdb = None
|
||||
|
||||
item_title = ""
|
||||
item_serie = ""
|
||||
item_temporada = 0
|
||||
item_episodio = 0
|
||||
result = {}
|
||||
|
||||
# PARA TMDB
|
||||
@staticmethod
|
||||
def get_language(lng):
|
||||
# Cambiamos el formato del Idioma
|
||||
languages = {
|
||||
'aa': 'Afar', 'ab': 'Abkhazian', 'af': 'Afrikaans', 'ak': 'Akan', 'sq': 'Albanian', 'am': 'Amharic',
|
||||
'ar': 'Arabic', 'an': 'Aragonese', 'as': 'Assamese', 'av': 'Avaric', 'ae': 'Avestan', 'ay': 'Aymara',
|
||||
'az': 'Azerbaijani', 'ba': 'Bashkir', 'bm': 'Bambara', 'eu': 'Basque', 'be': 'Belarusian', 'bn': 'Bengali',
|
||||
'bh': 'Bihari languages', 'bi': 'Bislama', 'bo': 'Tibetan', 'bs': 'Bosnian', 'br': 'Breton',
|
||||
'bg': 'Bulgarian', 'my': 'Burmese', 'ca': 'Catalan; Valencian', 'cs': 'Czech', 'ch': 'Chamorro',
|
||||
'ce': 'Chechen', 'zh': 'Chinese',
|
||||
'cu': 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic', 'cv': 'Chuvash',
|
||||
'kw': 'Cornish', 'co': 'Corsican', 'cr': 'Cree', 'cy': 'Welsh', 'da': 'Danish', 'de': 'German',
|
||||
'dv': 'Divehi; Dhivehi; Maldivian', 'nl': 'Dutch; Flemish', 'dz': 'Dzongkha', 'en': 'English',
|
||||
'eo': 'Esperanto', 'et': 'Estonian', 'ee': 'Ewe', 'fo': 'Faroese', 'fa': 'Persian', 'fj': 'Fijian',
|
||||
'fi': 'Finnish', 'fr': 'French', 'fy': 'Western Frisian', 'ff': 'Fulah', 'Ga': 'Georgian',
|
||||
'gd': 'Gaelic; Scottish Gaelic', 'ga': 'Irish', 'gl': 'Galician', 'gv': 'Manx',
|
||||
'el': 'Greek, Modern (1453-)', 'gn': 'Guarani', 'gu': 'Gujarati', 'ht': 'Haitian; Haitian Creole',
|
||||
'ha': 'Hausa', 'he': 'Hebrew', 'hz': 'Herero', 'hi': 'Hindi', 'ho': 'Hiri Motu', 'hr': 'Croatian',
|
||||
'hu': 'Hungarian', 'hy': 'Armenian', 'ig': 'Igbo', 'is': 'Icelandic', 'io': 'Ido',
|
||||
'ii': 'Sichuan Yi; Nuosu', 'iu': 'Inuktitut', 'ie': 'Interlingue; Occidental',
|
||||
'ia': 'Interlingua (International Auxiliary Language Association)', 'id': 'Indonesian', 'ik': 'Inupiaq',
|
||||
'it': 'Italian', 'jv': 'Javanese', 'ja': 'Japanese', 'kl': 'Kalaallisut; Greenlandic', 'kn': 'Kannada',
|
||||
'ks': 'Kashmiri', 'ka': 'Georgian', 'kr': 'Kanuri', 'kk': 'Kazakh', 'km': 'Central Khmer',
|
||||
'ki': 'Kikuyu; Gikuyu', 'rw': 'Kinyarwanda', 'ky': 'Kirghiz; Kyrgyz', 'kv': 'Komi', 'kg': 'Kongo',
|
||||
'ko': 'Korean', 'kj': 'Kuanyama; Kwanyama', 'ku': 'Kurdish', 'lo': 'Lao', 'la': 'Latin', 'lv': 'Latvian',
|
||||
'li': 'Limburgan; Limburger; Limburgish', 'ln': 'Lingala', 'lt': 'Lithuanian',
|
||||
'lb': 'Luxembourgish; Letzeburgesch', 'lu': 'Luba-Katanga', 'lg': 'Ganda', 'mk': 'Macedonian',
|
||||
'mh': 'Marshallese', 'ml': 'Malayalam', 'mi': 'Maori', 'mr': 'Marathi', 'ms': 'Malay', 'Mi': 'Micmac',
|
||||
'mg': 'Malagasy', 'mt': 'Maltese', 'mn': 'Mongolian', 'na': 'Nauru', 'nv': 'Navajo; Navaho',
|
||||
'nr': 'Ndebele, South; South Ndebele', 'nd': 'Ndebele, North; North Ndebele', 'ng': 'Ndonga',
|
||||
'ne': 'Nepali', 'nn': 'Norwegian Nynorsk; Nynorsk, Norwegian', 'nb': 'Bokmål, Norwegian; Norwegian Bokmål',
|
||||
'no': 'Norwegian', 'oc': 'Occitan (post 1500)', 'oj': 'Ojibwa', 'or': 'Oriya', 'om': 'Oromo',
|
||||
'os': 'Ossetian; Ossetic', 'pa': 'Panjabi; Punjabi', 'pi': 'Pali', 'pl': 'Polish', 'pt': 'Portuguese',
|
||||
'ps': 'Pushto; Pashto', 'qu': 'Quechua', 'ro': 'Romanian; Moldavian; Moldovan', 'rn': 'Rundi',
|
||||
'ru': 'Russian', 'sg': 'Sango', 'rm': 'Romansh', 'sa': 'Sanskrit', 'si': 'Sinhala; Sinhalese',
|
||||
'sk': 'Slovak', 'sl': 'Slovenian', 'se': 'Northern Sami', 'sm': 'Samoan', 'sn': 'Shona', 'sd': 'Sindhi',
|
||||
'so': 'Somali', 'st': 'Sotho, Southern', 'es': 'Spanish', 'sc': 'Sardinian', 'sr': 'Serbian', 'ss': 'Swati',
|
||||
'su': 'Sundanese', 'sw': 'Swahili', 'sv': 'Swedish', 'ty': 'Tahitian', 'ta': 'Tamil', 'tt': 'Tatar',
|
||||
'te': 'Telugu', 'tg': 'Tajik', 'tl': 'Tagalog', 'th': 'Thai', 'ti': 'Tigrinya',
|
||||
'to': 'Tonga (Tonga Islands)', 'tn': 'Tswana', 'ts': 'Tsonga', 'tk': 'Turkmen', 'tr': 'Turkish',
|
||||
'tw': 'Twi', 'ug': 'Uighur; Uyghur', 'uk': 'Ukrainian', 'ur': 'Urdu', 'uz': 'Uzbek', 've': 'Venda',
|
||||
'vi': 'Vietnamese', 'vo': 'Volapük', 'wa': 'Walloon', 'wo': 'Wolof', 'xh': 'Xhosa', 'yi': 'Yiddish',
|
||||
'yo': 'Yoruba', 'za': 'Zhuang; Chuang', 'zu': 'Zulu'}
|
||||
|
||||
return languages.get(lng, lng)
|
||||
|
||||
def get_scraper_data(self, data_in):
|
||||
self.otmdb = None
|
||||
# logger.debug(str(data_in))
|
||||
|
||||
if self.listData:
|
||||
# Data common to all listings
|
||||
infoLabels = self.scraper().get_infoLabels(origen=data_in)
|
||||
|
||||
if "original_language" in infoLabels:
|
||||
infoLabels["language"] = self.get_language(infoLabels["original_language"])
|
||||
infoLabels["puntuacion"] = "%s/10 (%s)" % (infoLabels.get("rating", "?"), infoLabels.get("votes", "N/A"))
|
||||
|
||||
self.result = infoLabels
|
||||
|
||||
def start(self, data, caption="Información del vídeo", item=None, scraper=Tmdb):
|
||||
"""
|
||||
It shows a window with the info of the video. Optionally, the title of the window can be indicated by means of the argument 'caption'.
|
||||
|
||||
If an item is passed as the 'data' argument use the Tmdb scrapper to find the video info
|
||||
In case of movies:
|
||||
Take the title from the following fields (in this order)
|
||||
1. contentTitle (this has priority 1)
|
||||
2. title (this has priority 2)
|
||||
The first one containing "something" interprets it as the title (it is important to make sure that the title is in
|
||||
your site)
|
||||
|
||||
In case of series:
|
||||
1. Find the season and episode in the contentSeason and contentEpisodeNumber fields
|
||||
2. Try to remove it from the video title (format: 1x01)
|
||||
|
||||
Here are two possible options:
|
||||
1. We have Season and episode
|
||||
Shows the information of the specific chapter
|
||||
2. We DO NOT have Season and episode
|
||||
In this case it shows the generic information of the series
|
||||
|
||||
If an InfoLabels object (see item.py) is passed as an argument 'data' it shows in the window directly
|
||||
the past information (without using the scrapper)
|
||||
Format:
|
||||
In case of movies:
|
||||
infoLabels ({
|
||||
"type" : "movie",
|
||||
"title": "Title of the movie",
|
||||
"original_title": "Original movie title",
|
||||
"date": "Release date",
|
||||
"language": "Original language of the movie",
|
||||
"rating": "Rating of the movie",
|
||||
"votes": "Number of votes",
|
||||
"genres": "Genres of the movie",
|
||||
"thumbnail": "Path for the thumbnail",
|
||||
"fanart": "Route for the fanart",
|
||||
"plot": "Synopsis of the movie"
|
||||
}
|
||||
In case of series:
|
||||
infoLabels ({
|
||||
"type" : "tv",
|
||||
"title": "Title of the series",
|
||||
"episode_title": "Episode title",
|
||||
"date": "Date of issue",
|
||||
"language": "Original language of the series",
|
||||
"rating": "Punctuation of the series",
|
||||
"votes": "Number of votes",
|
||||
"genres": "Genres of the series",
|
||||
"thumbnail": "Path for the thumbnail",
|
||||
"fanart": "Route for the fanart",
|
||||
"plot": "Synopsis of the episode or series",
|
||||
"seasons": "Number of Seasons",
|
||||
"season": "Season",
|
||||
"episodes": "Number of episodes of the season",
|
||||
"episode": "Episode"
|
||||
}
|
||||
If a list of InfoLabels () with the previous structure is passed as the 'data' argument, it shows the buttons
|
||||
'Previous' and 'Next' to scroll through the list. It also shows the 'Accept' and 'Cancel' buttons that
|
||||
call the function 'callback' of the channel from where the call is made, passing the element as parameters
|
||||
current (InfoLabels ()) or None respectively.
|
||||
|
||||
@param data: information to get scraper data.
|
||||
@type data: item, InfoLabels, list(InfoLabels)
|
||||
@param caption: window title.
|
||||
@type caption: str
|
||||
@param item: item for which the information window is to be displayed
|
||||
@type item: Item
|
||||
@param scraper: scraper that has the data of the movies or series to show in the window.
|
||||
@type scraper: Scraper
|
||||
"""
|
||||
|
||||
# We capture the parameters
|
||||
self.caption = caption
|
||||
def start(self, results, caption="", item=None, scraper=Tmdb):
|
||||
self.items = []
|
||||
self.response = None
|
||||
self.results = results
|
||||
self.item = item
|
||||
self.indexList = -1
|
||||
self.listData = None
|
||||
self.return_value = None
|
||||
self.scraper = scraper
|
||||
|
||||
logger.debug(data)
|
||||
if type(data) == list:
|
||||
self.listData = data
|
||||
self.indexList = 0
|
||||
data = self.listData[self.indexList]
|
||||
|
||||
self.get_scraper_data(data)
|
||||
|
||||
# Show window
|
||||
self.doModal()
|
||||
return self.return_value
|
||||
|
||||
def __init__(self, *args):
|
||||
self.caption = ""
|
||||
self.item = None
|
||||
self.listData = None
|
||||
self.indexList = 0
|
||||
self.return_value = None
|
||||
self.scraper = Tmdb
|
||||
logger.info('RESPONSE',self.response)
|
||||
return self.response
|
||||
|
||||
def onInit(self):
|
||||
#### Kodi 18 compatibility ####
|
||||
if config.get_platform(True)['num_version'] < 18:
|
||||
if xbmcgui.__version__ == "1.2":
|
||||
self.setCoordinateResolution(1)
|
||||
else:
|
||||
self.setCoordinateResolution(5)
|
||||
self.setCoordinateResolution(2)
|
||||
|
||||
# We put the title and the images
|
||||
self.getControl(10002).setLabel(self.caption)
|
||||
self.getControl(10004).setImage(self.result.get("fanart", ""))
|
||||
self.getControl(10005).setImage(self.result.get("thumbnail", "images/img_no_disponible.png"))
|
||||
for result in self.results:
|
||||
infoLabels = self.scraper().get_infoLabels(origen=result)
|
||||
it = xbmcgui.ListItem(infoLabels['title'])
|
||||
it.setProperty('fanart', infoLabels.get('fanart', ''))
|
||||
it.setProperty('thumbnail', infoLabels.get('thumbnail', imagepath('movie' if infoLabels['mediatype'] == 'movie' else 'tv')))
|
||||
it.setProperty('genre', infoLabels.get('genre', 'N/A'))
|
||||
it.setProperty('rating', str(infoLabels.get('rating', 'N/A')))
|
||||
it.setProperty('plot', str(infoLabels.get('plot', '')))
|
||||
it.setProperty('year', str(infoLabels.get('year', '')))
|
||||
self.items.append(it)
|
||||
|
||||
# We load the data for the movie format
|
||||
if self.result.get("mediatype", "movie") == "movie":
|
||||
self.getControl(10006).setLabel(config.get_localized_string(60377))
|
||||
self.getControl(10007).setLabel(self.result.get("title", "N/A"))
|
||||
self.getControl(10008).setLabel(config.get_localized_string(60378))
|
||||
self.getControl(10009).setLabel(self.result.get("originaltitle", "N/A"))
|
||||
self.getControl(100010).setLabel(config.get_localized_string(60379))
|
||||
self.getControl(100011).setLabel(self.result.get("language", "N/A"))
|
||||
self.getControl(100012).setLabel(config.get_localized_string(60380))
|
||||
self.getControl(100013).setLabel(self.result.get("puntuacion", "N/A"))
|
||||
self.getControl(100014).setLabel(config.get_localized_string(60381))
|
||||
self.getControl(100015).setLabel(self.result.get("release_date", "N/A"))
|
||||
self.getControl(100016).setLabel(config.get_localized_string(60382))
|
||||
self.getControl(100017).setLabel(self.result.get("genre", "N/A"))
|
||||
self.getControl(SELECT).addItems(self.items)
|
||||
self.getControl(BACKGROUND).setImage(self.items[0].getProperty('fanart'))
|
||||
self.getControl(LOADING).setVisible(False)
|
||||
self.setFocusId(SELECT)
|
||||
|
||||
# We load the data for the serial format
|
||||
else:
|
||||
self.getControl(10006).setLabel(config.get_localized_string(60383))
|
||||
self.getControl(10007).setLabel(self.result.get("title", "N/A"))
|
||||
self.getControl(10008).setLabel(config.get_localized_string(60379))
|
||||
self.getControl(10009).setLabel(self.result.get("language", "N/A"))
|
||||
self.getControl(100010).setLabel(config.get_localized_string(60380))
|
||||
self.getControl(100011).setLabel(self.result.get("puntuacion", "N/A"))
|
||||
self.getControl(100012).setLabel(config.get_localized_string(60382))
|
||||
self.getControl(100013).setLabel(self.result.get("genre", "N/A"))
|
||||
def onClick(self, control_id):
|
||||
if control_id == SELECT:
|
||||
self.response = self.results[self.getControl(SELECT).getSelectedPosition()]
|
||||
self.close()
|
||||
|
||||
if self.result.get("season"):
|
||||
self.getControl(100014).setLabel(config.get_localized_string(60384))
|
||||
self.getControl(100015).setLabel(self.result.get("temporada_nombre", "N/A"))
|
||||
self.getControl(100016).setLabel(config.get_localized_string(60385))
|
||||
self.getControl(100017).setLabel(self.result.get("season", "N/A") + " de " + self.result.get("seasons", "N/A"))
|
||||
if self.result.get("episode"):
|
||||
self.getControl(100014).setLabel(config.get_localized_string(60377))
|
||||
self.getControl(100015).setLabel(self.result.get("episode_title", "N/A"))
|
||||
self.getControl(100018).setLabel(config.get_localized_string(60386))
|
||||
self.getControl(100019).setLabel(self.result.get("episode", "N/A") + " de " + self.result.get("episodes", "N/A"))
|
||||
self.getControl(100020).setLabel(config.get_localized_string(60387))
|
||||
self.getControl(100021).setLabel(self.result.get("date", "N/A"))
|
||||
|
||||
# Synopsis
|
||||
if self.result['plot']:
|
||||
self.getControl(100022).setLabel(config.get_localized_string(60388))
|
||||
self.getControl(100023).setText(self.result.get("plot", "N/A"))
|
||||
else:
|
||||
self.getControl(100022).setLabel("")
|
||||
self.getControl(100023).setText("")
|
||||
|
||||
# We load the buttons if necessary
|
||||
self.getControl(10024).setVisible(self.indexList > -1) # Button group
|
||||
self.getControl(ID_BUTTON_PREVIOUS).setEnabled(self.indexList > 0) # Previous
|
||||
|
||||
if self.listData:
|
||||
m = len(self.listData)
|
||||
else:
|
||||
m = 1
|
||||
|
||||
self.getControl(ID_BUTTON_NEXT).setEnabled(self.indexList + 1 != m) # Following
|
||||
self.getControl(100029).setLabel("(%s/%s)" % (self.indexList + 1, m)) # x/m
|
||||
|
||||
# We put the focus in the Group of buttons, if "Previous" was deactivated the focus would go to the "Next" button
|
||||
# if "Next" tb is deactivated it will pass the focus to the "Cancel" button
|
||||
self.setFocus(self.getControl(10024))
|
||||
|
||||
return self.return_value
|
||||
|
||||
def onClick(self, _id):
|
||||
logger.info("onClick id=" + repr(_id))
|
||||
if _id == ID_BUTTON_PREVIOUS and self.indexList > 0:
|
||||
self.indexList -= 1
|
||||
self.get_scraper_data(self.listData[self.indexList])
|
||||
self.onInit()
|
||||
|
||||
elif _id == ID_BUTTON_NEXT and self.indexList < len(self.listData) - 1:
|
||||
self.indexList += 1
|
||||
self.get_scraper_data(self.listData[self.indexList])
|
||||
self.onInit()
|
||||
|
||||
elif _id == ID_BUTTON_OK or _id == ID_BUTTON_CLOSE or _id == ID_BUTTON_CANCEL:
|
||||
self.close()
|
||||
|
||||
if _id == ID_BUTTON_OK:
|
||||
self.return_value = self.listData[self.indexList]
|
||||
else:
|
||||
self.return_value = None
|
||||
|
||||
def onAction(self, action):
|
||||
logger.info("action=" + repr(action.getId()))
|
||||
action = action.getId()
|
||||
|
||||
# Find Focus
|
||||
focus = self.getFocusId()
|
||||
|
||||
# Left
|
||||
if action == 1:
|
||||
|
||||
if focus == ID_BUTTON_OK:
|
||||
self.setFocus(self.getControl(ID_BUTTON_CANCEL))
|
||||
|
||||
elif focus == ID_BUTTON_CANCEL:
|
||||
if self.indexList + 1 != len(self.listData):
|
||||
# Next
|
||||
self.setFocus(self.getControl(ID_BUTTON_NEXT))
|
||||
elif self.indexList > 0:
|
||||
# Previous
|
||||
self.setFocus(self.getControl(ID_BUTTON_PREVIOUS))
|
||||
|
||||
elif focus == ID_BUTTON_NEXT:
|
||||
if self.indexList > 0:
|
||||
# Next
|
||||
self.setFocus(self.getControl(ID_BUTTON_PREVIOUS))
|
||||
|
||||
# Right
|
||||
elif action == 2:
|
||||
|
||||
if focus == ID_BUTTON_PREVIOUS:
|
||||
if self.indexList + 1 != len(self.listData):
|
||||
# Next
|
||||
self.setFocus(self.getControl(ID_BUTTON_NEXT))
|
||||
else:
|
||||
# Cancel
|
||||
self.setFocus(self.getControl(ID_BUTTON_CANCEL))
|
||||
|
||||
elif focus == ID_BUTTON_NEXT:
|
||||
self.setFocus(self.getControl(ID_BUTTON_CANCEL))
|
||||
|
||||
elif focus == ID_BUTTON_CANCEL:
|
||||
self.setFocus(self.getControl(ID_BUTTON_OK))
|
||||
|
||||
# Up
|
||||
elif action == 3:
|
||||
self.setFocus(self.getControl(ID_BUTTON_CLOSE))
|
||||
|
||||
# Down
|
||||
elif action == 4:
|
||||
self.setFocus(self.getControl(ID_BUTTON_OK))
|
||||
# Press ESC or Back, simulate click on cancel button
|
||||
if action in [10, 92]:
|
||||
self.onClick(ID_BUTTON_CANCEL)
|
||||
|
||||
@@ -1,375 +1,124 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<window>
|
||||
<allowoverlays>false</allowoverlays>
|
||||
<animation type="WindowOpen" reversible="false">
|
||||
<effect type="slide" start="0,200" end="0,0" center="640,225" delay="160" tween="cubic" time="200" />
|
||||
<effect type="fade" delay="160" end="100" time="240" />
|
||||
</animation>
|
||||
<animation type="WindowClose" reversible="false">
|
||||
<effect type="slide" start="0,0" end="0,200" center="640,225" easing="in" tween="cubic" time="200" />
|
||||
<effect type="fade" start="100" end="0" time="240" />
|
||||
</animation>
|
||||
<controls>
|
||||
<control type="group" id="10001">
|
||||
<left>0</left>
|
||||
<top>0</top>
|
||||
<depth>0.52</depth>
|
||||
<coordinates>
|
||||
<left>0</left>
|
||||
<top>0</top>
|
||||
</coordinates>
|
||||
<controls>
|
||||
<!-- CLOSE BUTTON / BACKGROUND -->
|
||||
<control type="button">
|
||||
<left>0</left>
|
||||
<top>0</top>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texturefocus colordiffuse="FF232323">white.png</texturefocus>
|
||||
<texturenofocus colordiffuse="FF232323">white.png</texturenofocus>
|
||||
<animation effect="fade" time="200">WindowOpen</animation>
|
||||
<animation effect="fade" time="200">WindowClose</animation>
|
||||
<onclick>Action(close)</onclick>
|
||||
</control>
|
||||
<!-- GROUP CONTROLS -->
|
||||
<control type="group">
|
||||
<left>0</left>
|
||||
<top>0</top>
|
||||
<animation type="WindowOpen" reversible="false">
|
||||
<effect type="slide" start="0,100" end="0,0" delay="160" time="160" />
|
||||
<effect type="fade" delay="160" end="100" time="100" />
|
||||
</animation>
|
||||
<animation type="WindowClose" reversible="false">
|
||||
<effect type="slide" start="0,0" end="0,100" delay="160" time="160" />
|
||||
<effect type="fade" delay="160" start="100" end="0" time="100" />
|
||||
</animation>
|
||||
|
||||
<!-- BACKGROUND -->
|
||||
<control type="image" id='30000'>
|
||||
<width>1280</width>
|
||||
<height>720</height>
|
||||
<texture colordiffuse="FF555555"></texture>
|
||||
</control>
|
||||
|
||||
<!-- LOADING -->
|
||||
<control type="image" id='30001'>
|
||||
<top>355</top>
|
||||
<left>490</left>
|
||||
<width>300</width>
|
||||
<height>10</height>
|
||||
<texture>white.png</texture>
|
||||
<animation effect="zoom" pulse ="true" center="auto" start="0,100" end="100,100" time="1000" condition="Control.IsVisible(30001)">Conditional</animation>
|
||||
</control>
|
||||
|
||||
<!-- SELECTION -->
|
||||
<control type="fixedlist" id="30002">
|
||||
<top>40</top>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<control type="image">
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture colordiffuse="FF232323">white.png</texture>
|
||||
</control>
|
||||
<!-- FANART -->
|
||||
<control type="image" id="10004">
|
||||
<left>0</left>
|
||||
<top>0</top>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
<texture></texture>
|
||||
<colordiffuse>33FFFFFF</colordiffuse>
|
||||
</control>
|
||||
<!-- Header -->
|
||||
<control type="label" id="10002">
|
||||
<top>20</top>
|
||||
<left>0</left>
|
||||
<height>34</height>
|
||||
<width>100%</width>
|
||||
<font>font30_title</font>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<label>$ADDON[plugin.video.kod 70000]</label>
|
||||
</control>
|
||||
<!-- Close -->
|
||||
<control type="button" id="10003">
|
||||
<right>30</right>
|
||||
<top>25</top>
|
||||
<width>30</width>
|
||||
<height>30</height>
|
||||
<texturefocus colordiffuse="FFFFFFFF">close.png</texturefocus>
|
||||
<texturenofocus colordiffuse="55FFFFFF">close.png</texturenofocus>
|
||||
</control>
|
||||
<!-- LOCANDINA -->
|
||||
<control type="image" id="10005">
|
||||
<right>30</right>
|
||||
<top>110</top>
|
||||
<width>349</width>
|
||||
<height>500</height>
|
||||
<texture></texture>
|
||||
<aspectratio>keep</aspectratio>
|
||||
<animation type="WindowOpen" reversible="false">
|
||||
<effect type="slide" start="200,0" end="0,0" delay="300" tween="cubic" time="200" />
|
||||
<effect type="fade" delay="300" end="100" time="240" />
|
||||
</animation>
|
||||
<animation type="WindowClose" reversible="false">
|
||||
<effect type="slide" start="0,0" end="200,0" easing="in" tween="cubic" time="200" />
|
||||
<effect type="fade" start="100" end="0" time="240" />
|
||||
</animation>
|
||||
</control>
|
||||
<!-- Serie -->
|
||||
<control type="label" id="10006">
|
||||
<top>100</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="10007">
|
||||
<top>100</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="10008"> <!-- Lingua Originale -->
|
||||
<top>130</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="10009">
|
||||
<top>130</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100010"> <!-- Punteggio -->
|
||||
<top>160</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100011">
|
||||
<top>160</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100012"> <!-- Generi -->
|
||||
<top>190</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100013">
|
||||
<top>190</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100014">
|
||||
<top>220</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100015">
|
||||
<top>220</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100016">
|
||||
<top>250</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100017">
|
||||
<top>250</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100018">
|
||||
<top>280</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100019">
|
||||
<top>280</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100020">
|
||||
<top>310</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>200</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100021">
|
||||
<top>310</top>
|
||||
<left>250</left>
|
||||
<height>30</height>
|
||||
<width>365</width>
|
||||
<font>font13</font>
|
||||
<scrollsuffix> | </scrollsuffix>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="label" id="100022"> <!-- Trama -->
|
||||
<top>330</top>
|
||||
<left>60</left>
|
||||
<height>30</height>
|
||||
<width>505</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>left</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
<control type="textbox" id="100023">
|
||||
<top>330</top>
|
||||
<left>250</left>
|
||||
<height>250</height>
|
||||
<width>550</width>
|
||||
<font>font13</font>
|
||||
<textcolor>0xFFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<wrapmultiline>true</wrapmultiline>
|
||||
<autoscroll delay="2000" time="1500" repeat="2000">true</autoscroll>
|
||||
<align>justify</align>
|
||||
<aligny>top</aligny>
|
||||
<label></label>
|
||||
</control>
|
||||
|
||||
<control type="group" id="10024">
|
||||
<bottom>60</bottom>
|
||||
<left>40</left>
|
||||
<width>760</width>
|
||||
<height>30</height>
|
||||
|
||||
<control type="button" id="10025">
|
||||
<top>0</top>
|
||||
<height>640</height>
|
||||
<viewtype>wrap</viewtype>
|
||||
<orientation>horizontal</orientation>
|
||||
<scrolltime tween="cubic" easing="out">300</scrolltime>
|
||||
<itemlayout height="640" width="180">
|
||||
<!-- Poster -->
|
||||
<control type="image">
|
||||
<bottom>0</bottom>
|
||||
<left>0</left>
|
||||
<width>200</width>
|
||||
<height>50</height>
|
||||
<textwidth>110</textwidth>
|
||||
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<label>$ADDON[plugin.video.kod 70005]</label>
|
||||
<width>180</width>
|
||||
<height>270</height>
|
||||
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<bordersize>10</bordersize>
|
||||
</control>
|
||||
<control type="button" id="10026">
|
||||
<top>0</top>
|
||||
<left>210</left>
|
||||
<width>200</width>
|
||||
<height>50</height>
|
||||
<textwidth>110</textwidth>
|
||||
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<label>$ADDON[plugin.video.kod 70006]</label>
|
||||
</control>
|
||||
<control type="button" id="10027">
|
||||
<top>0</top>
|
||||
<left>420</left>
|
||||
<width>200</width>
|
||||
<height>50</height>
|
||||
<textwidth>110</textwidth>
|
||||
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<label>$ADDON[plugin.video.kod 70002]</label>
|
||||
</control>
|
||||
<control type="button" id="10028">
|
||||
<top>0</top>
|
||||
<left>640</left>
|
||||
<width>200</width>
|
||||
<height>50</height>
|
||||
<textwidth>110</textwidth>
|
||||
<texturefocus colordiffuse="FF0081C2">white.png</texturefocus>
|
||||
<texturenofocus colordiffuse="000081C2">white.png</texturenofocus>
|
||||
<align>center</align>
|
||||
<aligny>center</aligny>
|
||||
<label>$ADDON[plugin.video.kod 70007]</label>
|
||||
</control>
|
||||
<control type="label" id="100029">
|
||||
</itemlayout>
|
||||
<focusedlayout height="640" width="480">
|
||||
<!-- Title -->
|
||||
<control type="textbox">
|
||||
<left>500</left>
|
||||
<top>10</top>
|
||||
<left>1080</left>
|
||||
<width>730</width>
|
||||
<height>30</height>
|
||||
<font>font30_title</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>
|
||||
<!-- info -->
|
||||
<control type="textbox">
|
||||
<left>500</left>
|
||||
<top>50</top>
|
||||
<width>730</width>
|
||||
<height>30</height>
|
||||
<width>110</width>
|
||||
<font>font13</font>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>black</shadowcolor>
|
||||
<align>right</align>
|
||||
<aligny>center</aligny>
|
||||
<label></label>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>$ADDON[plugin.video.kod 60382] $INFO[ListItem.Property(genre)] | $ADDON[plugin.video.kod 60380] [B]$INFO[ListItem.Property(rating)][/B]</label>
|
||||
<align>left</align>
|
||||
</control>
|
||||
</control>
|
||||
<!-- Plot -->
|
||||
<control type="textbox">
|
||||
<left>500</left>
|
||||
<top>90</top>
|
||||
<width>730</width>
|
||||
<height>250</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">
|
||||
<bottom>0</bottom>
|
||||
<left>0</left>
|
||||
<width>480</width>
|
||||
<height>640</height>
|
||||
<texture>$INFO[ListItem.Property(thumbnail)]</texture>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<bordersize>10</bordersize>
|
||||
</control>
|
||||
</focusedlayout>
|
||||
</control>
|
||||
</controls>
|
||||
</control> <!-- GROUP CONTROLS END -->
|
||||
</controls>
|
||||
</window>
|
||||
|
||||
@@ -39,12 +39,12 @@
|
||||
</control>
|
||||
<!-- LOADING -->
|
||||
<control type="image" id='30011'>
|
||||
<top>310</top>
|
||||
<left>590</left>
|
||||
<width>100</width>
|
||||
<height>100</height>
|
||||
<texture>Infoplus/loading.png</texture>
|
||||
<animation effect="rotate" center="640,360" start="0" end="-360" time="5000" loop="true" condition="Control.IsVisible(30011)">Conditional</animation>
|
||||
<top>355</top>
|
||||
<left>490</left>
|
||||
<width>300</width>
|
||||
<height>10</height>
|
||||
<texture>white.png</texture>
|
||||
<animation effect="zoom" pulse ="true" center="auto" start="0,100" end="100,100" time="1000" condition="Control.IsVisible(30011)">Conditional</animation>
|
||||
</control>
|
||||
<!-- TITLE -->
|
||||
<control type="textbox" id='30001'>
|
||||
@@ -90,7 +90,7 @@
|
||||
<font>font30_title</font>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>[B]$INFO[ListItem.Label] [COLOR FFAAAAAA]($INFO[ListItem.Property(year)])[/COLOR][/B] </label>
|
||||
<label>[B]$INFO[ListItem.Label] [COLOR FFAAAAAA]$INFO[ListItem.Property(year)][/COLOR][/B] </label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
|
||||
@@ -39,12 +39,12 @@
|
||||
</control>
|
||||
<!-- LOADING -->
|
||||
<control type="image" id='30011'>
|
||||
<top>310</top>
|
||||
<left>590</left>
|
||||
<width>100</width>
|
||||
<height>100</height>
|
||||
<texture>Infoplus/loading.png</texture>
|
||||
<animation effect="rotate" center="640,360" start="0" end="-360" time="5000" loop="true" condition="Control.IsVisible(30011)">Conditional</animation>
|
||||
<top>355</top>
|
||||
<left>490</left>
|
||||
<width>300</width>
|
||||
<height>10</height>
|
||||
<texture>white.png</texture>
|
||||
<animation effect="zoom" pulse ="true" center="auto" start="0,100" end="100,100" time="1000" condition="Control.IsVisible(30011)">Conditional</animation>
|
||||
</control>
|
||||
<!-- TITLE -->
|
||||
<control type="textbox" id='30001'>
|
||||
|
||||
Reference in New Issue
Block a user