Updated kodi settings on Lenovo
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
from pprint import pformat
|
||||
|
||||
import xbmcgui
|
||||
import xbmcplugin
|
||||
import json
|
||||
|
||||
from . import tvdb
|
||||
from .artwork import add_artworks
|
||||
from .tvdb import get_language
|
||||
from .utils import logger
|
||||
|
||||
SUPPORTED_REMOTE_IDS = {
|
||||
'IMDB': 'imdb',
|
||||
'TheMovieDB.com': 'tmdb',
|
||||
}
|
||||
|
||||
ARTWORK_URL_PREFIX = 'https://artworks.thetvdb.com'
|
||||
|
||||
|
||||
def search_series(title, settings, handle, year=None) -> None:
|
||||
# add the found shows to the list
|
||||
logger.debug(f'Searching for TV show "{title}", year="{year}"')
|
||||
|
||||
tvdb_client = tvdb.Client(settings)
|
||||
if year is None:
|
||||
search_results = tvdb_client.search(title, type="series", limit=10)
|
||||
else:
|
||||
search_results = tvdb_client.search(title, year=year, type="series", limit=10)
|
||||
if not search_results:
|
||||
logger.debug(f"No results found for '{title}' where year='{year}'. Falling back to search without year criteria.")
|
||||
search_results = tvdb_client.search(title, type="series", limit=10)
|
||||
|
||||
logger.debug(f'Search results {search_results}')
|
||||
|
||||
if not search_results:
|
||||
return
|
||||
|
||||
language = get_language(settings)
|
||||
items = []
|
||||
for show in search_results:
|
||||
show_name = None
|
||||
translations = show.get('translations') or {}
|
||||
if translations:
|
||||
show_name = translations.get(language)
|
||||
if not show_name:
|
||||
show_name = translations.get('eng')
|
||||
if not show_name:
|
||||
show_name = show['name']
|
||||
year = show.get('year')
|
||||
if year:
|
||||
show_name += f' ({year})'
|
||||
|
||||
liz = xbmcgui.ListItem(show_name, offscreen=True)
|
||||
url = str(show['tvdb_id'])
|
||||
is_folder = True
|
||||
items.append((url, liz, is_folder))
|
||||
|
||||
xbmcplugin.addDirectoryItems(
|
||||
handle,
|
||||
items,
|
||||
len(items)
|
||||
)
|
||||
|
||||
|
||||
def get_series_details(id, settings, handle):
|
||||
# get the details of the found series
|
||||
logger.debug(f'Find info of tvshow with id {id}')
|
||||
tvdb_client = tvdb.Client(settings)
|
||||
show = tvdb_client.get_series_details_api(id, settings)
|
||||
if not show:
|
||||
xbmcplugin.setResolvedUrl(
|
||||
handle, False, xbmcgui.ListItem(offscreen=True))
|
||||
return
|
||||
|
||||
showId = {'tvdb': str(show["id"])}
|
||||
for remoteId in show.get('remoteIds'):
|
||||
if remoteId.get('sourceName') == "IMDB":
|
||||
showId['imdb'] = remoteId.get('id')
|
||||
if remoteId.get('sourceName') == "TheMovieDB.com":
|
||||
showId['tmdb'] = remoteId.get('id')
|
||||
|
||||
details = {'title': show["name"],
|
||||
'tvshowtitle': show["name"],
|
||||
'plot': show["overview"],
|
||||
'plotoutline': show["overview"],
|
||||
'episodeguide': json.dumps(showId),
|
||||
'mediatype': 'tvshow',
|
||||
}
|
||||
name = show["name"]
|
||||
year_str = show.get("firstAired") or ''
|
||||
if year_str:
|
||||
year = int(year_str.split("-")[0])
|
||||
logger.debug(f"series year_str: {year_str}")
|
||||
details["premiered"] = year_str
|
||||
details['year'] = year
|
||||
name = f'{name} ({year})'
|
||||
studio = get_studio(show)
|
||||
if studio:
|
||||
details["studio"] = studio
|
||||
genres = get_genres(show)
|
||||
details["genre"] = genres
|
||||
country = show.get("originalCountry", None)
|
||||
if country:
|
||||
details["country"] = country
|
||||
status = show.get('status')
|
||||
if status:
|
||||
details['status'] = status['name']
|
||||
liz = xbmcgui.ListItem(name, offscreen=True)
|
||||
logger.debug(f"series details: {pformat(details)}")
|
||||
liz.setInfo('video', details)
|
||||
liz = set_cast(liz, show)
|
||||
unique_ids = get_unique_ids(show)
|
||||
liz.setUniqueIDs(unique_ids, 'tvdb')
|
||||
language = tvdb.get_language(settings)
|
||||
add_artworks(show, liz, language)
|
||||
xbmcplugin.setResolvedUrl(
|
||||
handle=handle,
|
||||
succeeded=True,
|
||||
listitem=liz)
|
||||
|
||||
|
||||
def set_cast(liz, show):
|
||||
cast = []
|
||||
characters = show.get('characters') or ()
|
||||
for char in characters:
|
||||
if char["peopleType"] == "Actor":
|
||||
data = {
|
||||
'name': char['personName'],
|
||||
'role': char['name'],
|
||||
}
|
||||
thumbnail = char.get('image') or char.get('personImgURL')
|
||||
if thumbnail:
|
||||
if not thumbnail.startswith(ARTWORK_URL_PREFIX):
|
||||
thumbnail = ARTWORK_URL_PREFIX + thumbnail
|
||||
data['thumbnail'] = thumbnail
|
||||
cast.append(data)
|
||||
liz.setCast(cast)
|
||||
return liz
|
||||
|
||||
|
||||
def get_genres(show):
|
||||
return [genre["name"] for genre in show.get("genres", ())]
|
||||
|
||||
|
||||
def get_studio(show):
|
||||
companies = show.get("companies", ())
|
||||
if not companies:
|
||||
return None
|
||||
studio = None
|
||||
if len(companies) == 1:
|
||||
return companies[0]['name']
|
||||
for company in companies:
|
||||
if company["primaryCompanyType"] == 1:
|
||||
studio = company["name"]
|
||||
return studio
|
||||
|
||||
|
||||
def get_tags(show):
|
||||
tags = []
|
||||
tag_options = show.get("tagOptions", ())
|
||||
if tag_options:
|
||||
for tag in tag_options:
|
||||
tags.append(tag["name"])
|
||||
return tags
|
||||
|
||||
|
||||
def get_unique_ids(show):
|
||||
unique_ids = {'tvdb': show['id']}
|
||||
remote_ids = show.get('remoteIds')
|
||||
if remote_ids:
|
||||
for remote_id_info in remote_ids:
|
||||
source_name = remote_id_info.get('sourceName')
|
||||
if source_name in SUPPORTED_REMOTE_IDS:
|
||||
unique_ids[SUPPORTED_REMOTE_IDS[source_name]] = remote_id_info['id']
|
||||
return unique_ids
|
||||
Reference in New Issue
Block a user