Files
addon/platformcode/xbmc_info_window.py
2021-01-14 16:39:05 +01:00

83 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
import xbmcgui, sys
from core.tmdb import Tmdb
from platformcode import config, logger
from core import filetools
if sys.version_info[0] >= 3:
from concurrent import futures
else:
from concurrent_py2 import futures
BACKGROUND = 30000
LOADING = 30001
SELECT = 30002
CLOSE = 30003
EXIT = 10
BACKSPACE = 92
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):
def start(self, results, caption="", item=None, scraper=Tmdb):
self.items = []
self.response = None
self.results = results
self.item = item
self.scraper = scraper
self.doModal()
logger.debug('RESPONSE',self.response)
return self.response
def make_items(self, i, result):
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', '')))
it.setProperty('position', str(i))
return it
def onInit(self):
if config.get_platform(True)['num_version'] < 18:
self.setCoordinateResolution(2)
results = []
with futures.ThreadPoolExecutor() as executor:
for i, result in enumerate(self.results):
if ('seriesName' in result and result['seriesName']) or ('name' in result and result['name']) or ('title' in result and result['title']):
results.append(executor.submit(self.make_items, i, result))
for res in futures.as_completed(results):
self.items.append(res.result())
self.items.sort(key=lambda it: int(it.getProperty('position')))
self.getControl(SELECT).addItems(self.items)
self.getControl(BACKGROUND).setImage(self.items[0].getProperty('fanart'))
self.getControl(LOADING).setVisible(False)
self.setFocusId(SELECT)
def onClick(self, control_id):
if control_id == SELECT:
self.response = self.results[int(self.getControl(SELECT).getSelectedItem().getProperty('position'))]
self.close()
elif control_id == CLOSE:
self.close()
def onAction(self, action):
if self.getFocusId() in [SELECT]:
fanart = self.getControl(self.getFocusId()).getSelectedItem().getProperty('fanart')
self.getControl(BACKGROUND).setImage(fanart)
if action in [BACKSPACE]:
self.close()
elif action in [EXIT]:
self.close()