def root(): items = [ { 'label': 'Movies', 'path': plugin.url_for('movies'), 'thumbnail': plugin.get_media_icon('movies'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'TV Shows', 'path': plugin.url_for('tv'), 'thumbnail': plugin.get_media_icon('tv'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'My Trakt', 'path': plugin.url_for('my_trakt'), 'thumbnail': plugin.get_media_icon('trakt'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Search...', 'path': plugin.url_for('search_term'), 'thumbnail': plugin.get_media_icon('search'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Settings', 'path': plugin.url_for('open_settings'), 'thumbnail': plugin.get_media_icon('settings'), 'fanart': plugin.get_addon_fanart() }] return items
def lists_trakt_liked_tv_lists(page): lists, pages = Trakt.get_liked_lists(page) items = [] for list in lists: info = list['list'] name = info['name'] user = info['user']['username'] slug = info['ids']['slug'] items.append({ 'label': name, 'path': plugin.url_for('lists_trakt_show_tv_list', user=user, slug=slug), 'thumbnail': plugin.get_media_icon('traktlikedlists'), 'fanart': plugin.get_addon_fanart() }) nextpage = int(page) + 1 if pages > page: items.append({ 'label': '%s/%s [I]Next page[/I] >>' % (nextpage, pages), 'path': plugin.url_for('lists_trakt_liked_tv_lists', page=int(page) + 1), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return plugin.finish(items=items, sort_methods=SORT)
def make_movie_item(movie_info): try: tmdb_id = movie_info.get('tmdb') except: tmdb_id = '' if tmdb_id == '': try: tmdb_id = info['tmdb'] except: tmdb_id = False try: imdb_id = movie_info.get('imdb') except: imdb_id = '' if imdb_id == '': try: imdb_id = info['imdb'] except: imdb_id = False if tmdb_id: id = tmdb_id src = 'tmdb' elif imdb_id: id = imdb_id src = 'imdb' else: plugin.notify('tmdb or imdb id', 'not found', plugin.get_addon_icon(), 3000) if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [ ('OpenInfo', 'RunScript(script.extendedinfo,info=extendedinfo,id=%s)' % id), ('Movie trailer', 'RunScript(script.extendedinfo,info=playtrailer,id=%s)' % id), ('Add to library', 'RunPlugin(%s)' % plugin.url_for('movies_add_to_library', src=src, id=id)) ] else: context_menu = [ ('Add to library', 'RunPlugin(%s)' % plugin.url_for('movies_add_to_library', src=src, id=id)) ] return { 'label': movie_info['title'], 'path': plugin.url_for('movies_play', src=src, id=id), 'context_menu': context_menu, 'thumbnail': movie_info['poster'], 'banner': movie_info['fanart'], 'poster': movie_info['poster'], 'fanart': movie_info['fanart'], 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'info': movie_info }
def tv(): items = [{ 'label': 'Currently Airing (TMDB)', 'path': plugin.url_for('tmdb_tv_on_the_air', page=1), 'thumbnail': plugin.get_media_icon('ontheair'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Popular (TMDB)', 'path': plugin.url_for('tmdb_tv_most_popular', page=1), 'thumbnail': plugin.get_media_icon('popular'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Watched (Trakt)', 'path': plugin.url_for('trakt_tv_watched', page=1), 'thumbnail': plugin.get_media_icon('traktwatchlist'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Collected (Trakt)', 'path': plugin.url_for('trakt_tv_collected', page=1), 'thumbnail': plugin.get_media_icon('traktcollection'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Collected Netflix (Trakt)', 'path': plugin.url_for('trakt_netflix_tv_collected', page=1), 'thumbnail': plugin.get_media_icon('traktcollection'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Popular (Trakt)', 'path': plugin.url_for('tv_trakt_popular', page=1), 'thumbnail': plugin.get_media_icon('traktrecommendations'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Trending (Trakt)', 'path': plugin.url_for('trakt_tv_trending', page=1), 'thumbnail': plugin.get_media_icon('trending'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'New Shows (Trakt)', 'path': plugin.url_for('trakt_tv_new_shows'), 'thumbnail': plugin.get_media_icon('traktcalendar'), 'fanart': plugin.get_addon_fanart(), 'context_menu': [('Play (random)', 'RunPlugin(%s)' % plugin.url_for('trakt_tv_play_random_new_shows'))] }, { 'label': 'Genres', 'path': plugin.url_for('tmdb_tv_genres'), 'thumbnail': plugin.get_media_icon('genres'), 'fanart': plugin.get_addon_fanart() }] return items
def tmdb_movies_genres(): genres = nav_base.get_base_genres() items = sorted([ { 'label': name, 'path': plugin.url_for('tmdb_movies_genre', id=id, page=1), 'thumbnail': nav_base.get_genre_icon(id), 'fanart': plugin.get_addon_fanart(), 'context_menu': [ ('Play (random)', 'RunPlugin(%s)' % plugin.url_for('tmdb_movies_play_random_genre', id = id))] } for id, name in genres.items()], key=lambda k: k['label']) return plugin.finish(items=items, sort_methods=SORT)
def lists_search_for_lists_term(term, page): lists, pages = Trakt.search_for_list(term, page) items = [] for list in lists: if 'list' in list: list_info = list['list'] else: continue name = list_info['name'] user = list_info['username'] slug = list_info['ids']['slug'] total = list_info['item_count'] info = {} info['title'] = name if 'description' in list_info: info['plot'] = list_info['description'] else: info['plot'] = 'No description available' if user != None and total != None and total != 0: items.append({ 'label': '%s - %s (%s)' % (text.to_utf8(name), text.to_utf8(user), total), 'path': plugin.url_for('lists_trakt_show_list', user=user, slug=slug), 'thumbnail': plugin.get_media_icon('traktlikedlists'), 'context_menu': [('Play (random)', 'RunPlugin(%s)' % plugin.url_for( 'lists_trakt_play_random', user=user, slug=slug))], 'info': info }) for item in items: item['properties'] = { 'fanart_image': plugin.get_addon_fanart() } nextpage = int(page) + 1 if pages > page: items.append({ 'label': '%s/%s [I]Next page[/I] >>' % (nextpage, pages), 'path': plugin.url_for('lists_search_for_lists_term', term=term, page=int(page) + 1), 'thumbnail': plugin.get_media_icon('item_next'), 'properties': { 'fanart_image': plugin.get_addon_fanart() } }) return plugin.finish(items=items, sort_methods=SORT)
def lists(): items = [{ 'label': 'My Lists', 'path': plugin.url_for('lists_trakt_my_lists'), 'thumbnail': plugin.get_media_icon('traktmylists'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Liked Lists', 'path': plugin.url_for('lists_trakt_liked_lists', page=1), 'thumbnail': plugin.get_media_icon('traktlikedlists'), 'fanart': plugin.get_addon_fanart() }] return items
def list_tvshows(response): items = [] results = response['results'] for tvdb_show, tmdb_show in executor.execute(tmdb_to_tvdb, results, workers=10): if tvdb_show is not None: try: info = build_tvshow_info(tvdb_show, tmdb_show) except Exception as e: xbmc.log('Failed to parse show, tvdbID: {}'.format(tvdb_show.get('id')), xbmc.LOGERROR) xbmc.log('Error: {}'.format(e), xbmc.LOGERROR) continue else: items.append(make_tvshow_item(info)) if xbmc.Monitor().abortRequested(): return if 'page' in response: page = response['page'] args = nav_base.caller_args() if page < response['total_pages']: args['page'] = str(page + 1) items.append( { 'label': '%s/%s [I]Next page[/I] >>' % (page + 1, response['total_pages']), 'path': plugin.url_for(nav_base.caller_name(), **args), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return items
def tv_trakt_popular(page, raw=False): results, pages = Trakt.get_popular_shows_paginated(page) if raw: return results else: genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('shows')]) shows = [ meta_info.get_tvshow_metadata_trakt(item, genres_dict) for item in results ] items = [ make_tvshow_item(show) for show in shows if show.get('tvdb_id') ] page = int(page) pages = int(pages) if pages > 1: items.append({ 'label': '%s/%s [I]Next page[/I] >>' % (page + 1, pages + 1), 'path': plugin.url_for('tv_trakt_popular', page=page + 1), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return plugin.finish(items=items, sort_methods=SORT)
def batch_add_movies_to_library(library_folder, id): if id == None: return changed = False movie_folder = os.path.join(library_folder, str(id) + '/') if not xbmcvfs.exists(movie_folder): try: xbmcvfs.mkdir(movie_folder) except: pass nfo_filepath = os.path.join(movie_folder, str(id) + '.nfo') if not xbmcvfs.exists(nfo_filepath): changed = True nfo_file = xbmcvfs.File(nfo_filepath, 'w') content = 'https://www.imdb.com/title/%s/' % str(id) nfo_file.write(content) nfo_file.close() strm_filepath = os.path.join(movie_folder, str(id) + '.strm') src = 'imdb' if not xbmcvfs.exists(strm_filepath): changed = True strm_file = xbmcvfs.File(strm_filepath, 'w') try: content = plugin.url_for('movies_play', src=src, id=id) strm_file.write(content) strm_file.close() except: pass return changed
def list_tvshows(response): items = [] results = response['results'] for tvdb_show, tmdb_show in executor.execute(tmdb_to_tvdb, results, workers=10): if tvdb_show is not None: info = build_tvshow_info(tvdb_show, tmdb_show) items.append(make_tvshow_item(info)) if xbmc.Monitor().abortRequested(): return if 'page' in response: page = response['page'] args = nav_base.caller_args() if page < response['total_pages']: args['page'] = str(page + 1) items.append({ 'label': '%s/%s [I]Next page[/I] >>' % (page + 1, response['total_pages']), 'path': plugin.url_for(nav_base.caller_name(), **args), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return items
def list_trakt_movies(results, pages=1, page=1): genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('movies')]) try: movies = [ meta_info.get_trakt_movie_metadata(item['movie'], genres_dict) for item in results ] except KeyError: movies = [ meta_info.get_trakt_movie_metadata(item, genres_dict) for item in results ] items = [make_movie_item(movie) for movie in movies] page = int(page) pages = int(pages) if pages > 1: args = nav_base.caller_args() args['page'] = page + 1 args['confirm'] = 'yes' items.append({ 'label': '%s/%s [I]Next page[/I] >>' % (page, pages + 1), 'path': plugin.url_for(nav_base.caller_name(), **args), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return plugin.finish(items=items, sort_methods=SORTRAKT)
def list_tmdb_movies(result): genres_dict = nav_base.get_base_genres() movies = [ meta_info.get_movie_metadata(item, genres_dict) for item in result['results'] ] items = [make_movie_item(movie) for movie in movies] if 'page' in result: page = int(result['page']) pages = int(result['total_pages']) args = nav_base.caller_args() if pages > page: args['page'] = page + 1 args['confirm'] = 'yes' items.append({ 'label': '%s/%s [I]Next page[/I] >>' % (page, pages + 1), 'path': plugin.url_for(nav_base.caller_name(), **args), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return plugin.finish(items=items, sort_methods=SORT)
def list_trakt_tvshows(results, pages, page): genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('shows')]) try: shows = [ meta_info.get_tvshow_metadata_trakt(item['show'], genres_dict) for item in results ] except KeyError: shows = [ meta_info.get_tvshow_metadata_trakt(item, genres_dict) for item in results ] items = [make_tvshow_item(show) for show in shows if show.get('tvdb_id')] page = int(page) pages = int(pages) if pages > 1: args = nav_base.caller_args() args['page'] = page + 1 args['confirm'] = 'yes' items.append({ 'label': '%s/%s [I]Next page[/I] >>' % (page + 1, pages + 1), 'path': plugin.url_for(nav_base.caller_name(), **args), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return plugin.finish(items=items, sort_methods=SORT)
def list_seasons_tvdb(id): id = int(id) show = TVDB[id] show_info = meta_info.get_tvshow_metadata_tvdb(show, banners=False) items = [] for (season_num, season) in show.items(): if season_num == 0 and not False: continue elif not season.has_aired(flexible=False): continue season_info = meta_info.get_season_metadata_tvdb(show_info, season) if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [( 'OpenInfo', 'RunScript(script.extendedinfo,info=seasoninfo,tvshow=%s,season=%s)' % (show_info['name'], season_num))] else: context_menu = [] items.append({ 'label': 'Season %s' % season_num, 'path': plugin.url_for('tv_season', id=id, season_num=season_num), 'context_menu': context_menu, 'info': season_info, 'thumbnail': season_info['poster'], 'poster': season_info['poster'], 'fanart': season_info['fanart'] }) return items
def movie_lists(): items = [ { 'label': 'Collection', 'path': plugin.url_for('lists_trakt_movies_collection'), 'thumbnail': plugin.get_media_icon('traktcollection'), 'fanart': plugin.get_addon_fanart(), 'context_menu': [ ('Play (random)', 'RunPlugin(%s)' % plugin.url_for('lists_trakt_movies_play_random_collection')), ('Add to library', 'RunPlugin(%s)' % plugin.url_for('lists_trakt_movies_collection_to_library'))] }, { 'label': 'Watchlist', 'path': plugin.url_for('trakt_movies_watchlist'), 'thumbnail': plugin.get_media_icon('traktwatchlist'), 'fanart': plugin.get_addon_fanart(), 'context_menu': [ ('Play (random)', 'RunPlugin(%s)' % plugin.url_for('trakt_movies_play_random_watchlist'))] }, { 'label': 'My Lists', 'path': plugin.url_for('lists_trakt_my_movie_lists'), 'thumbnail': plugin.get_media_icon('traktmylists'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Liked Lists', 'path': plugin.url_for('lists_trakt_liked_movie_lists', page=1), 'thumbnail': plugin.get_media_icon('traktlikedlists'), 'fanart': plugin.get_addon_fanart() }] return items
def my_trakt(): items = [{ 'label': 'Movies', 'path': plugin.url_for('movie_lists'), 'thumbnail': plugin.get_media_icon('movies'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'TV Shows', 'path': plugin.url_for('tv_lists'), 'thumbnail': plugin.get_media_icon('tv'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Lists (Movies & TV Shows)', 'path': plugin.url_for('lists'), 'thumbnail': plugin.get_media_icon('traktmylists'), 'fanart': plugin.get_addon_fanart() }] return items
def tmdb_tv_genres(): genres = nav_base.get_tv_genres() items = sorted([{ 'label': name, 'path': plugin.url_for('tmdb_tv_genre', id=id, page=1), 'thumbnail': nav_base.get_genre_icon(id), 'fanart': plugin.get_addon_fanart() } for id, name in genres.items()], key=lambda k: k['label']) return items
def list_seasons_tvdb(id, flatten): id = int(id) show = TVDB[id] show_info = meta_info.get_tvshow_metadata_tvdb(show, banners=False) items = [] for (season_num, season) in show.items(): if season_num == 0 and not specialsenabled: continue elif not season.has_aired(flexible=False): continue season_info = meta_info.get_season_metadata_tvdb(show_info, season) if flatten == 'none': if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [ ('OpenInfo', 'RunScript(script.extendedinfo,info=seasoninfo,tvshow=%s,season=%s)' % (show_info['name'], season_num))] else: context_menu = [] properties = {} try: if traktenabled and countenabled: playdata = get_show_play_count(Trakt.find_trakt_ids('tvdb', show_info['tvdb_id'], 'show')['trakt']) 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'] } if properties['UnWatchedEpisodes'] == 0: season_info.update({'playcount': 1}) except: pass seasonitem = { 'label': 'Season %s' % season_num, 'path': plugin.url_for('tv_season', id=id, season_num=season_num), 'context_menu': context_menu, 'info': season_info, 'properties': properties, 'thumbnail': season_info['poster'], 'poster': season_info['poster'], 'fanart': season_info['fanart'] } if enablefanart: try: art = get_fanarttv_art(show_info['tvdb_id'], query='season', season=season_num) art = checkart(art) seasonitem.update(art) except: pass items.append(seasonitem) elif flatten == 'all': items += list_episodes_tvdb(id, season_num) if flatten == 'one': items = list_episodes_tvdb(id, '1') return items
def _lists_trakt_show_movie_list(list_items): from resources.lib.TheMovieDB import People items = [] for list_item in list_items: item = None item_type = list_item['type'] if 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 = 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, 'fanart': plugin.get_addon_fanart() }) if item is not None: items.append(item) return items
def tv(): items = [ { 'label': 'Currently Airing (TMDB)', 'path': plugin.url_for('tmdb_tv_on_the_air', page=1), 'thumbnail': plugin.get_media_icon('ontheair'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Popular (TMDB)', 'path': plugin.url_for('tmdb_tv_most_popular', page=1), 'thumbnail': plugin.get_media_icon('popular'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Watched (Trakt)', 'path': plugin.url_for('trakt_tv_watched', page=1), 'thumbnail': plugin.get_media_icon('traktwatchlist'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Collected (Trakt)', 'path': plugin.url_for('trakt_tv_collected', page=1), 'thumbnail': plugin.get_media_icon('traktcollection'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Collected Netflix (Trakt)', 'path': plugin.url_for('trakt_netflix_tv_collected', page=1), 'thumbnail': plugin.get_media_icon('traktcollection'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Most Popular (Trakt)', 'path': plugin.url_for('tv_trakt_popular', page=1), 'thumbnail': plugin.get_media_icon('traktrecommendations'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Trending (Trakt)', 'path': plugin.url_for('trakt_tv_trending', page=1), 'thumbnail': plugin.get_media_icon('trending'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Genres', 'path': plugin.url_for('tmdb_tv_genres'), 'thumbnail': plugin.get_media_icon('genres'), 'fanart': plugin.get_addon_fanart() }] return items
def list_episodes_tvdb(id, season_num): id = int(id) season_num = int(season_num) show = TVDB[id] show_info = meta_info.get_tvshow_metadata_tvdb(show, banners=False) season = show[season_num] season_info = meta_info.get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if not season_num == 0 and not episode.has_aired(flexible=False): break episode_info = meta_info.get_episode_metadata_tvdb(season_info, episode) context_menu = [] properties = {} try: if traktenabled and countenabled: playdata = get_show_play_count(Trakt.find_trakt_ids('tvdb', show_info['tvdb_id'], 'show')['trakt']) 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['poster'], 'poster': season_info['poster'], 'fanart': episode_info['fanart'] } if enablefanart: try: art = get_fanarttv_art(show_info['tvdb_id'], query='episode', season=season_num) art = checkart(art) episodeitem.update(art) except: pass items.append(episodeitem) return items
def library_tv_strm(show, folder, id, season, episode): enc_season = ('Season %s' % season).translate(None, '\/:*?"<>|').strip('.') folder = os.path.join(folder, enc_season) try: xbmcvfs.mkdir(folder) except: pass enc_name = '%s - S%02dE%02d.strm' % (text.clean_title(show['seriesname']), season, episode) stream = os.path.join(folder, enc_name) if not xbmcvfs.exists(stream): file = xbmcvfs.File(stream, 'w') content = plugin.url_for('tv_play', id=id, season=season, episode=episode) file.write(str(content)) file.close()
def list_episodes_tvdb(id, season_num): id = int(id) season_num = int(season_num) show = TVDB[id] show_info = meta_info.get_tvshow_metadata_tvdb(show, banners=False) season = show[season_num] season_info = meta_info.get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if not season_num == 0 and not episode.has_aired(flexible=False): break episode_info = meta_info.get_episode_metadata_tvdb( season_info, episode) if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [( 'OpenInfo', 'RunScript(script.extendedinfo,info=extendedepisodeinfo,tvshow=%s,season=%s,episode=%s)' % (show_info['name'], 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': season_info['poster'], 'fanart': episode_info['fanart'] }) return items
def lists_trakt_my_movie_lists(): lists = Trakt.get_lists() items = [] for list in lists: name = list['name'] user = list['user']['username'] slug = list['ids']['slug'] items.append( { 'label': name, 'path': plugin.url_for('lists_trakt_show_movie_list', user=user, slug=slug), 'thumbnail': plugin.get_media_icon('traktmylists'), 'fanart': plugin.get_addon_fanart() }) return plugin.finish(items=items, sort_methods=SORT)
def list_trakt_search_items(results, pages, page): movies = [meta_info.get_trakt_movie_metadata(item['movie'], None) for item in results] items = [make_movie_item(movie) for movie in movies] page = int(page) pages = int(pages) if pages > 1: args = nav_base.caller_args() args['page'] = page + 1 items.append( { 'label': '%s/%s [I]Next page[/I] >>' % (page, pages + 1), 'path': plugin.url_for(nav_base.caller_name(), **args), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return items
def tv_lists(): items = [{ 'label': 'Collection', 'path': plugin.url_for('lists_trakt_tv_collection'), 'thumbnail': plugin.get_media_icon('traktcollection'), 'fanart': plugin.get_addon_fanart(), 'context_menu': [('Add to library', 'RunPlugin(%s)' % plugin.url_for('lists_trakt_tv_collection_to_library'))] }, { 'label': 'Recommendations', 'path': plugin.url_for('trakt_tv_recommendations'), 'thumbnail': plugin.get_media_icon('traktrecommendations'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Watchlist', 'path': plugin.url_for('trakt_tv_watchlist', page=1), 'thumbnail': plugin.get_media_icon('traktwatchlist'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'My Lists', 'path': plugin.url_for('lists_trakt_my_tv_lists'), 'thumbnail': plugin.get_media_icon('traktmylists'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Liked Lists', 'path': plugin.url_for('lists_trakt_liked_tv_lists', page=1), 'thumbnail': plugin.get_media_icon('traktlikedlists'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Next Episodes', 'path': plugin.url_for('trakt_tv_next_episodes'), 'thumbnail': plugin.get_media_icon('traktnextepisodes'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Upcoming Episodes', 'path': plugin.url_for('trakt_tv_upcoming_episodes'), 'thumbnail': plugin.get_media_icon('traktcalendar'), 'fanart': plugin.get_addon_fanart() }] return items
def list_trakt_search_items(results, pages, page): shows = [meta_info.get_tvshow_metadata_trakt(item['show'], None) for item in results] items = [make_tvshow_item(show) for show in shows if show.get('tvdb_id')] page = int(page) pages = int(pages) if pages > 1: args = nav_base.caller_args() nextpage = page + 1 args['page'] = page + 1 items.append( { 'label': '%s/%s [I]Next page[/I] >>' % (nextpage, pages), 'path': plugin.url_for(nav_base.caller_name(), **args), 'thumbnail': plugin.get_media_icon('item_next'), 'fanart': plugin.get_addon_fanart() }) return items
def search(term): items = [{ 'label': 'Movies (TMDB) search - ' + term, 'path': plugin.url_for('tmdb_movies_search_term', term=term, page=1), 'thumbnail': plugin.get_media_icon('search'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Movies (Trakt) search - ' + term, 'path': plugin.url_for('trakt_movies_search_term', term=term, page=1), 'thumbnail': plugin.get_media_icon('search'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'TV shows (TVDB) search - ' + term, 'path': plugin.url_for('tvdb_tv_search_term', term=term, page=1), 'thumbnail': plugin.get_media_icon('search'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'TV shows (Trakt) search - ' + term, 'path': plugin.url_for('trakt_tv_search_term', term=term, page=1), 'thumbnail': plugin.get_media_icon('search'), 'fanart': plugin.get_addon_fanart() }, { 'label': 'Lists (Trakt) search - ' + term, 'path': plugin.url_for('lists_search_for_lists_term', term=term, page=1), 'thumbnail': plugin.get_media_icon('search'), 'fanart': plugin.get_addon_fanart(), }, { 'label': 'Edit search string', 'path': plugin.url_for('search_edit', term=term), 'thumbnail': plugin.get_media_icon('search'), 'fanart': plugin.get_addon_fanart() }] return items
def make_tvshow_item(info): from resources.lib.TheMovieDB import TV, Find try: tvdb_id = info['tvdb'] except: tvdb_id = '' if tvdb_id == '': try: tvdb_id = info['tvdb_id'] except: tvdb_id = '' try: tmdb_id = info['tmdb'] except: tmdb_id = '' if tmdb_id == '': try: tmdb_id = info['id'] except: tmdb_id = '' try: imdb_id = info['imdb_id'] except: imdb_id = '' if imdb_id == '': try: imdb_id = info['imdb'] except: imdb_id = '' if not info['poster']: info['poster'] = None if not info['fanart']: info['fanart'] = None if info['poster'] == None or info['poster'] == '': if tmdb_id != None and tmdb_id != '': show = TV(tmdb_id).info() if show['poster_path'] != None and show['poster_path'] != '': info['poster'] = u'https://image.tmdb.org/t/p/w500' + show[ 'poster_path'] if info['fanart'] == None or info['fanart'] == '': if show['backdrop_path'] != None and show[ 'backdrop_path'] != '': info[ 'fanart'] = u'https://image.tmdb.org/t/p/original' + show[ 'backdrop_path'] if info['poster'] == None or info['poster'] == '': if tvdb_id != None and tvdb_id != '': show = TVDB.get_show(int(tvdb_id), full=False) if show != None: if show['seriesname'] != None and show['seriesname'] != '': if show.get('poster', '') != None and show.get( 'poster', '') != '': info['poster'] = show.get('poster', '') if info['fanart'] == None or info['fanart'] == '': if show.get('fanart', '') != None and show.get( 'fanart', '') != '': info['fanart'] = show.get('fanart', '') if info['poster'] == None or info['poster'] == '': if imdb_id != None and imdb_id != '': preshow = Find(imdb_id).info(external_source='imdb_id') proshow = preshow['tv_results'] if proshow != []: show = proshow[0] else: show = [] if show != []: if show['poster_path'] != None and show['poster_path'] != '': info['poster'] = u'https://image.tmdb.org/t/p/w500' + show[ 'poster_path'] if info['fanart'] == None or info['fanart'] == '': if show['backdrop_path'] != None and show[ 'backdrop_path'] != '': info[ 'fanart'] = u'https://image.tmdb.org/t/p/original' + show[ 'backdrop_path'] if info['fanart'] == None or info['fanart'] == '': info['fanart'] = plugin.get_addon_fanart() if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [ ('OpenInfo', 'RunScript(script.extendedinfo,info=extendedtvinfo,tvdb_id=%s)' % tvdb_id), ('TV trailer', 'RunScript(script.extendedinfo,info=playtvtrailer,tvdb_id=%s)' % tvdb_id), ('Add to library', 'RunPlugin(%s)' % plugin.url_for('tv_add_to_library', id=tvdb_id)) ] else: context_menu = [ ('Add to library', 'RunPlugin(%s)' % plugin.url_for('tv_add_to_library', id=tvdb_id)) ] properties = {} try: if traktenabled and countenabled: if 'trakt_id' in info.keys() and info['trakt_id'] != '': id = info['trakt_id'] else: id = Trakt.find_trakt_ids('tvdb', tvdb_id, 'show')['trakt'] playdata = get_show_play_count(id) properties = { 'TotalSeasons': len(playdata['seasons']), 'TotalEpisodes': playdata['aired'], 'WatchedEpisodes': playdata['completed'], 'UnWatchedEpisodes': playdata['aired'] - playdata['completed'] } if properties['UnWatchedEpisodes'] == 0: info.update({'playcount': 1}) except: pass showitem = { 'label': text.to_utf8(info['title']), 'path': plugin.url_for('tv_tvshow', id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'poster': info['poster'], 'fanart': info['fanart'], 'info_type': 'video', 'stream_info': { 'video': {} }, 'properties': properties, 'info': info } if enablefanart: try: art = get_fanarttv_art(tvdb_id, query='show') art = checkart(art) showitem.update(art) except: pass return showitem