def trakt_play_episode(id, season, episode): from resources.lib.Trakt import get_show, get_season, get_seasons, get_episode id = int(id) season = int(season) episode = int(episode) show = None preason = None prepisode = None dbid = xbmc.getInfoLabel('ListItem.DBID') try: dbid = int(dbid) except: dbid = None show = get_show(id) if 'name' in show: show_title = show['name'] elif 'title' in show: show_title = show['title'] if show: if show['first_aired']: year = show['first_aired'][:4] else: year = None trakt_ids = play_base.get_trakt_ids('trakt', id, show_title, 'show', year) preason = get_season(id, season) if preason: prepisode = get_episode(id, season, episode) elif not preason and season > 1900: seasons = get_seasons(id) for item in seasons: if item['first_aired'] != None: if int(item['first_aired'][:4]) == season: season_number = item['number'] preason = get_season(id, season_number) if not prepisode or not preason or not show: return tvmaze_play_episode(show_title, season, episode) show_info = meta_info.get_tvshow_metadata_trakt(show) season_info = meta_info.get_season_metadata_trakt(show_info, preason) episode_info = meta_info.get_episode_metadata_trakt(season_info, prepisode) title = show_info['name'] if show_info['poster'] != None and show_info['poster'] != '': show_poster = show_info['poster'] else: show_poster = '' if show_info['fanart'] != None and show_info['fanart'] != '': show_fanart = show_info['fanart'] else: show_fanart = '' items = [] play_plugin = meta_players.ADDON_SELECTOR.id players = meta_players.get_players('tvshows') players = [p for p in players if p.id == play_plugin] or players if not players: return xbmc.executebuiltin('Action(Info)') params = {} for lang in meta_players.get_needed_langs(players): if show['name'] is None: continue episode_parameters = get_trakt_episode_parameters(show, preason, prepisode) if episode_parameters is not None: params[lang] = episode_parameters else: if trakt_ids['tmdb'] != None and trakt_ids['tmdb'] != '' and tried != 'tmdb': tried = 'tmdb' return tvdb_play_episode(trakt_ids['tvdb'], season, episode) elif tried == 'tmdb': msg = 'No TVDb or TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode) plugin.ok('Episode information not found', msg) else: msg = 'No TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode) plugin.ok('Episode information not found', msg) if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = text.to_unicode(params[lang]) link = play_base.on_play_video(players, params, trakt_ids) if link: plugin.setProperty('plugin.video.openmeta.data', json.dumps( { 'dbid': dbid, 'trakt': id, 'season': season, 'episode': episode })) episode_metadata = meta_info.get_episode_metadata_trakt(season_info, prepisode) play_base.action_play( { 'label': episode_info['title'], 'path': link, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'fanart': str(show_info['fanart']) })
def list_trakt_episodes(result): genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('shows')]) items = [] for item in result: if 'episode' in item: episode = item['episode'] else: episode = item if 'show' in item: show = item['show'] try: show_id = item['show']['ids']['tvdb'] except: show_id = item['ids'].get('tvdb') try: id = episode['show']['ids']['tvdb'] except: id = episode['ids'].get('tvdb') if not id: continue try: season_num = episode['season'] except: season_num = episode.get('season') try: episode_num = episode['number'] except: episode_num = episode.get('number') if show: tvshow_title = show.get('title').encode('utf-8') else: try: tvshow_title = (episode['show']['title']).encode('utf-8') except: tvshow_title = str(episode.get('title')).encode('utf-8') if episode['title'] != None: try: episode_title = episode['title'].encode('utf-8') except: episode_title = episode.get('title').encode('utf-8') else: episode_title = 'TBA' info = meta_info.get_tvshow_metadata_trakt(item['show'], genres_dict) episode_info = meta_info.get_episode_metadata_trakt(info, episode) episode_info['title'] = '%s (%02dx%02d): %s' % ( tvshow_title, season_num, episode_num, episode_title) context_menu = [] showdata = TVDB[int(show_id)] # extradata = play_tvshows.get_episode_parameters(showdata, season_num, episode_num) properties = {} try: if traktenabled and countenabled: playdata = get_show_play_count(info['trakt_id']) season_index = nav_base.get_play_count_info( playdata, season_num) properties = { 'TotalSeasons': len(playdata['seasons']), 'TotalEpisodes': playdata['seasons'][season_index]['aired'], # 'WatchedEpisodes': playdata['seasons'][season_index]['completed'], # 'UnWatchedEpisodes': playdata['seasons'][season_index]['aired'] - playdata['seasons'][season_index]['completed'] } episode_info.update({ 'playcount': nav_base.get_play_count_info(playdata, season_num, episode_num) }) except: pass episodeitem = { 'label': episode_info['title'], 'path': plugin.url_for('tv_play', id=id, season=season_num, episode=episode_num, usedefault=True), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'properties': properties, 'thumbnail': episode_info['fanart'], 'poster': episode_info['poster'], 'fanart': episode_info['fanart'] } if enablefanart: try: art = get_fanarttv_art(info['tvdb_id'], query='episode', season=season_num) art = checkart(art) episodeitem.update(art) except: pass items.append(episodeitem) return plugin.finish(items=items, sort_methods=SORTRAKT, cache_to_disc=False)
def _lists_trakt_show_tv_list(list_items): genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('shows')]) items = [] for list_item in list_items: item = None item_type = list_item['type'] if item_type == 'show': tvdb_id = list_item['show']['ids']['tvdb'] if tvdb_id != '' and tvdb_id != None: show = list_item['show'] info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) item = make_tvshow_item(info) else: item = None elif item_type == 'season': tvdb_id = list_item['show']['ids']['tvdb'] season = list_item['season'] show = list_item['show'] show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) season_info = meta_info.get_season_metadata_trakt( show_info, season, genres_dict) label = '%s - Season %s' % (show['title'], season['number']) properties = {} try: if traktenabled and countenabled: if 'trakt' in list_item['show']['ids'].keys( ) and list_item['show']['ids']['trakt'] != '': id = list_item['show']['ids']['trakt'] else: id = Trakt.find_trakt_ids('tvdb', tvdb_id, 'show')['trakt'] playdata = get_show_play_count(id) season_index = nav_base.get_play_count_info( playdata, season['number']) properties = { 'TotalSeasons': len(playdata['seasons']), 'TotalEpisodes': playdata['seasons'][season_index]['aired'], 'WatchedEpisodes': playdata['seasons'][season_index]['completed'], 'UnWatchedEpisodes': playdata['seasons'][season_index]['aired'] - playdata['seasons'][season_index]['completed'] } if properties['UnWatchedEpisodes'] == 0: season_info.update({'playcount': 1}) except: pass item = ({ 'label': label, 'path': plugin.url_for('tv_season', id=tvdb_id, season_num=list_item['season']['number']), 'info': season_info, 'properties': properties, 'thumbnail': season_info['poster'], 'poster': season_info['poster'], 'fanart': season_info['fanart'] }) elif item_type == 'episode': tvdb_id = list_item['show']['ids']['tvdb'] episode = list_item['episode'] show = list_item['show'] season_number = episode['season'] episode_number = episode['number'] show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) episode_info = meta_info.get_episode_metadata_trakt( show_info, episode) properties = {} try: if traktenabled and countenabled: if 'trakt' in list_item['show']['ids'].keys( ) and list_item['show']['ids']['trakt'] != '': id = list_item['show']['ids']['trakt'] else: id = Trakt.find_trakt_ids('tvdb', tvdb_id, 'show')['trakt'] playdata = get_show_play_count(id) season_index = nav_base.get_play_count_info( playdata, season_number, episode_number) properties = { 'TotalSeasons': len(playdata['seasons']), 'TotalEpisodes': playdata['seasons'][season_index]['aired'], # 'WatchedEpisodes': playdata['seasons'][season_index]['completed'], # 'UnWatchedEpisodes': playdata['seasons'][season_index]['aired'] - playdata['seasons'][season_index]['completed'] } episode_info.update({ 'playcount': nav_base.get_play_count_info(playdata, season_number, episode_number) }) except: pass label = '%s - S%sE%s - %s' % (show_info['title'], season_number, episode_number, episode_info['title']) item = ({ 'label': label, 'path': plugin.url_for('tv_play', id=tvdb_id, season=season_number, episode=episode_number), 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'properties': properties, 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'fanart': episode_info['fanart'] }) if enablefanart: try: art = get_fanarttv_art(tvdb_id) art = checkart(art) item.update(art) except: pass if item is not None: items.append(item) return items
def _lists_trakt_show_tv_list(list_items): genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('shows')]) items = [] for list_item in list_items: item = None item_type = list_item['type'] if item_type == 'show': tvdb_id = list_item['show']['ids']['tvdb'] if tvdb_id != '' and tvdb_id != None: show = list_item['show'] info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) item = make_tvshow_item(info) else: item = None elif item_type == 'season': tvdb_id = list_item['show']['ids']['tvdb'] season = list_item['season'] show = list_item['show'] show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) season_info = meta_info.get_season_metadata_trakt( show_info, season, genres_dict) label = '%s - Season %s' % (show['title'], season['number']) item = ({ 'label': label, 'path': plugin.url_for('tv_season', id=tvdb_id, season_num=list_item['season']['number']), 'info': season_info, 'thumbnail': season_info['poster'], 'poster': season_info['poster'], 'fanart': season_info['fanart'] }) elif item_type == 'episode': tvdb_id = list_item['show']['ids']['tvdb'] episode = list_item['episode'] show = list_item['show'] season_number = episode['season'] episode_number = episode['number'] show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) episode_info = meta_info.get_episode_metadata_trakt( show_info, episode) label = '%s - S%sE%s - %s' % (show_info['title'], season_number, episode_number, episode_info['title']) item = ({ 'label': label, 'path': plugin.url_for('tv_play', id=tvdb_id, season=season_number, episode=episode_number), 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'fanart': episode_info['fanart'] }) if item is not None: items.append(item) return items
def list_trakt_episodes(result): genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('shows')]) items = [] for item in result: if 'episode' in item: episode = item['episode'] else: episode = item if 'show' in item: show = item['show'] try: id = episode['show']['ids']['tvdb'] except: id = episode['ids'].get('tvdb') if not id: continue try: season_num = episode['season'] except: season_num = episode.get('season') try: episode_num = episode['number'] except: episode_num = episode.get('number') if show: tvshow_title = show.get('title').encode('utf-8') else: try: tvshow_title = (episode['show']['title']).encode('utf-8') except: tvshow_title = str(episode.get('title')).encode('utf-8') if episode['title'] != None: try: episode_title = episode['title'].encode('utf-8') except: episode_title = episode.get('title').encode('utf-8') else: episode_title = 'TBA' info = meta_info.get_tvshow_metadata_trakt(item['show'], genres_dict) episode_info = meta_info.get_episode_metadata_trakt(info, episode) episode_info['title'] = '%s (%02dx%02d): %s' % ( tvshow_title, season_num, episode_num, episode_title) if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [( 'OpenInfo', 'RunScript(script.extendedinfo,info=extendedepisodeinfo,tvshow=%s,season=%s,episode=%s)' % (tvshow_title, season_num, episode_num))] else: context_menu = [] items.append({ 'label': episode_info['title'], 'path': plugin.url_for('tv_play', id=id, season=season_num, episode=episode_num), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'fanart': episode_info['fanart'] }) return plugin.finish(items=items, sort_methods=SORTRAKT, cache_to_disc=False)
def _lists_trakt_show_list(list_items): from resources.lib.TheMovieDB import People #genres_dict = Trakt.get_genres('tv') items = [] for list_item in list_items: item = None item_type = list_item['type'] if item_type == 'show': tvdb_id = list_item['show']['ids']['tvdb'] if tvdb_id != '' and tvdb_id != None: show = list_item['show'] info = meta_info.get_tvshow_metadata_trakt(show) item = nav_tvshows.make_tvshow_item(info) else: item = None elif item_type == 'season': tvdb_id = list_item['show']['ids']['tvdb'] season = list_item['season'] show = list_item['show'] show_info = meta_info.get_tvshow_metadata_trakt(show) season_info = meta_info.get_season_metadata_trakt( show_info, season) label = '%s - Season %s' % (show['title'], season['number']) item = ({ 'label': label, 'path': plugin.url_for('tv_season', id=tvdb_id, season_num=list_item['season']['number']), 'info': season_info, 'thumbnail': season_info['poster'], 'poster': season_info['poster'], 'properties': { 'fanart_image': season_info['fanart'] } }) elif item_type == 'episode': tvdb_id = list_item['show']['ids']['tvdb'] episode = list_item['episode'] show = list_item['show'] season_number = episode['season'] episode_number = episode['number'] show_info = meta_info.get_tvshow_metadata_trakt(show) episode_info = meta_info.get_episode_metadata_trakt( show_info, episode) label = '%s - S%sE%s - %s' % (show_info['title'], season_number, episode_number, episode_info['title']) item = ({ 'label': label, 'path': plugin.url_for('tv_play', id=tvdb_id, season=season_number, episode=episode_number), 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'properties': { 'fanart_image': episode_info['fanart'] } }) elif item_type == 'movie': movie = list_item['movie'] movie_info = meta_info.get_trakt_movie_metadata(movie) try: tmdb_id = movie_info['tmdb'] except: tmdb_id = '' try: imdb_id = movie_info['imdb'] except: imdb_id = '' if tmdb_id != None and tmdb_id != '': src = 'tmdb' id = tmdb_id elif imdb_id != None and mdb_id != '': src = 'imdb' id = imdb_id else: src = '' id = '' if src == '': item = None item = nav_movies.make_movie_item(movie_info) elif item_type == 'person': person_id = list_item['person']['ids']['trakt'] person_tmdb_id = list_item['person']['ids']['tmdb'] try: person_images = People(person_tmdb_id).images()['profiles'] person_image = 'https://image.tmdb.org/t/p/w640' + person_images[ 0]['file_path'] except: person_image = '' person_name = text.to_utf8(list_item['person']['name']) item = ({ 'label': person_name, 'path': plugin.url_for('trakt_movies_person', person_id=person_id), 'thumbnail': person_image, 'poster': person_image, 'properties': { 'fanart_image': person_image } }) if item is not None: items.append(item) for item in items: item['properties'] = {'fanart_image': plugin.get_addon_fanart()} return items