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 trakt_movies_latest_releases(raw=False): results = sorted(Trakt.get_latest_releases_movies(), key=lambda k: k['listed_at'], reverse=True) if raw: return results else: genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('movies')]) movies = [ meta_info.get_trakt_movie_metadata(item['movie'], genres_dict) for item in results ] items = [make_movie_item(movie) for movie in movies] 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 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 lists_trakt_tv_collection(raw=False): results = sorted(Trakt.get_collection('shows'), key=lambda k: k['last_collected_at'], reverse=True) if raw: return results shows = [meta_info.get_tvshow_metadata_trakt(item['show']) for item in results] items = [make_tvshow_item(show) for show in shows if show.get('tvdb_id')] 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 lists_trakt_movies_collection(raw=False): results = sorted(Trakt.get_collection('movies'), key=lambda k: k['collected_at'], reverse=True) if raw: return results movies = [meta_info.get_trakt_movie_metadata(item['movie']) for item in results] items = [make_movie_item(movie) for movie in movies] return items
def trakt_movies_latest_releases(raw=False): results = sorted(Trakt.get_latest_releases_movies(), key=lambda k: k['listed_at'], reverse=True) if raw: return results else: return list_trakt_movies(results)
def list_trakt_persons(results): genres_dict = dict([(x['slug'], x['name']) for x in Trakt.get_genres('movies')]) movies = [ meta_info.get_trakt_movie_metadata(item['movie'], genres_dict) for item in results ] items = [make_movie_item(movie) for movie in movies] 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 trakt_tv_next_episodes(raw=False): items = [] result = Trakt.get_next_episodes() for episode in result: trakt_id = episode['show']['ids']['trakt'] episode_info = Trakt.get_episode(trakt_id, episode['season'], episode['number']) first_aired_string = episode_info.get('first_aired', '') if not first_aired_string: continue episode['first_aired'] = first_aired_string if int(first_aired_string[:4]) < 1970: items.append(episode) elif first_aired_string: first_aired = time.mktime(time.strptime(first_aired_string[:19], '%Y-%m-%dT%H:%M:%S')) if first_aired < time.time(): items.append(episode) if raw: return items else: return list_trakt_episodes(items)
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 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 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 get_show_play_count(id): if specialsenabled: return Trakt.get_show_play_count_specials(id) else: return Trakt.get_show_play_count(id)
def trakt_tv_collected(page, raw=False): results, pages = Trakt.get_collected_shows_paginated(page) if raw: return results else: return list_trakt_tvshows(results, pages, page)
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 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
def trakt_tv_search_term(term, page): results, pages = Trakt.search_for_tvshow_paginated(term, page) return list_trakt_search_items(results, pages, page)
def trakt_movies_person(person_id, raw=False): result = Trakt.get_person_movies(person_id)['cast'] if raw: return result else: return list_trakt_persons(result)
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 trakt_tv_trending(page, raw=False): results, pages = Trakt.get_trending_shows_paginated(page) if raw: return results else: list_trakt_tvshows(results, pages, page)
def lists_trakt_show_tv_list(user, slug, raw=False): list_items = Trakt.get_list(user, slug) if raw: return list_items return _lists_trakt_show_tv_list(list_items)
def lists_trakt_tv_collection_to_library(): tv_add_all_to_library(Trakt.get_collection('shows'))
def trakt_movies_recommendations(raw=False): result = Trakt.get_recommendations('movies') if raw: return result else: return list_trakt_movies(result, '1', '1')
def trakt_movies_watchlist(raw=False): result = Trakt.get_watchlist('movies') if raw: return result else: return list_trakt_movies(result, '1', '1')
def trakt_tv_watchlist(raw=False): result = Trakt.get_watchlist('shows') if raw: return result else: return list_trakt_tvshows(result, '1', '1')
def trakt_tv_upcoming_episodes(raw=False): result = Trakt.get_calendar() if raw: return result else: return list_trakt_episodes(result)
def lists_trakt_movies_collection_to_library(): movies_add_all_to_library(Trakt.get_collection('movies'))
def trakt_tv_recommendations(raw=False): result = Trakt.get_recommendations('shows') if raw: return result else: return list_trakt_tvshows(result, '1', '1')
def start_info_actions(info, params): if "artistname" in params: params["artistname"] = params.get("artistname", "").split(" feat. ")[0].strip() if not params.get("artist_mbid"): params["artist_mbid"] = utils.fetch_musicbrainz_id(params["artistname"]) utils.log(info) utils.pp(params) if "prefix" in params and not params["prefix"].endswith('.'): params["prefix"] = params["prefix"] + '.' # Audio if info == 'discography': discography = AudioDB.get_artist_discography(params["artistname"]) if not discography: discography = LastFM.get_artist_albums(params.get("artist_mbid")) return discography elif info == 'mostlovedtracks': return AudioDB.get_most_loved_tracks(params["artistname"]) elif info == 'trackdetails': return AudioDB.get_track_details(params.get("id", "")) elif info == 'topartists': return LastFM.get_top_artists() # The MovieDB elif info == 'incinemamovies': return tmdb.get_movies("now_playing") elif info == 'upcomingmovies': return tmdb.get_movies("upcoming") elif info == 'topratedmovies': return tmdb.get_movies("top_rated") elif info == 'popularmovies': return tmdb.get_movies("popular") elif info == 'ratedmovies': return tmdb.get_rated_media_items("movies") elif info == 'starredmovies': return tmdb.get_fav_items("movies") elif info == 'accountlists': return tmdb.handle_lists(tmdb.get_account_lists()) elif info == 'listmovies': return tmdb.get_movies_from_list(params["id"]) elif info == 'airingtodaytvshows': return tmdb.get_tvshows("airing_today") elif info == 'onairtvshows': return tmdb.get_tvshows("on_the_air") elif info == 'topratedtvshows': return tmdb.get_tvshows("top_rated") elif info == 'populartvshows': return tmdb.get_tvshows("popular") elif info == 'ratedtvshows': return tmdb.get_rated_media_items("tv") elif info == 'ratedepisodes': return tmdb.get_rated_media_items("tv/episodes") elif info == 'starredtvshows': return tmdb.get_fav_items("tv") elif info == 'similarmovies': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_similar_movies(movie_id) elif info == 'similartvshows': tvshow_id = None dbid = params.get("dbid") name = params.get("name") tmdb_id = params.get("tmdb_id") tvdb_id = params.get("tvdb_id") imdb_id = params.get("imdb_id") if tmdb_id: tvshow_id = tmdb_id elif dbid and int(dbid) > 0: tvdb_id = local_db.get_imdb_id("tvshow", dbid) if tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif imdb_id: tvshow_id = tmdb.get_show_tmdb_id(imdb_id, "imdb_id") elif name: tvshow_id = tmdb.search_media(media_name=name, year="", media_type="tv") if tvshow_id: return tmdb.get_similar_tvshows(tvshow_id) elif info == 'studio': if params.get("id"): return tmdb.get_company_data(params["id"]) elif params.get("studio"): company_data = tmdb.search_companies(params["studio"]) if company_data: return tmdb.get_company_data(company_data[0]["id"]) elif info == 'set': if params.get("dbid"): name = local_db.get_set_name(params["dbid"]) if name: params["setid"] = tmdb.get_set_id(name) if params.get("setid"): set_data, _ = tmdb.get_set_movies(params["setid"]) return set_data elif info == 'movielists': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_movie_lists(movie_id) elif info == 'keywords': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_keywords(movie_id) elif info == 'trailers': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.handle_videos(tmdb.get_movie_videos(movie_id)) elif info == 'popularpeople': return tmdb.get_popular_actors() elif info == 'personmovies': person = tmdb.get_person_info(person_label=params.get("person"), skip_dialog=True) if person and person.get("id"): movies = tmdb.get_person_movies(person["id"]) if not movies: return None for item in movies: del item["credit_id"] return movies.reduce(key="department") elif info == 'traktsimilarmovies': if params.get("id") or params.get("dbid"): if params.get("dbid"): movie_id = local_db.get_imdb_id("movie", params["dbid"]) else: movie_id = params["id"] return Trakt.get_similar("movie", movie_id) elif info == 'traktsimilartvshows': if params.get("id") or params.get("dbid"): if params.get("dbid"): if params.get("type") == "episode": tvshow_id = local_db.get_tvshow_id_by_episode(params["dbid"]) else: tvshow_id = local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) else: tvshow_id = params["id"] return Trakt.get_similar("show", tvshow_id) elif info == 'airingepisodes': return Trakt.get_episodes("shows") elif info == 'premiereepisodes': return Trakt.get_episodes("premieres") elif info == 'trendingshows': return Trakt.get_shows("trending") elif info == 'popularshows': return Trakt.get_shows("popular") elif info == 'anticipatedshows': return Trakt.get_shows("anticipated") elif info == 'mostcollectedshows': return Trakt.get_shows_from_time("collected") elif info == 'mostplayedshows': return Trakt.get_shows_from_time("played") elif info == 'mostwatchedshows': return Trakt.get_shows_from_time("watched") elif info == 'trendingmovies': return Trakt.get_movies("trending") elif info == 'traktpopularmovies': return Trakt.get_movies("popular") elif info == 'mostplayedmovies': return Trakt.get_movies_from_time("played") elif info == 'mostwatchedmovies': return Trakt.get_movies_from_time("watched") elif info == 'mostcollectedmovies': return Trakt.get_movies_from_time("collected") elif info == 'mostanticipatedmovies': return Trakt.get_movies("anticipated") elif info == 'traktboxofficemovies': return Trakt.get_movies("boxoffice") elif info == 'similarartistsinlibrary': return local_db.get_similar_artists(params.get("artist_mbid")) elif info == 'trackinfo': addon.clear_global('%sSummary' % params.get("prefix", "")) if params["artistname"] and params["trackname"]: track_info = LastFM.get_track_info(artist_name=params["artistname"], track=params["trackname"]) addon.set_global('%sSummary' % params.get("prefix", ""), track_info["summary"]) elif info == 'topartistsnearevents': artists = local_db.get_artists() import BandsInTown return BandsInTown.get_near_events(artists[0:49]) elif info == 'youtubesearchvideos': addon.set_global('%sSearchValue' % params.get("prefix", ""), params.get("id", "")) if params.get("id"): return youtube.search(search_str=params.get("id", ""), hd=params.get("hd"), orderby=params.get("orderby", "relevance")) elif info == 'youtubeplaylistvideos': return youtube.get_playlist_videos(params.get("id", "")) elif info == 'youtubeusersearchvideos': user_name = params.get("id") if user_name: playlists = youtube.get_user_playlists(user_name) return youtube.get_playlist_videos(playlists["uploads"]) elif info == 'favourites': if params.get("id"): items = favs.get_favs_by_type(params["id"]) else: items = favs.get_favs() addon.set_global('favourite.count', str(len(items))) if items: addon.set_global('favourite.1.name', items[-1]["label"]) return items elif info == "addonsbyauthor": items = favs.get_addons_by_author(params.get("id")) elif info == 'similarlocalmovies' and "dbid" in params: return local_db.get_similar_movies(params["dbid"]) elif info == 'iconpanel': return favs.get_icon_panel(int(params["id"])), "IconPanel" + str(params["id"]) # ACTIONS if params.get("handle"): xbmcplugin.setResolvedUrl(handle=int(params.get("handle")), succeeded=False, listitem=xbmcgui.ListItem()) if info in ['playmovie', 'playepisode', 'playmusicvideo', 'playalbum', 'playsong']: kodijson.play_media(media_type=info.replace("play", ""), dbid=params.get("dbid"), resume=params.get("resume", "true")) elif info == "openinfodialog": if xbmc.getCondVisibility("System.HasActiveModalDialog"): container_id = "" else: container_id = "Container(%s)" % utils.get_infolabel("System.CurrentControlId") dbid = utils.get_infolabel("%sListItem.DBID" % container_id) db_type = utils.get_infolabel("%sListItem.DBType" % container_id) if db_type == "movie": params = {"dbid": dbid, "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "name": utils.get_infolabel("%sListItem.Title" % container_id)} start_info_actions("extendedinfo", params) elif db_type == "tvshow": params = {"dbid": dbid, "tvdb_id": utils.get_infolabel("%sListItem.Property(tvdb_id)" % container_id), "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "name": utils.get_infolabel("%sListItem.Title" % container_id)} start_info_actions("extendedtvinfo", params) elif db_type == "season": params = {"tvshow": utils.get_infolabel("%sListItem.TVShowTitle" % container_id), "season": utils.get_infolabel("%sListItem.Season" % container_id)} start_info_actions("seasoninfo", params) elif db_type == "episode": params = {"tvshow": utils.get_infolabel("%sListItem.TVShowTitle" % container_id), "season": utils.get_infolabel("%sListItem.Season" % container_id), "episode": utils.get_infolabel("%sListItem.Episode" % container_id)} start_info_actions("extendedepisodeinfo", params) elif db_type in ["actor", "director"]: params = {"name": utils.get_infolabel("%sListItem.Label" % container_id)} start_info_actions("extendedactorinfo", params) else: utils.notify("Error", "Could not find valid content type") elif info == "ratedialog": if xbmc.getCondVisibility("System.HasModalDialog"): container_id = "" else: container_id = "Container(%s)" % utils.get_infolabel("System.CurrentControlId") dbid = utils.get_infolabel("%sListItem.DBID" % container_id) db_type = utils.get_infolabel("%sListItem.DBType" % container_id) if db_type == "movie": params = {"dbid": dbid, "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "type": "movie"} start_info_actions("ratemedia", params) elif db_type == "tvshow": params = {"dbid": dbid, "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "type": "tv"} start_info_actions("ratemedia", params) if db_type == "episode": params = {"tvshow": utils.get_infolabel("%sListItem.TVShowTitle" % container_id), "season": utils.get_infolabel("%sListItem.Season" % container_id), "type": "episode"} start_info_actions("ratemedia", params) elif info == 'youtubebrowser': wm.open_youtube_list(search_str=params.get("id", "")) elif info == 'moviedbbrowser': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") search_str = params.get("id", "") if not search_str and params.get("search"): result = xbmcgui.Dialog().input(heading=addon.LANG(16017), type=xbmcgui.INPUT_ALPHANUM) if result and result > -1: search_str = result else: addon.clear_global('infodialogs.active') return None wm.open_video_list(search_str=search_str, mode="search") addon.clear_global('infodialogs.active') elif info == 'extendedinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_movie_info(movie_id=params.get("id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) addon.clear_global('infodialogs.active') elif info == 'extendedactorinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_actor_info(actor_id=params.get("id"), name=params.get("name")) addon.clear_global('infodialogs.active') elif info == 'extendedtvinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_tvshow_info(tmdb_id=params.get("id"), tvdb_id=params.get("tvdb_id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) addon.clear_global('infodialogs.active') elif info == 'seasoninfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_season_info(tvshow=params.get("tvshow"), dbid=params.get("dbid"), season=params.get("season")) addon.clear_global('infodialogs.active') elif info == 'extendedepisodeinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_episode_info(tvshow=params.get("tvshow"), tvshow_id=params.get("tvshow_id"), dbid=params.get("dbid"), episode=params.get("episode"), season=params.get("season")) addon.clear_global('infodialogs.active') elif info == 'albuminfo': if params.get("id"): album_details = AudioDB.get_album_details(params.get("id")) utils.dict_to_windowprops(album_details, params.get("prefix", "")) elif info == 'artistdetails': artist_details = AudioDB.get_artist_details(params["artistname"]) utils.dict_to_windowprops(artist_details, params.get("prefix", "")) elif info == 'ratemedia': media_type = params.get("type") if not media_type: return None if params.get("id"): tmdb_id = params["id"] elif media_type == "movie": tmdb_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid"), name=params.get("name")) elif media_type == "tv" and params.get("dbid"): tvdb_id = local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) tmdb_id = tmdb.get_show_tmdb_id(tvdb_id=tvdb_id) else: return False rating = utils.input_userrating() if rating == -1: return None tmdb.set_rating(media_type=media_type, media_id=tmdb_id, rating=rating, dbid=params.get("dbid")) elif info == 'action': for builtin in params.get("id", "").split("$$"): xbmc.executebuiltin(builtin) elif info == "youtubevideo": xbmc.executebuiltin("Dialog.Close(all,true)") wm.play_youtube_video(params.get("id", "")) elif info == 'playtrailer': busy.show_busy() if params.get("id"): movie_id = params["id"] elif int(params.get("dbid", -1)) > 0: movie_id = local_db.get_imdb_id(media_type="movie", dbid=params["dbid"]) elif params.get("imdb_id"): movie_id = tmdb.get_movie_tmdb_id(params["imdb_id"]) else: movie_id = "" if movie_id: trailers = tmdb.get_movie_videos(movie_id) busy.hide_busy() time.sleep(0.1) if trailers: wm.play_youtube_video(trailers[0]["key"]) elif params.get("title"): wm.open_youtube_list(search_str=params["title"]) else: busy.hide_busy() elif info == 'deletecache': addon.clear_globals() for rel_path in os.listdir(addon.DATA_PATH): path = os.path.join(addon.DATA_PATH, rel_path) try: if os.path.isdir(path): shutil.rmtree(path) except Exception as e: utils.log(e) utils.notify("Cache deleted") elif info == 'tmdbpassword': addon.set_password_prompt("tmdb_password") elif info == 'syncwatchlist': pass