- Migliorie InfoPlus
- Fix Ricerca Globale - Inizio riscrittura Ricerca Alternativa
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
<summary lang="it">Kodi on Demand è un addon di Kodi per cercare e guardare contenuti sul web.</summary>
|
||||
<assets>
|
||||
<icon>resources/media/logo.png</icon>
|
||||
<fanart>resources/media/fanart.jpg</fanart>
|
||||
<fanart>resources/media/dark_background.jpg</fanart>
|
||||
<screenshot>resources/media/screenshot-1.png</screenshot>
|
||||
<screenshot>resources/media/screenshot-2.png</screenshot>
|
||||
<screenshot>resources/media/screenshot-3.png</screenshot>
|
||||
|
||||
@@ -890,11 +890,20 @@ def nextPage(itemlist, item, function_or_level=1, **kwargs):
|
||||
# create Item
|
||||
if next_page or page:
|
||||
itemlist.append(item.clone(action = inspect.stack()[function_or_level][3] if type(function_or_level) == int else function_or_level,
|
||||
title=typo(config.get_localized_string(30992), 'color kod bold'),
|
||||
title=typo(config.get_localized_string(90006), 'color kod bold'),
|
||||
nextPage=True,
|
||||
page=page if page else item.page + 1 if item.page else 2,
|
||||
prevthumb = item.thumbnail,
|
||||
thumbnail=thumb()))
|
||||
if total_pages:
|
||||
itemlist.append(item.clone(action='gotopage',
|
||||
real_action = inspect.stack()[function_or_level][3] if type(function_or_level) == int else function_or_level,
|
||||
title=typo(config.get_localized_string(90007), 'color kod bold'),
|
||||
nextPage=True,
|
||||
total_pages = total_pages,
|
||||
page=page if page else item.page + 1 if item.page else 2,
|
||||
prevthumb = item.thumbnail,
|
||||
thumbnail=thumb()))
|
||||
return itemlist
|
||||
|
||||
|
||||
@@ -957,7 +966,7 @@ def season_pagination(itemlist, item, seasons, function_level=1):
|
||||
itlist.append(
|
||||
Item(channel=item.channel,
|
||||
action=action,
|
||||
title=typo('Stagione Successiva [{}]'.format(seasons[item.nextSeason + 1]), 'bold'),
|
||||
title=typo(config.get_localized_string(90008), 'color kod bold'),
|
||||
allSeasons = seasons,
|
||||
nextSeason = item.nextSeason + 1,
|
||||
itemlist = True,
|
||||
@@ -967,7 +976,7 @@ def season_pagination(itemlist, item, seasons, function_level=1):
|
||||
Item(channel=item.channel,
|
||||
action='gotoseason',
|
||||
real_action=action,
|
||||
title=typo('Vai alla stagione…', 'bold'),
|
||||
title=typo(config.get_localized_string(90009), 'color kod bold'),
|
||||
allSeasons = seasons,
|
||||
nextSeason = item.nextSeason + 1,
|
||||
itemlist = True,
|
||||
@@ -1310,7 +1319,7 @@ def addQualityTag(item, itemlist, data, patron):
|
||||
def thumb(data=None, mode=None):
|
||||
'''
|
||||
data = str, item or itemlist
|
||||
mode = str, genre, live, quality
|
||||
mode = genre, live, quality
|
||||
'''
|
||||
|
||||
if mode == 'live':
|
||||
|
||||
@@ -3,31 +3,25 @@
|
||||
# infoplus window with item information
|
||||
# ------------------------------------------------------------
|
||||
|
||||
from typing import List
|
||||
import xbmc, xbmcgui, sys, requests, re
|
||||
from core import httptools, support, tmdb, filetools, channeltools, servertools, jsontools
|
||||
import xbmc, xbmcgui, sys
|
||||
from core import httptools, tmdb
|
||||
from core.item import Item
|
||||
from platformcode import config, platformtools, logger, xbmc_videolibrary
|
||||
from platformcode.logger import log
|
||||
from core.scrapertools import decodeHtmlentities, htmlclean
|
||||
from platformcode import config, platformtools, logger
|
||||
|
||||
from core.support import typo, dbg
|
||||
from core.support import match, typo, dbg
|
||||
|
||||
PY3 = False
|
||||
if sys.version_info[0] >= 3: PY3 = True
|
||||
if PY3: from concurrent import futures
|
||||
else: from concurrent_py2 import futures
|
||||
|
||||
info_list = []
|
||||
SearchWindows = []
|
||||
api = 'k_0tdb8a8y'
|
||||
|
||||
# Control ID
|
||||
LIST = 100
|
||||
CAST = 101
|
||||
RECOMANDED = 102
|
||||
TRAILERS = 103
|
||||
FANARTS = 104
|
||||
CAST = MOVIE = 101
|
||||
SET = SHOW = 102
|
||||
RECOMANDED = 103
|
||||
TRAILERS = 104
|
||||
FANARTS = 105
|
||||
|
||||
|
||||
|
||||
SEARCH = 200
|
||||
@@ -61,6 +55,7 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
self.trailers = []
|
||||
self.images = []
|
||||
self.fanarts = []
|
||||
self.collection = []
|
||||
if not self.item.focus: self.item.focus = {}
|
||||
platformtools.dialog_busy(True)
|
||||
if self.item:
|
||||
@@ -84,7 +79,7 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
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)
|
||||
|
||||
|
||||
info = ''
|
||||
if self.info.get('year'): info = str(self.info.get('year'))
|
||||
if self.info.get('duration'): info = '{}[B]•[/B]{}'.format(info, self.info.get('duration'))
|
||||
@@ -93,8 +88,6 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
|
||||
# Set infoLabels
|
||||
platformtools.set_infolabels(self.listitem, self.item)
|
||||
|
||||
|
||||
|
||||
# Add Cast Info
|
||||
for cast in self.info.get('castandrole',[]):
|
||||
@@ -104,6 +97,21 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
self.cast.append(castitem)
|
||||
self.cast.sort(key=lambda c: c.getProperty('order'))
|
||||
|
||||
if self.info.get('setid'):
|
||||
url = '{}/collection/{}?api_key={}&language={}'.format(tmdb.host, self.info.get('setid'), tmdb.api, tmdb.def_lang)
|
||||
parts = match(url).response.json['parts']
|
||||
for part in parts:
|
||||
poster = 'https://image.tmdb.org/t/p/original/' + part.get('poster_path') if part.get('poster_path') else ''
|
||||
setitem = xbmcgui.ListItem(part.get('title'), self.info.get('set'))
|
||||
setitem.setArt({'poster': poster})
|
||||
rating = part.get('vote_average', 'N/A')
|
||||
color = 'FFFFFFFF' if rating == 'N/A' else 'FFDB2360' if rating < 4 else 'FFD2D531' if rating < 7 else 'FF21D07A'
|
||||
|
||||
setitem.setProperties({'id':part.get('id'), 'mediatype':'movie', 'color':color})
|
||||
setitem.setInfo("video", {'plot':self.info.get('setoverview'), 'rating':rating})
|
||||
self.collection.append(setitem)
|
||||
|
||||
|
||||
directors = self.info.get('director')
|
||||
if directors:
|
||||
for i, director in enumerate(directors.split(',')):
|
||||
@@ -137,6 +145,9 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
self.getControl(TRAILERS).addItems(self.trailers)
|
||||
self.getControl(FANARTS).addItems(self.fanarts)
|
||||
|
||||
if self.collection:
|
||||
self.getControl(SET).addItems(self.collection)
|
||||
|
||||
# Set Focus
|
||||
if self.item.focus:
|
||||
for k, v in self.item.focus.items():
|
||||
@@ -149,13 +160,26 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
def onAction(self, action):
|
||||
action = action.getId()
|
||||
focus = self.getFocusId()
|
||||
infoList = [LIST, CAST, SET, RECOMANDED, TRAILERS, FANARTS]
|
||||
actionList = [SEARCH, BACK, CLOSE]
|
||||
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 and focus not in [SEARCH, BACK, CLOSE]:
|
||||
elif action in [UP, DOWN]:
|
||||
A = 1 if action == DOWN else -1
|
||||
if focus not in infoList or focus in actionList:
|
||||
self.setFocusId(infoList[0])
|
||||
elif focus + A in infoList and not focus in actionList:
|
||||
while focus in infoList:
|
||||
focus += A
|
||||
if self.getControl(focus).isVisible():
|
||||
self.setFocusId(focus)
|
||||
break
|
||||
else:
|
||||
self.setFocusId(SEARCH)
|
||||
|
||||
if focus > 0 and focus not in actionList:
|
||||
self.item.setFocus = focus
|
||||
self.item.focus[focus] = self.getControl(focus).getSelectedPosition()
|
||||
|
||||
@@ -164,13 +188,23 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
global info_list
|
||||
|
||||
if control in [SEARCH]:
|
||||
from specials.globalsearch import new_search
|
||||
selection = 0
|
||||
original = self.item.infoLabels.get('originaltitle')
|
||||
|
||||
if self.item.contentType == 'episode':
|
||||
self.item.contentType = 'tvshow'
|
||||
self.item.text = self.item.contentSerieName
|
||||
self.item.mode = 'all'
|
||||
self.item.type = self.item.contentType
|
||||
new_search(self.item)
|
||||
else:
|
||||
self.item.text = self.item.contentTitle
|
||||
titles = [self.item.text] + [original] if original else []
|
||||
if original and original != self.item.text:
|
||||
selection = platformtools.dialog_select(config.get_localized_string(90010), titles)
|
||||
if selection > -1:
|
||||
self.item.text = titles[selection]
|
||||
self.item.mode = 'search_' + self.item.contentType
|
||||
item = self.item.clone(channel='globalsearch', action='new_search')
|
||||
xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + item.tourl() + ")")
|
||||
# new_search(self.item.clone())
|
||||
|
||||
elif control in [CLOSE]:
|
||||
self.close()
|
||||
@@ -185,9 +219,9 @@ class InfoPlus(xbmcgui.WindowXML):
|
||||
self.close()
|
||||
showCast(it)
|
||||
|
||||
elif control in [RECOMANDED]:
|
||||
elif control in [RECOMANDED, SET]:
|
||||
info_list.append(self.item)
|
||||
listitem = self.getControl(RECOMANDED).getSelectedItem()
|
||||
listitem = self.getControl(control).getSelectedItem()
|
||||
it = Item(title=listitem.getLabel(), infoLabels={'tmdb_id':listitem.getProperty('id'), 'mediatype':listitem.getProperty('mediatype')})
|
||||
self.close()
|
||||
start(it)
|
||||
@@ -255,8 +289,6 @@ class CastWindow(xbmcgui.WindowXML):
|
||||
self.item = kwargs.get('item')
|
||||
self.id = self.item.id
|
||||
self.item.InfoWindow = 'cast'
|
||||
self.host = tmdb.host
|
||||
self.api = tmdb.api
|
||||
self.movies = []
|
||||
self.tvshows = []
|
||||
self.movieItems = []
|
||||
@@ -271,8 +303,8 @@ class CastWindow(xbmcgui.WindowXML):
|
||||
|
||||
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)
|
||||
url = '{}/person/{}?api_key={}&language=en'.format(tmdb.host, self.id, tmdb.api)
|
||||
translation_url = '{}/person/{}/translations?api_key={}'.format(tmdb.host, self.id, tmdb.api)
|
||||
info = httptools.downloadpage(url).json
|
||||
|
||||
|
||||
@@ -295,8 +327,8 @@ class CastWindow(xbmcgui.WindowXML):
|
||||
|
||||
def onInit(self):
|
||||
self.getControl(LIST).addItem(self.castitem)
|
||||
self.getControl(CAST).addItems(self.movies)
|
||||
self.getControl(RECOMANDED).addItems(self.tvshows)
|
||||
self.getControl(MOVIE).addItems(self.movies)
|
||||
self.getControl(SHOW).addItems(self.tvshows)
|
||||
|
||||
# Set Focus
|
||||
xbmc.sleep(200)
|
||||
@@ -309,17 +341,29 @@ class CastWindow(xbmcgui.WindowXML):
|
||||
def onAction(self, action):
|
||||
action = action.getId()
|
||||
focus = self.getFocusId()
|
||||
infoList = [LIST, MOVIE, SHOW]
|
||||
actionList = [BACK, CLOSE]
|
||||
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:
|
||||
elif action in [UP, DOWN] and focus in infoList + actionList:
|
||||
A = 1 if action == DOWN else -1
|
||||
if focus not in infoList or focus in actionList:
|
||||
self.setFocusId(infoList[0])
|
||||
elif focus + A in infoList and not focus in actionList:
|
||||
while focus in infoList:
|
||||
focus += A
|
||||
if self.getControl(focus).isVisible():
|
||||
self.setFocusId(focus)
|
||||
break
|
||||
else:
|
||||
self.setFocusId(BACK)
|
||||
|
||||
if focus > 0 and focus not in actionList:
|
||||
self.item.setFocus = focus
|
||||
self.item.focus[focus] = self.getControl(focus).getSelectedPosition()
|
||||
|
||||
|
||||
def onClick(self, control):
|
||||
global info_list
|
||||
|
||||
@@ -329,20 +373,20 @@ class CastWindow(xbmcgui.WindowXML):
|
||||
elif control in [BACK]:
|
||||
back(self)
|
||||
|
||||
elif control in [CAST]:
|
||||
elif control in [MOVIE]:
|
||||
info_list.append(self.item)
|
||||
self.close()
|
||||
start(self.movieItems[self.getControl(CAST).getSelectedPosition()])
|
||||
start(self.movieItems[self.getControl(MOVIE).getSelectedPosition()])
|
||||
|
||||
elif control in [RECOMANDED]:
|
||||
elif control in [SHOW]:
|
||||
info_list.append(self.item)
|
||||
self.close()
|
||||
start(self.tvshowItems[self.getControl(RECOMANDED).getSelectedPosition()])
|
||||
start(self.tvshowItems[self.getControl(SHOW).getSelectedPosition()])
|
||||
|
||||
|
||||
def get_credits(self):
|
||||
# Function for Credits Info
|
||||
url = '{}/person/{}/combined_credits?api_key={}&language=it'.format(self.host, self.id, self.api)
|
||||
url = '{}/person/{}/combined_credits?api_key={}&language='.format(tmdb.host, self.id, tmdb.api, tmdb.def_lang)
|
||||
info = httptools.downloadpage(url).json
|
||||
|
||||
for video in info.get('cast',[]) + info.get('crew',[]):
|
||||
|
||||
@@ -151,6 +151,7 @@ def run(item=None):
|
||||
else:
|
||||
platformtools.dialog_ok(config.get_localized_string(20000), config.get_localized_string(70740) % "\n".join([item.url[j:j+57] for j in range(0, len(item.url), 57)]))
|
||||
elif item.action == "gotopage":
|
||||
# from core.support import dbg;dbg()
|
||||
from core import scrapertools
|
||||
head = config.get_localized_string(70511)
|
||||
scraped_page = scrapertools.find_single_match(item.url,'[=/]([0-9]+)')
|
||||
@@ -166,7 +167,8 @@ def run(item=None):
|
||||
item.page = page
|
||||
import re
|
||||
item.url = re.sub('([=/])[0-9]+(/?)$', '\g<1>{}\g<2>'.format(page), item.url)
|
||||
xbmc.executebuiltin("Container.Update(%s?%s)" % (sys.argv[0], item.tourl()))
|
||||
run(item)
|
||||
# xbmc.executebuiltin("Container.Update(%s?%s)" % (sys.argv[0], item.tourl()))
|
||||
elif item.action == "gotoseason":
|
||||
head = 'Seleziona la stagione'
|
||||
seasons = [str(s) for s in item.allSeasons]
|
||||
|
||||
@@ -6535,3 +6535,24 @@ msgstr "No options"
|
||||
msgctxt "#90005"
|
||||
msgid "Search on KOD"
|
||||
msgstr "Search with KOD"
|
||||
|
||||
|
||||
msgctxt "#90006"
|
||||
msgid "Next page >"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#90007"
|
||||
msgid "Go to page…"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#90008"
|
||||
msgid "Next Season >"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#90009"
|
||||
msgid "Go to season…"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#90010"
|
||||
msgid "What title do you want to search for?"
|
||||
msgstr ""
|
||||
@@ -6536,3 +6536,24 @@ msgstr "Nessuna opzione possibile"
|
||||
msgctxt "#90005"
|
||||
msgid "Search on KOD"
|
||||
msgstr "Cerca con KOD"
|
||||
|
||||
|
||||
msgctxt "#90006"
|
||||
msgid "Next page >"
|
||||
msgstr "Pagina successiva >"
|
||||
|
||||
msgctxt "#90007"
|
||||
msgid "Go to page…"
|
||||
msgstr "Vai a pagina…"
|
||||
|
||||
msgctxt "#90008"
|
||||
msgid "Next Season >"
|
||||
msgstr "Stagione successiva >"
|
||||
|
||||
msgctxt "#90009"
|
||||
msgid "Go to season…"
|
||||
msgstr "Vai alla stagione…"
|
||||
|
||||
msgctxt "#90010"
|
||||
msgid "What title do you want to search for?"
|
||||
msgstr "Quale titolo vuoi cercare?"
|
||||
BIN
resources/media/dark_background.jpg
Normal file
BIN
resources/media/dark_background.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 131 KiB |
@@ -97,8 +97,6 @@
|
||||
<orientation>horizontal</orientation>
|
||||
<itemlayout/>
|
||||
<focusedlayout/>
|
||||
<onup>201</onup>
|
||||
<ondown>101</ondown>
|
||||
</control>
|
||||
<control type='textbox'>
|
||||
<description>Birth</description>
|
||||
@@ -134,7 +132,7 @@
|
||||
<!-- Movie -->
|
||||
<control type='group'>
|
||||
<description>Movie Group</description>
|
||||
<!-- <visible>Integer.IsGreater(Container(102).NumItems, 0)</visible> -->
|
||||
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
|
||||
<height>241</height>
|
||||
<control type='textbox'>
|
||||
<description>Movie Title</description>
|
||||
@@ -143,15 +141,14 @@
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>Movie</label>
|
||||
<label>$ADDON[plugin.video.kod 30122]</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='fixedlist' id='101'>
|
||||
<description>Movie List</description>
|
||||
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
|
||||
<top>30</top>
|
||||
<onup>100</onup>
|
||||
<ondown>102</ondown>
|
||||
<height>200</height>
|
||||
<orientation>horizontal</orientation>
|
||||
<itemgap>10</itemgap>
|
||||
@@ -236,25 +233,16 @@
|
||||
<control type='textbox'>
|
||||
<description>Rating</description>
|
||||
<top>20</top>
|
||||
<right>50</right>
|
||||
<right>15</right>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<textcolor>Container(101).ListItem.Property(color)</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>
|
||||
@@ -267,7 +255,7 @@
|
||||
<!-- Show -->
|
||||
<control type='group'>
|
||||
<description>Show Group</description>
|
||||
<!-- <visible>Integer.IsGreater(Container(102).NumItems, 0)</visible> -->
|
||||
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
|
||||
<height>241</height>
|
||||
<control type='textbox'>
|
||||
<description>Show Title</description>
|
||||
@@ -276,14 +264,14 @@
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>Show</label>
|
||||
<label>$ADDON[plugin.video.kod 30123]</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='fixedlist' id='102'>
|
||||
<description>Show List</description>
|
||||
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
|
||||
<top>30</top>
|
||||
<onup>101</onup>
|
||||
<height>200</height>
|
||||
<orientation>horizontal</orientation>
|
||||
<itemgap>10</itemgap>
|
||||
@@ -368,36 +356,25 @@
|
||||
<control type='textbox'>
|
||||
<description>Rating</description>
|
||||
<top>20</top>
|
||||
<right>50</right>
|
||||
<right>15</right>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<textcolor>Container(102).ListItem.Property(color)</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">
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
<label>[B]ADDON[plugin.video.kod 70000][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.kod 70000][/B]</label>
|
||||
</control>
|
||||
<control type="button" id="102">
|
||||
<description>Close</description>
|
||||
|
||||
@@ -46,9 +46,10 @@
|
||||
<texture colordiffuse="FF555555">$INFO[Container(103).ListItem.Art(thumb)]</texture>
|
||||
<visible>Control.IsVisible(2) + !String.IsEmpty(Container(103).ListItem.Art(thumb))</visible>
|
||||
</control>
|
||||
|
||||
|
||||
<control type="textbox" id='100'>
|
||||
<description>Title</description>
|
||||
<visible>Control.IsVisible(500)</visible>
|
||||
<left>480</left>
|
||||
<top>270</top>
|
||||
<width>1000</width>
|
||||
@@ -56,7 +57,6 @@
|
||||
<font>font13</font>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<!-- <visible>Integer.IsGreater(Container(101).NumItems, 0)</visible> -->
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
<animation effect="slide" tween="linear" center="0" end="-450,-240" time="600" condition="Integer.IsGreater(Container(101).NumItems, 0)">Conditional</animation>
|
||||
@@ -674,21 +674,6 @@
|
||||
<animation effect="slide" tween="linear" center="auto" end="0,-890" time="600" condition="Integer.IsGreater(Container(102).NumItems, 0)">Conditional</animation>
|
||||
</control>
|
||||
|
||||
<control type="label" id="501">
|
||||
<description>Progress Count</description>
|
||||
<top>270</top>
|
||||
<left>450</left>
|
||||
<width>180</width>
|
||||
<height>30</height>
|
||||
<font>font13</font>
|
||||
<textcolor>FFFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<align>right</align>
|
||||
<aligny>center</aligny>
|
||||
<animation effect="slide" tween="linear" center="0" end="-450,-240" time="600" condition="Integer.IsGreater(Container(102).NumItems, 0)">Conditional</animation>
|
||||
<!-- <visible>Control.IsVisible(500)</visible> -->
|
||||
</control>
|
||||
|
||||
<control type="textbox">
|
||||
<description>No Results</description>
|
||||
<top>340</top>
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
<effect type="slide" start="0,0" end='-200,0' time="200" />
|
||||
</animation>
|
||||
</control>
|
||||
|
||||
<!-- Header Group -->
|
||||
<control type='group'>
|
||||
<top>30</top>
|
||||
@@ -246,8 +247,6 @@
|
||||
<orientation>horizontal</orientation>
|
||||
<itemlayout/>
|
||||
<focusedlayout/>
|
||||
<onup>200</onup>
|
||||
<ondown>101</ondown>
|
||||
</control>
|
||||
<control type='textbox'>
|
||||
<description>Cast Title</description>
|
||||
@@ -256,16 +255,14 @@
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>Cast</label>
|
||||
<label>$ADDON[plugin.video.kod 60501]</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='fixedlist' id='101'>
|
||||
<description>Cast List</description>
|
||||
<visible>Integer.IsGreater(Container(101).NumItems, 0)</visible>
|
||||
<top>30</top>
|
||||
<onup>100</onup>
|
||||
<ondown>102</ondown>
|
||||
<height>200</height>
|
||||
<orientation>horizontal</orientation>
|
||||
<itemgap>10</itemgap>
|
||||
<itemlayout width='133' height='200'>
|
||||
@@ -342,27 +339,26 @@
|
||||
<texture>white.png</texture>ù
|
||||
</control>
|
||||
</control>
|
||||
<!-- Recomended -->
|
||||
<!-- Collection -->
|
||||
<control type='group'>
|
||||
<description>Recomanded Group</description>
|
||||
<!-- <visible>Integer.IsGreater(Container(102).NumItems, 0)</visible> -->
|
||||
<description>Collection Group</description>
|
||||
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
|
||||
<height>241</height>
|
||||
<control type='textbox'>
|
||||
<description>Cast Title</description>
|
||||
<description>Collection Title</description>
|
||||
<left>10</left>
|
||||
<height>30</height>
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>Recomanded</label>
|
||||
<label>$INFO[Container(102).ListItem.Label2]</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='fixedlist' id='102'>
|
||||
<description>Recomanded List</description>
|
||||
<description>Collection List</description>
|
||||
<visible>Integer.IsGreater(Container(102).NumItems, 0)</visible>
|
||||
<top>30</top>
|
||||
<onup>101</onup>
|
||||
<ondown>103</ondown>
|
||||
<height>200</height>
|
||||
<orientation>horizontal</orientation>
|
||||
<itemgap>10</itemgap>
|
||||
@@ -434,15 +430,6 @@
|
||||
<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 aligny='center'>keep</aspectratio>
|
||||
</control> -->
|
||||
<control type='textbox'>
|
||||
<description>Plot</description>
|
||||
<top>60</top>
|
||||
@@ -466,10 +453,124 @@
|
||||
<texture>white.png</texture>
|
||||
</control>
|
||||
</control>
|
||||
<!-- Recomended -->
|
||||
<control type='group'>
|
||||
<description>Recomanded Group</description>
|
||||
<visible>Integer.IsGreater(Container(103).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>$ADDON[plugin.video.kod 70315]</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='fixedlist' id='103'>
|
||||
<description>Recomanded List</description>
|
||||
<visible>Integer.IsGreater(Container(103).NumItems, 0)</visible>
|
||||
<top>30</top>
|
||||
<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(103)</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(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>30</height>
|
||||
<width>450</width>
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>[B]$INFO[Container(103).ListItem.Label][/B]</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='label'>
|
||||
<description>Name</description>
|
||||
<top>20</top>
|
||||
<right>15</right>
|
||||
<width>40</width>
|
||||
<height>30</height>
|
||||
<font>font13</font>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>Container(103).ListItem.Property(color)</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>[B]$INFO[Container(103).ListItem.Rating][/B]</label>
|
||||
<align>right</align>
|
||||
<aligny>center</aligny>
|
||||
</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(103).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>
|
||||
<visible>Integer.IsGreater(Container(104).NumItems, 0)</visible>
|
||||
<height>241</height>
|
||||
<visible></visible>
|
||||
<control type='textbox'>
|
||||
@@ -483,11 +584,10 @@
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='fixedlist' id='103'>
|
||||
<control type='fixedlist' id='104'>
|
||||
<description>Trailers List</description>
|
||||
<visible>Integer.IsGreater(Container(104).NumItems, 0)</visible>
|
||||
<top>30</top>
|
||||
<onup>102</onup>
|
||||
<ondown>104</ondown>
|
||||
<height>200</height>
|
||||
<orientation>horizontal</orientation>
|
||||
<itemgap>10</itemgap>
|
||||
@@ -503,7 +603,7 @@
|
||||
<texture colordiffuse='FF0082C2'>white.png</texture>
|
||||
<bordersize>5</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<visible>Control.HasFocus(103)</visible>
|
||||
<visible>Control.HasFocus(104)</visible>
|
||||
</control>
|
||||
<control type='image'>
|
||||
<texture>$INFO[ListItem.Art(thumb)]</texture>
|
||||
@@ -516,9 +616,9 @@
|
||||
<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>
|
||||
<visible>Control.HasFocus(104)</visible>
|
||||
<animation effect='zoom' start='0,100' center='720,0' reversible='true' time='160' condition='Control.HasFocus(104)'>Conditional</animation>
|
||||
<animation effect='fade' start='0' reversible='true' time='100' condition='Control.HasFocus(104)'>Conditional</animation>
|
||||
<control type='image'>
|
||||
<texture colordiffuse='CC000000'>white.png</texture>
|
||||
</control>
|
||||
@@ -531,7 +631,7 @@
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>[B]$INFO[Container(103).ListItem.Label][/B]</label>
|
||||
<label>[B]$INFO[Container(104).ListItem.Label][/B]</label>
|
||||
<autoscroll time='1000' delay='1000' repeat='1000'>True</autoscroll>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
@@ -548,7 +648,7 @@
|
||||
<!-- Fanart Group -->
|
||||
<control type='group'>
|
||||
<description>Fanart Group</description>
|
||||
<visible>Integer.IsGreater(Container(104).NumItems, 0)</visible>
|
||||
<visible>Integer.IsGreater(Container(105).NumItems, 0)</visible>
|
||||
<height>241</height>
|
||||
<visible></visible>
|
||||
<control type='textbox'>
|
||||
@@ -558,14 +658,14 @@
|
||||
<font>font13</font>
|
||||
<textcolor>ffFFFFFF</textcolor>
|
||||
<shadowcolor>00000000</shadowcolor>
|
||||
<label>FANARTS</label>
|
||||
<label>Fanarts</label>
|
||||
<align>left</align>
|
||||
<aligny>center</aligny>
|
||||
</control>
|
||||
<control type='fixedlist' id='104'>
|
||||
<control type='fixedlist' id='105'>
|
||||
<description>Fanart List</description>
|
||||
<top>30</top>
|
||||
<onup>103</onup>
|
||||
<visible>Integer.IsGreater(Container(105).NumItems, 0)</visible>
|
||||
<top>30</top>>
|
||||
<height>200</height>
|
||||
<orientation>horizontal</orientation>
|
||||
<itemgap>10</itemgap>
|
||||
@@ -581,7 +681,7 @@
|
||||
<texture colordiffuse='FF0082C2'>white.png</texture>
|
||||
<bordersize>5</bordersize>
|
||||
<aspectratio>scale</aspectratio>
|
||||
<visible>Control.HasFocus(104)</visible>
|
||||
<visible>Control.HasFocus(105)</visible>
|
||||
</control>
|
||||
<control type='image'>
|
||||
<texture>$INFO[ListItem.Art(fanart)]</texture>
|
||||
@@ -591,15 +691,14 @@
|
||||
</focusedlayout>
|
||||
</control>
|
||||
</control>
|
||||
|
||||
</control>
|
||||
|
||||
<control type='grouplist'>
|
||||
<ondown>100</ondown>
|
||||
<top>30</top>
|
||||
<right>30</right>
|
||||
<height>40</height>
|
||||
<width>120</width>
|
||||
<!-- <itemgap>10</itemgap> -->
|
||||
<orientation>horizontal</orientation>
|
||||
<control type="button" id="200">
|
||||
<description>search</description>
|
||||
|
||||
@@ -90,7 +90,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
self.next = None
|
||||
self.previous = None
|
||||
self.FOCUS = False
|
||||
|
||||
self.mode = self.item.mode.split('_')[-1]
|
||||
|
||||
if not thActions and not self.searchActions:
|
||||
self.thActions = Thread(target=self.getActionsThread)
|
||||
@@ -129,7 +129,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
try:
|
||||
module = __import__('channels.%s' % channel, fromlist=["channels.%s" % channel])
|
||||
mainlist = getattr(module, 'mainlist')(Item(channel=channel, global_search=True))
|
||||
actions = [elem for elem in mainlist if elem.action == "search" and (self.item.mode in ['all', 'person'] or elem.contentType in [self.item.mode, 'undefined'])]
|
||||
actions = [elem for elem in mainlist if elem.action == "search" and (self.mode in ['all', 'person'] or elem.contentType in [self.mode, 'undefined'])]
|
||||
self.moduleDict[channel] = module
|
||||
self.searchActions.append(actions)
|
||||
except:
|
||||
@@ -157,20 +157,20 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
logger.debug()
|
||||
self.PROGRESS.setVisible(False)
|
||||
self.items = []
|
||||
if self.item.mode == 'filmography':
|
||||
if self.mode == 'filmography':
|
||||
tmdb_info = tmdb.discovery(self.item, dict_=self.item.discovery)
|
||||
results = tmdb_info.results.get('cast',[])
|
||||
else:
|
||||
tmdb_info = tmdb.Tmdb(searched_text=self.item.text, search_type=self.item.mode.replace('show', ''))
|
||||
tmdb_info = tmdb.Tmdb(searched_text=self.item.text, search_type=self.mode.replace('show', ''))
|
||||
results = tmdb_info.results
|
||||
|
||||
|
||||
def make(n, result):
|
||||
result = tmdb_info.get_infoLabels(result, origen=result)
|
||||
if self.item.mode == 'movie':
|
||||
if self.mode == 'movie':
|
||||
title = result['title']
|
||||
result['mode'] = 'movie'
|
||||
elif self.item.mode == 'tvshow':
|
||||
elif self.mode == 'tvshow':
|
||||
title = result['name']
|
||||
result['mode'] = 'tvshow'
|
||||
else:
|
||||
@@ -189,7 +189,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
text=title,
|
||||
infoLabels=result)
|
||||
|
||||
if self.item.mode == 'movie':
|
||||
if self.mode == 'movie':
|
||||
new_item.contentTitle = result['title']
|
||||
else:
|
||||
new_item.contentSerieName = result['name']
|
||||
@@ -284,7 +284,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
self.setFocusId(CLOSE)
|
||||
|
||||
def get_channels(self):
|
||||
logger.debug()
|
||||
logger.debug('MODE:', self.mode)
|
||||
channels_list = []
|
||||
all_channels = channelselector.filterchannels('all')
|
||||
|
||||
@@ -302,7 +302,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
n = list_cat.index('anime')
|
||||
list_cat[n] = 'tvshow'
|
||||
|
||||
if self.item.mode in ['all', 'person'] or self.item.mode in list_cat:
|
||||
if self.mode in ['all', 'person'] or self.mode in list_cat:
|
||||
if config.get_setting("include_in_global_search", channel) and ch_param.get("active", False):
|
||||
channels_list.append(channel)
|
||||
|
||||
@@ -374,7 +374,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
if not results[0].action or results[0].nextPage:
|
||||
results = []
|
||||
|
||||
if self.item.mode != 'all':
|
||||
if self.mode != 'all':
|
||||
for elem in results:
|
||||
if elem.infoLabels.get('tmdb_id') == self.item.infoLabels.get('tmdb_id'):
|
||||
elem.from_channel = elem.channel
|
||||
@@ -404,7 +404,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
dummy, valid, dummy = channel_search(self.item.text + " " + str(self.item.infoLabels['year']))
|
||||
|
||||
# some channels may use original title
|
||||
if self.item.mode != 'all' and not valid and self.item.infoLabels.get('originaltitle'):
|
||||
if self.mode != 'all' and not valid and self.item.infoLabels.get('originaltitle'):
|
||||
logger.debug('retring with original title on channel ')
|
||||
dummy, valid, dummy = channel_search(self.item.infoLabels.get('originaltitle'))
|
||||
except:
|
||||
@@ -509,13 +509,12 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
|
||||
if self.item.mode.split('_')[0] in ['all', 'search']:
|
||||
if 'search' in self.item.mode:
|
||||
self.item.mode = self.item.mode.split('_')[-1]
|
||||
self.item.text = scrapertools.title_unify(self.item.text)
|
||||
self.thread = Thread(target=self.search)
|
||||
self.thread.start()
|
||||
elif self.item.mode in ['movie', 'tvshow', 'filmography']:
|
||||
elif self.mode in ['movie', 'tvshow', 'filmography']:
|
||||
self.select()
|
||||
elif self.item.mode in ['person']:
|
||||
elif self.mode in ['person']:
|
||||
self.actors()
|
||||
|
||||
def Focus(self, focusid):
|
||||
@@ -612,7 +611,7 @@ class SearchWindow(xbmcgui.WindowXML):
|
||||
self.close()
|
||||
else:
|
||||
item = Item().fromurl(self.RESULTS.getSelectedItem().getProperty('item'))
|
||||
if self.item.mode == 'movie': item.contentTitle = self.RESULTS.getSelectedItem().getLabel()
|
||||
if self.mode == 'movie': item.contentTitle = self.RESULTS.getSelectedItem().getLabel()
|
||||
else: item.contentSerieName = self.RESULTS.getSelectedItem().getLabel()
|
||||
|
||||
new_search(item, self.moduleDict, self.searchActions)
|
||||
|
||||
@@ -6,8 +6,8 @@ from core import filetools, jsontools, trakt_tools
|
||||
from core import support, tmdb
|
||||
from core.tmdb import Tmdb
|
||||
from core.scrapertools import htmlclean, decodeHtmlentities
|
||||
from core.support import thumb, typo, match, dbg
|
||||
from platformcode import config, logger
|
||||
from core.support import nextPage, thumb, typo, match, dbg
|
||||
from platformcode import config, logger, platformtools
|
||||
|
||||
|
||||
langs = Item(tmdb=[tmdb.def_lang, 'de', 'fr', 'pt', 'it', 'es-MX', 'ca', 'en', 'es'],
|
||||
@@ -24,13 +24,8 @@ mal_key = 'MzE1MDQ2cGQ5N2llYTY4Z2xwbGVzZjFzbTY='
|
||||
|
||||
def mainlist(item):
|
||||
logger.debug()
|
||||
itemlist = [item.clone(title='TMDB', action='tmdb_menu'),
|
||||
item.clone(title='IMDB', action='imdb_menu')]
|
||||
# itemlist = [item.clone(title=config.get_localized_string(70021) % (config.get_localized_string(30122), 'TMDB'), action='tmdb_menu', args='movie'),
|
||||
# item.clone(title=config.get_localized_string(70021) % (config.get_localized_string(30123), 'TMDB'), action='tmdb_menu', args='tv'),
|
||||
# item.clone(title=config.get_localized_string(70021) % (config.get_localized_string(30122), 'IMDB'), action='imdb', args='movie', url='&title_type=feature,tv_movie'),
|
||||
# item.clone(title=config.get_localized_string(70021) % (config.get_localized_string(30123), 'IMDB'), action='imdb', args='tv', url='&title_type=tv_series,tv_special,mini_series')]
|
||||
support.thumb(itemlist)
|
||||
itemlist = [item.clone(title='TMDB', action='tmdbMenu', thumbnail=support.thumb('tmdb')),
|
||||
item.clone(title='IMDB', action='imdbMenu', thumbnail=support.thumb('imdb'))]
|
||||
itemlist += [item.clone(title=config.get_localized_string(70415), action='trakt', thumbnail=support.thumb('trakt')),
|
||||
item.clone(title=config.get_localized_string(70026), action='mal', thumbnail=support.thumb('mal')),
|
||||
item.clone(title=typo(config.get_localized_string(70027), 'bold'), action='configuracion', folder=False, thumbnail=support.thumb('setting'))]
|
||||
@@ -38,41 +33,43 @@ def mainlist(item):
|
||||
|
||||
|
||||
|
||||
def tmdb_menu(item):
|
||||
def tmdbMenu(item):
|
||||
if not item.args:
|
||||
return [item.clone(title=config.get_localized_string(70741) % config.get_localized_string(30122), args='movie'),
|
||||
item.clone(title=config.get_localized_string(70741) % config.get_localized_string(30123), args='tv')]
|
||||
return thumb([item.clone(title=config.get_localized_string(70741) % config.get_localized_string(30122), args='movie'),
|
||||
item.clone(title=config.get_localized_string(70741) % config.get_localized_string(30123), args='tv')])
|
||||
|
||||
item.contentType = item.args.replace('tv', 'tvshow')
|
||||
|
||||
itemlist = [item.clone(title=config.get_localized_string(70028), action='peliculas', args=item.args + '/popular'),
|
||||
item.clone(title=config.get_localized_string(70029), action='peliculas', args=item.args + '/top_rated'),
|
||||
item.clone(title=config.get_localized_string(50001), action='peliculas', args=item.args + '/now_playing' if item.args == 'movie' else '/on_the_air'),
|
||||
item.clone(title=config.get_localized_string(70032), action='indices_tmdb'),
|
||||
item.clone(title=config.get_localized_string(70042), action='indices_tmdb')]
|
||||
itemlist = [item.clone(title=config.get_localized_string(70028), action='tmdbResults', args=item.args + '/popular'),
|
||||
item.clone(title=config.get_localized_string(70029), action='tmdbResults', args=item.args + '/top_rated'),
|
||||
item.clone(title=config.get_localized_string(50001), action='tmdbResults', args=item.args + '/now_playing' if item.args == 'movie' else '/on_the_air'),
|
||||
item.clone(title=config.get_localized_string(70032), action='tmdbIndex', mode='genre'),
|
||||
item.clone(title=config.get_localized_string(70042), action='tmdbIndex', mode='year')]
|
||||
|
||||
if item.args == 'movie':
|
||||
itemlist.extend([item.clone(title=config.get_localized_string(70033), action='peliculas', args='person/popular'),
|
||||
item.clone(title=config.get_localized_string(70034), action='list_tmdb', args=item.args + '/upcoming')])
|
||||
itemlist.extend([item.clone(title=config.get_localized_string(70033), action='tmdbResults', args='person/popular'),
|
||||
item.clone(title=config.get_localized_string(70034), action='tmdbResults', args=item.args + '/upcoming')])
|
||||
|
||||
|
||||
itemlist.extend([item.clone(title=config.get_localized_string(70035) % config.get_localized_string(60244 if item.args == 'movie' else 60245).lower(), action='search_', search={'url': 'search/%s' % item.args, 'language': lang.tmdb, 'page': 1}),
|
||||
item.clone(title=config.get_localized_string(70036), action='search_', search={'url': 'search/person', 'language': lang.tmdb, 'page': 1})])
|
||||
itemlist.extend([item.clone(title=config.get_localized_string(70035) % config.get_localized_string(60244 if item.args == 'movie' else 60245).lower(), action='_search', search={'url': 'search/%s' % item.args, 'language': lang.tmdb, 'page': 1}),
|
||||
item.clone(title=config.get_localized_string(70036), action='_search', search={'url': 'search/person', 'language': lang.tmdb, 'page': 1})])
|
||||
|
||||
if item.args == 'movie': itemlist.append(item.clone(title=config.get_localized_string(70037), action='search_', search={'url': 'search/person', 'language': lang.tmdb, 'page': 1}, crew=True))
|
||||
if item.args == 'movie': itemlist.append(item.clone(title=config.get_localized_string(70037), action='_search', search={'url': 'search/person', 'language': lang.tmdb, 'page': 1}, crew=True))
|
||||
|
||||
itemlist.extend([item.clone(title=typo(config.get_localized_string(70038),'bold'), action='filter', ),
|
||||
item.clone(title=typo(config.get_localized_string(70039),'bold'), action='filter', )])
|
||||
|
||||
return thumb(itemlist)
|
||||
|
||||
def peliculas(item):
|
||||
|
||||
def tmdbResults(item):
|
||||
itemlist = []
|
||||
_search = {'url': item.args, 'language': lang.tmdb, 'page': item.page if item.page else 1}
|
||||
if not item.page: item.page = 1
|
||||
_search = item.search if item.search else {'url': item.args, 'language': lang.tmdb, 'page': item.page}
|
||||
obj = tmdb.discovery(item, _search)
|
||||
|
||||
for result in obj.results:
|
||||
if 'person' in item.args:
|
||||
if 'person' in _search['url']:
|
||||
it = item.clone(action='showCast', channel='infoplus', folder=False)
|
||||
it.id = result.get('id')
|
||||
else:
|
||||
@@ -81,4 +78,128 @@ def peliculas(item):
|
||||
for k in ['title', 'thumbnail', 'fanart']:
|
||||
it.__setattr__(k, it.infoLabels.get(k))
|
||||
itemlist.append(it)
|
||||
|
||||
if item.page < obj.total_pages:
|
||||
support.nextPage(itemlist, item, 'peliculas', page=item.page + 1, total_pages=obj.total_pages)
|
||||
return itemlist
|
||||
|
||||
def tmdbIndex(item):
|
||||
itemlist = []
|
||||
from datetime import datetime
|
||||
if item.mode == 'genre':
|
||||
url = '{}/{}/list?api_key={}&language={}'.format(tmdb.host, item.mode, tmdb.api, lang.tmdb)
|
||||
genres = match(url, cookies=False).response.json['genres']
|
||||
|
||||
date = datetime.now().strftime('%Y-%m-%d')
|
||||
sort_by = 'release_date.desc'
|
||||
param_year = 'release_date.lte'
|
||||
if item.contentType == 'tvshow':
|
||||
sort_by = 'first_air_date.desc'
|
||||
param_year = 'air_date.lte'
|
||||
for genre in genres:
|
||||
search = {'url': 'discover/{}'.format(item.args), 'with_genres': genre['id'], 'sort_by': sort_by, param_year: date,'language': lang.tmdb, 'page': 1}
|
||||
new_item = item.clone(title=genre['name'], action='tmdbResults', search=search, mode='')
|
||||
itemlist.append(new_item)
|
||||
|
||||
itemlist.sort(key=lambda item: item.title)
|
||||
thumb(itemlist, mode='genre')
|
||||
else:
|
||||
year = datetime.now().year + 3
|
||||
for i in range(year, 1899, -1):
|
||||
if item.contentType == 'tvshow':
|
||||
param_year = 'first_air_date_year'
|
||||
else:
|
||||
param_year = 'primary_release_year'
|
||||
search = {'url': 'discover/{}'.format(item.args), param_year: i, 'language': lang.tmdb, 'page': 1}
|
||||
itemlist.append(item.clone(title=str(i), action='tmdbResults', search=search))
|
||||
|
||||
return itemlist
|
||||
|
||||
def _search(item):
|
||||
text = platformtools.dialog_input(heading=item.title)
|
||||
if text:
|
||||
item.search['query'] = text
|
||||
return tmdbResults(item)
|
||||
|
||||
|
||||
|
||||
############################################################
|
||||
|
||||
def filter(item):
|
||||
logger.debug()
|
||||
|
||||
from datetime import datetime
|
||||
list_controls = []
|
||||
valores = {}
|
||||
|
||||
dict_values = None
|
||||
|
||||
list_controls.append({'id': 'years', 'label': config.get_localized_string(60232), 'enabled': True, 'type': 'list', 'default': -1, 'visible': True})
|
||||
list_controls[0]['lvalues'] = []
|
||||
valores['years'] = []
|
||||
year = datetime.now().year + 1
|
||||
for i in range(1900, year + 1):
|
||||
list_controls[0]['lvalues'].append(str(i))
|
||||
valores['years'].append(str(i))
|
||||
list_controls[0]['lvalues'].append(config.get_localized_string(70450))
|
||||
valores['years'].append('')
|
||||
|
||||
if config.get_localized_string(70038) in item.title:
|
||||
# Se utilizan los valores por defecto/guardados
|
||||
saved_values = config.get_setting("default_filter_" + item.args, item.channel)
|
||||
if saved_values:
|
||||
dict_values = saved_values
|
||||
# dbg()
|
||||
url = '{}/genre/{}/list?api_key={}&language={}'.format(tmdb.host, item.args, tmdb.api, lang.tmdb)
|
||||
# try:
|
||||
lista = support.match(url, cookies=False).response.json["genres"]
|
||||
if lista:
|
||||
list_controls.append({'id': 'labelgenre', 'enabled': True, 'type': 'label', 'default': None, 'label': config.get_localized_string(70451), 'visible': True})
|
||||
for l in lista:
|
||||
list_controls.append({'id': 'genre' + str(l["id"]), 'label': l["name"], 'enabled': True, 'type': 'bool', 'default': False, 'visible': True})
|
||||
# except:
|
||||
# pass
|
||||
|
||||
list_controls.append({'id': 'orden', 'label': config.get_localized_string(70455), 'enabled': True, 'type': 'list', 'default': -1, 'visible': True})
|
||||
orden = [config.get_localized_string(70456), config.get_localized_string(70457), config.get_localized_string(70458), config.get_localized_string(70459), config.get_localized_string(70460), config.get_localized_string(70461)]
|
||||
if item.args == "movie":
|
||||
orden.extend([config.get_localized_string(70462), config.get_localized_string(70463)])
|
||||
orden_tmdb = ['popularity.desc', 'popularity.asc', 'release_date.desc', 'release_date.asc', 'vote_average.desc', 'vote_average.asc', 'original_title.asc', 'original_title.desc']
|
||||
valores['orden'] = []
|
||||
list_controls[-1]['lvalues'] = []
|
||||
for i, tipo_orden in enumerate(orden):
|
||||
list_controls[-1]['lvalues'].insert(0, tipo_orden)
|
||||
valores['orden'].insert(0, orden_tmdb[i])
|
||||
|
||||
list_controls.append({'id': 'espacio', 'label': '', 'enabled': False, 'type': 'label', 'default': None, 'visible': True})
|
||||
list_controls.append({'id': 'save', 'label': config.get_localized_string(70464), 'enabled': True, 'type': 'bool', 'default': False, 'visible': True})
|
||||
else:
|
||||
list_controls.append({'id': 'keyword', 'label': config.get_localized_string(70465), 'enabled': True, 'type': 'text', 'default': '', 'visible': True})
|
||||
|
||||
item.valores = valores
|
||||
return platformtools.show_channel_settings(list_controls=list_controls, dict_values=dict_values, caption=config.get_localized_string(70320), item=item, callback='filtered')
|
||||
|
||||
def filtered(item, values):
|
||||
values_copy = values.copy()
|
||||
# Save the filter to be the one loaded by default
|
||||
if "save" in values and values["save"]:
|
||||
values_copy.pop("save")
|
||||
config.set_setting("default_filter_" + item.args, values_copy, item.channel)
|
||||
|
||||
year = item.valores["years"][values["years"]]
|
||||
if config.get_localized_string(70038) in item.title:
|
||||
orden = item.valores["orden"][values["orden"]]
|
||||
if item.args == "tv": orden = orden.replace('release_date', 'first_air_date')
|
||||
|
||||
genre_ids = []
|
||||
for v in values:
|
||||
if "genre" in v:
|
||||
if values[v]: genre_ids.append(v.replace('genre', ''))
|
||||
genre_ids = ",".join(genre_ids)
|
||||
|
||||
if config.get_localized_string(70465).lower() in item.title.lower(): item.search = {'url': 'search/%s' % item.args, 'year': year, 'query': values["keyword"], 'language': lang.tmdb, 'page': 1}
|
||||
elif item.args == "movie": item.search = {'url': 'discover/%s' % item.args, 'sort_by': orden, 'primary_release_year': year, 'with_genres': genre_ids, 'vote_count.gte': '10', 'language': lang.tmdb, 'page': 1}
|
||||
else: item.search = {'url': 'discover/%s' % item.args, 'sort_by': orden, 'first_air_date_year': year, 'with_genres': genre_ids, 'vote_count.gte': '10', 'language': lang.tmdb, 'page': 1}
|
||||
|
||||
item.action = "list_tmdb"
|
||||
return tmdbResults(item)
|
||||
Reference in New Issue
Block a user