def get_tvdb_id_from_imdb_id(imdb_id): import_tvdb() tvdb_id = tvdb.search_by_imdb(imdb_id) if not tvdb_id: dialogs.ok(_("Show not found"), "{0} {1} in tvdb".format(_("no show information found for"), imdb_id)) return return tvdb_id
def update_library(): import_tvdb() folder_path = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER) if not xbmcvfs.exists(folder_path): return # get library folder library_folder = setup_library(folder_path) # get shows in library try: shows = xbmcvfs.listdir(library_folder)[0] except: shows = [] # update each show clean_needed = False updated = 0 for id in shows: id = int(id) # add to library with tvdb.session.cache_disabled(): if add_tvshow_to_library(library_folder, tvdb[id]): clean_needed = True updated += 1 if clean_needed: set_property("clean_library", 1) # start scan if updated > 0: scan_library()
def get_tvdb_id_from_name(name, lang): import_tvdb() search_results = tvdb.search(name, language=lang) if not search_results: dialogs.ok( _("Show not found"), "{0} {1} in tvdb".format(_("no show information found for"), to_utf8(name))) return items = [] for show in search_results: if "firstaired" in show: show["year"] = int(show['firstaired'].split("-")[0].strip()) else: show["year"] = 0 items.append(show) if len(items) > 1: selection = dialogs.select(_("Choose Show"), [ "{0} ({1})".format(to_utf8(s["seriesname"]), s["year"]) for s in items ]) else: selection = 0 if selection != -1: return items[selection]["id"]
def list_tvshows(response): """ TV shows listing """ import_tvdb() # Attach TVDB data to TMDB results items = [] results = response['results'] for tvdb_show, tmdb_show in 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.abortRequested: return # Paging if 'page' in response: page = response['page'] args = caller_args() if page < response['total_pages']: args['page'] = str(page + 1) items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for(caller_name(), **args) }) return items
def list_tvshows(response): """ TV shows listing """ import_tvdb() # Attach TVDB data to TMDB results items = [] results = response['results'] for tvdb_show, tmdb_show in execute(tmdb_to_tvdb, results, workers=10): if tvdb_show is not None: items.append(make_tvshow_item(tvdb_show, tmdb_show)) if xbmc.abortRequested: return # Paging if 'page' in response: page = response['page'] args = caller_args() if page < response['total_pages']: args['page'] = str(page + 1) items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for(caller_name(), **args) }) return items
def tv_add_to_library(id): import_tvdb() show = tvdb[int(id)] # get active players players = active_players("tvshows", filters = {'network': show.get('network')}) # add default and selector options players.insert(0, ADDON_SELECTOR) players.insert(0, ADDON_DEFAULT) # let the user select one player selection = dialogs.select(_("Play with..."), [p.title for p in players]) if selection == -1: return # get selected player player = players[selection] # setup library folder library_folder = setup_library(plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)) # add to library if add_tvshow_to_library(library_folder, show, player.id): set_property("clean_library", 1) # start scan scan_library()
def tv_batch_add_to_library(): """ Batch add tv shows to library """ tv_batch_file = plugin.get_setting(SETTING_TV_BATCH_ADD_FILE_PATH) if xbmcvfs.exists(tv_batch_file): try: f = open(xbmc.translatePath(tv_batch_file), 'r') r = f.read() f.close() ids = r.split('\n') except: return plugin.notify(msg='TVShows Batch Add File', title='Not found', delay=3000, image=get_icon_path("tv")) library_folder = setup_library(plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)) import_tvdb() for id in ids: if "," in id: csvs = id.split(',') for csv in csvs: if str(csv).startswith("tt") and csv != "": tvdb_id = get_tvdb_id_from_imdb_id(csv) else: tvdb_id = csv show = tvdb[int(tvdb_id)] batch_add_tvshows_to_library(library_folder, show) else: if str(id).startswith("tt") and id != "": tvdb_id = get_tvdb_id_from_imdb_id(id) else: tvdb_id = id if tvdb_id != "" and tvdb_id != None: show = tvdb[int(tvdb_id)] batch_add_tvshows_to_library(library_folder, show) os.remove(xbmc.translatePath(tv_batch_file)) plugin.notify(msg='Adding tvshow strm-files', title='Starting library scan afterwards', delay=3000, image=get_icon_path("tv")) update_library() return True
def list_seasons_tvdb(id): import_tvdb() id = int(id) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) context_menu = [ ( _("Show info"), 'Action(Info)' ) ] items = [] for (season_num, season) in show.items(): if season_num == 0 or not season.has_aired(): continue season_info = get_season_metadata_tvdb(show_info, season) items.append({'label': u"%s %d" % (_("Season"), 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'], 'icon': "DefaultVideo.png", 'poster': season_info['poster'], 'properties' : {'fanart_image' : season_info['fanart']}, }) return items
def list_episodes_tvdb(id, season_num): import_tvdb() id = int(id) season_num = int(season_num) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) title = show_info['name'] season = show[season_num] season_info = get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if episode_num == 0 or not episode.has_aired(flexible=True): break episode_info = get_episode_metadata_tvdb(season_info, episode) if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"): context_menu = [(_("[COLOR ff0084ff]Q[/COLOR]lick[COLOR ff0084ff]P[/COLOR]lay"), "RunScript(script.qlickplay,info=episodeinfo,tvshow={0},season={1},episode={2})".format(title, season_num, episode_num)), (_("TV trailer"),"RunScript(script.qlickplay,info=playtvtrailer,tvdb_id={0})".format(id)), (_("Recommended tv shows (TMDb)"),"ActivateWindow(10025,plugin://script.qlickplay/?info=similartvshows&tvdb_id={0})".format(id))] elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"): context_menu = [(_("Extended episode info"), "RunScript(script.extendedinfo,info=episodeinfo,tvshow={0},season={1},episode={2})".format(title, season_num, episode_num)), (_("TV trailer"),"RunScript(script.extendedinfo,info=playtvtrailer,tvdb_id={0})".format(id)), (_("Recommended tv shows (TMDb)"),"ActivateWindow(10025,plugin://script.extendedinfo/?info=similartvshows&tvdb_id={0})".format(id))] else: context_menu = [] context_menu.append((_("Select stream..."),"PlayMedia({0})".format(plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='select')))) context_menu.append((_("Add to list"), "RunPlugin({0})".format(plugin.url_for("lists_add_episode_to_list", src='tvdb', id=id, season=season_num, episode = episode_num)))) context_menu.append((_("Show info"),'Action(Info)')) items.append({'label': episode_info.get('title'), 'path': plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'thumbnail': episode_info['poster'], 'poster': season_info['poster'], 'icon': "DefaultVideo.png", 'properties' : {'fanart_image' : episode_info['fanart']}, }) return items
def tv_add_to_library(id): import_tvdb() library_folder = setup_library(plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)) show = tvdb[int(id)] imdb = show['imdb_id'] # get active players players = active_players("tvshows", filters = {'network': show.get('network')}) # get selected player if plugin.get_setting(SETTING_TV_DEFAULT_AUTO_ADD, bool) == True: player = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_LIBRARY, unicode) else: players.insert(0, ADDON_SELECTOR) players.insert(0, ADDON_DEFAULT) selection = dialogs.select(_("Play with..."), [p.title for p in players]) if selection == -1: return player = players[selection] # setup library folder library_folder = setup_library(plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)) # add to library if plugin.get_setting('tv_default_auto_add', bool): if add_tvshow_to_library(library_folder, show, player): set_property("clean_library", 1) else: if add_tvshow_to_library(library_folder, show, player.id): set_property("clean_library", 1) # start scan scan_library(type="video")
def update_library(): import_tvdb() folder_path = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER, unicode) if not xbmcvfs.exists(folder_path): return # get library folder library_folder = setup_library(folder_path) # get shows in library try: shows = xbmcvfs.listdir(library_folder)[0] except: shows = [] # update each show clean_needed = False updated = 0 for id in shows: id = int(id) # add to library with tvdb.session.cache_disabled(): if add_tvshow_to_library(library_folder, tvdb[id]): clean_needed = True updated += 1 if clean_needed: set_property("clean_library", 1) # start scan if updated > 0: scan_library(type="video", path=plugin.get_setting(SETTING_TV_LIBRARY_FOLDER, unicode))
def tv_add_to_library(id): import_tvdb() show = tvdb[int(id)] # get active players players = active_players("tvshows", filters={'network': show.get('network')}) # add default and selector options players.insert(0, ADDON_SELECTOR) players.insert(0, ADDON_DEFAULT) # let the user select one player selection = dialogs.select(_("Play with..."), [p.title for p in players]) if selection == -1: return # get selected player player = players[selection] # setup library folder library_folder = setup_library( plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)) # add to library if add_tvshow_to_library(library_folder, show, player.id): set_property("clean_library", 1) # start scan scan_library()
def list_episodes_tvdb(id, season_num): import_tvdb() id = int(id) season_num = int(season_num) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) season = show[season_num] season_info = get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if episode_num == 0 or not episode.has_aired(flexible=True): break episode_info = get_episode_metadata_tvdb(season_info, episode) context_menu = [(_("Select stream..."), "PlayMedia({0})".format( plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='select'))), (_("Show info"), 'Action(Info)')] items.append({ 'label': episode_info.get('title'), 'path': plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'thumbnail': episode_info['poster'], 'poster': season_info['poster'], 'icon': "DefaultVideo.png", 'properties': { 'fanart_image': episode_info['fanart'] }, }) return items
def tvdb_tv_search_term(term, page): """ Perform search of a specified <term>""" import_tvdb() search_results = tvdb.search(term, language=LANG) items = [] load_full_tvshow = lambda tvshow : tvdb.get_show(tvshow['id'], full=True) for tvdb_show in execute(load_full_tvshow, search_results, workers=10): info = build_tvshow_info(tvdb_show) items.append(make_tvshow_item(info)) if FORCE == True: plugin.set_view_mode(VIEW); return items else: return items
def list_episodes_tvdb(id, season_num): import_tvdb() id = int(id) season_num = int(season_num) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) season = show[season_num] season_info = get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if episode_num == 0 or not episode.has_aired(flexible=True): break episode_info = get_episode_metadata_tvdb(season_info, episode) context_menu = [ ( _("Select stream..."), "PlayMedia({0})".format(plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='select')) ), ( _("Show info"), 'Action(Info)' ), ( _("Add to list"), "RunPlugin({0})".format(plugin.url_for("lists_add_episode_to_list", src='tvdb', id=id, season=season_num, episode = episode_num)) ), ] items.append({'label': episode_info.get('title'), 'path': plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'thumbnail': episode_info['poster'], 'poster': season_info['poster'], 'icon': "DefaultVideo.png", 'properties' : {'fanart_image' : episode_info['fanart']}, }) return items
def tv_search_term(term, page): """ Perform search of a specified <term>""" # import_tmdb() # result = tmdb.Search().tv(query=term, language=LANG, page=page) # return list_tvshows(result) import_tvdb() search_results = tvdb.search(term, language=LANG) items = [] load_full_tvshow = lambda tvshow : tvdb.get_show(tvshow['id'], full=True) for tvdb_show in execute(load_full_tvshow, search_results, workers=10): items.append(make_tvshow_item(tvdb_show)) return items
def tv_search_term(term, page): """ Perform search of a specified <term>""" # import_tmdb() # result = tmdb.Search().tv(query=term, language=LANG, page=page) # return list_tvshows(result) import_tvdb() search_results = tvdb.search(term, language=LANG) items = [] load_full_tvshow = lambda tvshow: tvdb.get_show(tvshow['id'], full=True) for tvdb_show in execute(load_full_tvshow, search_results, workers=10): info = build_tvshow_info(tvdb_show) items.append(make_tvshow_item(info)) return items
def batch_find_list_ids(items): tv_ids = [] misc_ids = [] movie_ids = [] import_tvdb() for item in items: if not isinstance(item, type): if "'tvdb': " in str(item) or "'tvdb_id': " in str(item): if "'tvdb': " in str(item): pre_tvdb = str(item).split("'tvdb': ") elif "'tvdb_id': " in str(item): pre_tvdb = str(item).split("'tvdb_id': ") if len(pre_tvdb) == 2: pro_tvdb = str(pre_tvdb[1]).split(",") elif len(pre_tvdb) == 3: pro_tvdb = str(pre_tvdb[2]).split(",") tvdb_id = str(pro_tvdb[0]) if not tvdb_id or tvdb_id == None or tvdb_id =="None": pre_imdb = str(item).split("u'imdb': u'") pro_imdb = str(pre_imdb[1]).split("'") imdb = str(pro_imdb[0]) tvdb_id = tvdb.search_by_imdb(imdb) if not tvdb_id: misc_ids.append(imdb) if not tvdb_id in tv_ids and tvdb_id != None and tvdb_id !="None": tv_ids.append(tvdb_id) elif "'tmdb': " in str(item): pre_tmdb = str(item).split("'tmdb': ") pro_tmdb = str(pre_tmdb[1]).split(",") tmdb = str(pro_tmdb[0]) if not tmdb or tmdb == None or tmdb =="None": pre_imdb = str(item).split("u'imdb': u'") pro_imdb = str(pre_imdb[1]).split("'") imdb = str(pro_imdb[0]) tvdb_id = tvdb.search_by_imdb(imdb) if not imdb and not tvdb_id: return dialogs.notify(msg="No id found for item", title='', delay=3000, image=get_icon_path("metalliq")) if imdb and not tvdb_id: if imdb not in movie_ids and imdb != None and imdb !="None": movie_ids.append(imdb) elif tvdb_id: if not tvdb_id in tv_ids and tvdb_id != None and tvdb_id !="None": tv_ids.append(tvdb_id) if not tmdb in movie_ids and tmdb != None and tmdb !="None": movie_ids.append(tmdb) else: if "tvshowtitle" in str(item["info"]): if item["info"]["tvdb_id"] != None and item["info"]["tvdb_id"] != "" and str(item["info"]["tvdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["tvdb_id"])) elif item["info"]["imdb_id"] != None and item["info"]["imdb_id"] != "" and str(item["info"]["imdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["imdb_id"])) else: if item["info"]["tmdb"] != None and item["info"]["tmdb"] != "" and str(item["info"]["tmdb"]) not in movie_ids: movie_ids.append(str(item["info"]["tmdb"])) elif item["info"]["imdb_id"] != None and item["info"]["imdb_id"] != "" and str(item["info"]["imdb_id"]) not in movie_ids: movie_ids.append(str(item["info"]["imdb_id"])) return misc_ids, movie_ids, tv_ids
def tv_add_all_to_library(items): import_tvdb() # setup library folder library_folder = setup_library(plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)) # add to library for item in items: ids = item["show"]["ids"] tvdb_id = ids.get('tvdb') if not tvdb_id: continue show = tvdb[int(tvdb_id)] if plugin.get_setting(SETTING_TV_DEFAULT_AUTO_ADD, bool) == True: if add_tvshow_to_library(library_folder, show, plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_LIBRARY, unicode)): set_property("clean_library", 1) else: if add_tvshow_to_library(library_folder, show, ADDON_DEFAULT.id): set_property("clean_library", 1) # start scan scan_library(type="video")
def tv_add_all_to_library(items): import_tvdb() # setup library folder library_folder = setup_library(plugin.get_setting(SETTING_TV_LIBRARY_FOLDER)) # add to library for item in items: ids = item["show"]["ids"] tvdb_id = ids.get('tvdb') if not tvdb_id: continue show = tvdb[int(tvdb_id)] if add_tvshow_to_library(library_folder, show, ADDON_DEFAULT.id): set_property("clean_library", 1) # start scan scan_library()
def list_seasons_tvdb(id): import_tvdb() id = int(id) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) items = [] for (season_num, season) in show.items(): if season_num == 0 or not season.has_aired(flexible=True): continue season_info = get_season_metadata_tvdb(show_info, season) context_menu = [(_("Show info"), 'Action(Info)'), (_("Add to list"), "RunPlugin({0})".format( plugin.url_for("lists_add_season_to_list", src='tvdb', id=id, season=season_num)))] items.append({ 'label': u"%s %d" % (_("Season"), 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'], 'icon': "DefaultVideo.png", 'poster': season_info['poster'], 'properties': { 'fanart_image': season_info['fanart'] }, }) return items
def list_seasons_tvdb(id): import_tvdb() id = int(id) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) title = show_info['name'] items = [] for (season_num, season) in show.items(): if season_num == 0 or not season.has_aired(flexible=True): continue season_info = get_season_metadata_tvdb(show_info, season) if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"): context_menu = [(_("[COLOR ff0084ff]Q[/COLOR]lick[COLOR ff0084ff]P[/COLOR]lay"), "RunScript(script.qlickplay,info=seasoninfo,tvshow={0},season={1})".format(title, season_num)), (_("TV trailer"),"RunScript(script.qlickplay,info=playtvtrailer,tvdb_id={0})".format(id)), (_("Recommended tv shows (TMDb)"),"ActivateWindow(10025,plugin://script.qlickplay/?info=similartvshows&tvdb_id={0})".format(id))] elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"): context_menu = [(_("Extended season info"), "RunScript(script.extendedinfo,info=seasoninfo,tvshow={0},season={1})".format(title, season_num)), (_("TV trailer"),"RunScript(script.extendedinfo,info=playtvtrailer,tvdb_id={0})".format(id)), (_("Recommended tv shows (TMDb)"),"ActivateWindow(10025,plugin://script.extendedinfo/?info=similartvshows&tvdb_id={0})".format(id))] else: context_menu = [] items.append({'label': u"%s %d" % (_("Season"), 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'], 'icon': "DefaultVideo.png", 'poster': season_info['poster'], 'properties' : {'fanart_image' : season_info['fanart']}, }) return items
def get_tvdb_id_from_name(name, lang): import_tvdb() search_results = tvdb.search(name, language=lang) if search_results == []: dialogs.ok(_("Show not found"), "{0} {1} in tvdb".format(_("no show information found for"), to_utf8(name))) return items = [] for show in search_results: if "firstaired" in show: show["year"] = int(show['firstaired'].split("-")[0].strip()) else: show["year"] = 0 items.append(show) if len(items) > 1: selection = dialogs.select(_("Choose Show"), ["{0} ({1})".format( to_utf8(s["seriesname"]), s["year"]) for s in items]) else: selection = 0 if selection != -1: return items[selection]["id"]
def play_episode_from_guide(id, season, episode, mode): import_tvdb() id = int(id) season = int(season) episode = int(episode) dbid = xbmc.getInfoLabel("ListItem.DBID") try: dbid = int(dbid) except: dbid = None show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) if mode == 'select': play_plugin = ADDON_PICKER.id elif mode == 'default': play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_CHANNELER, unicode) else: play_plugin = mode channelers = active_channelers("tvshows", filters = {'network': show.get('network')}) channelers = [p for p in channelers if p.id == play_plugin] or channelers if not channelers: xbmc.executebuiltin( "Action(Info)") action_cancel() return trakt_ids = get_trakt_ids("tvdb", id, show['seriesname'], "show", show.get('year', 0)) params = {} for lang in get_needed_langs(channelers): if lang == LANG: tvdb_data = show else: tvdb_data = create_tvdb(lang)[id] if tvdb_data['seriesname'] is None: continue episode_parameters = get_episode_parameters(tvdb_data, season, episode) if episode_parameters is not None: params[lang] = episode_parameters else: msg = "{0} {1} - S{1}E{2}".format(_("No tvdb information found for"), show['seriesname'], season, episode) dialogs.ok(_("%s not found") % _("Episode information"), msg) return if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = to_unicode(params[lang]) link = on_play_video(mode, channelers, params, trakt_ids) if link: set_property("data", json.dumps({'dbid': dbid, 'tvdb': id, 'season': season, 'episode': episode})) season_info = get_season_metadata_tvdb(show_info, show[season], banners=False) episode_info = get_episode_metadata_tvdb(season_info, show[season][episode]) 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'], 'properties' : {'fanart_image' : episode_info['fanart']}, })
def play_episode(id, season, episode, mode): import_tvdb() id = int(id) season = int(season) episode = int(episode) # Get database id dbid = xbmc.getInfoLabel("ListItem.DBID") try: dbid = int(dbid) except: dbid = None # Get show data from TVDB show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) # Get players to use if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'context': play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_CONTEXT, unicode) elif mode == 'library': play_plugin = get_tv_player_plugin_from_library(id) if not play_plugin or play_plugin == "default": play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_LIBRARY, unicode) elif mode == 'default': play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER, unicode) else: play_plugin = mode if mode == 'default' or mode == 'select': players = active_players("tvshows", filters = {'network': show.get('network')}) else: players = get_players("tvshows", filters = {'network': show.get('network')}) players = [p for p in players if p.id == play_plugin] or players if not players: return xbmc.executebuiltin( "Action(Info)") # Get show ids from Trakt trakt_ids = get_trakt_ids("tvdb", id, show['seriesname'], "show", show.get('year', 0)) # Get parameters params = {} for lang in get_needed_langs(players): if lang == LANG: tvdb_data = show else: tvdb_data = create_tvdb(lang)[id] if tvdb_data['seriesname'] is None: continue episode_parameters = get_episode_parameters(tvdb_data, season, episode) if episode_parameters is not None: params[lang] = episode_parameters else: if trakt_ids["tmdb"] != None and trakt_ids["tmdb"] != "": return tmdb_play_episode(trakt_ids["tmdb"], season, episode, mode) elif trakt_ids["tvdb"] == None or trakt_ids["tvdb"] == "": msg = "{0} {1} - S{2}E{3}".format(_("No TVDb information found for"), show_info['name'], season, episode) return dialogs.ok(_("%s not found") % _("Episode information"), msg) else: msg = "{0} {1} - S{2}E{3}".format(_("No TVDb or TMDb information found for"), show_info['name'], season, episode) return dialogs.ok(_("%s not found") % _("Episode information"), msg) if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = to_unicode(params[lang]) # Go for it link = on_play_video(mode, players, params, trakt_ids) if link: # set properties set_property("data", json.dumps({'dbid': dbid, 'tvdb': id, 'season': season, 'episode': episode})) # Play season_info = get_season_metadata_tvdb(show_info, show[season], banners=False) episode_info = get_episode_metadata_tvdb(season_info, show[season][episode]) 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'], 'properties' : {'fanart_image' : episode_info['fanart']}, })
def play_episode(id, season, episode, mode): import_tvdb() id = int(id) season = int(season) episode = int(episode) # Get database id dbid = xbmc.getInfoLabel("ListItem.DBID") try: dbid = int(dbid) except: dbid = None # Get show data from TVDB show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) # Get active players players = active_players("tvshows", filters = {'network': show.get('network')}) if not players: xbmc.executebuiltin( "Action(Info)") action_cancel() return # Get player to use if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'library': play_plugin = get_player_plugin_from_library(id) if not play_plugin: play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_LIBRARY) else: play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER) # Use just selected player if exists (selectors excluded) players = [p for p in players if p.id == play_plugin] or players # Get show ids from Trakt trakt_ids = get_trakt_ids("tvdb", id, show['seriesname'], "show", show.get('year', 0)) # Preload params params = {} for lang in get_needed_langs(players): if lang == LANG: tvdb_data = show else: tvdb_data = create_tvdb(lang)[id] if tvdb_data['seriesname'] is None: continue params[lang] = get_episode_parameters(tvdb_data, season, episode) params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = to_unicode(params[lang]) # BETA action_cancel() # Get single video selection use_simple_selector = plugin.get_setting(SETTING_USE_SIMPLE_SELECTOR, converter=bool) selection = get_video_link(players, params, mode, use_simple_selector) if not selection: #action_cancel() return # Get selection details link = selection['path'] action = selection.get('action', '') plugin.log.info('Playing url: %s' % link.encode('utf-8')) # Activate link if action == "ACTIVATE": action_activate(link) else: # Build list item (needed just for playback from widgets) season_info = get_season_metadata_tvdb(show_info, show[season], banners=False) episode_info = get_episode_metadata_tvdb(season_info, show[season][episode]) listitem = { 'label': episode_info['title'], 'path': link, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'properties' : {'fanart_image' : episode_info['fanart']}, } # set properties if trakt_ids: set_property('script.trakt.ids', json.dumps(trakt_ids)) set_property("data", json.dumps({'dbid': dbid, 'tvdb': id, 'season': season, 'episode': episode})) # Play if action == "PLAY": action_play(listitem) else: action_resolve(listitem)
def play_episode_from_guide(id, season, episode, mode): import_tvdb() id = int(id) season = int(season) episode = int(episode) dbid = xbmc.getInfoLabel("ListItem.DBID") try: dbid = int(dbid) except: dbid = None show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) if mode == 'select': play_plugin = ADDON_PICKER.id elif mode == 'default': play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_CHANNELER) else: play_plugin = mode channelers = active_channelers("tvshows", filters = {'network': show.get('network')}) channelers = [p for p in channelers if p.id == play_plugin] or channelers if not channelers: xbmc.executebuiltin( "Action(Info)") action_cancel() return trakt_ids = get_trakt_ids("tvdb", id, show['seriesname'], "show", show.get('year', 0)) params = {} for lang in get_needed_langs(channelers): if lang == LANG: tvdb_data = show else: tvdb_data = create_tvdb(lang)[id] if tvdb_data['seriesname'] is None: continue episode_parameters = get_episode_parameters(tvdb_data, season, episode) if episode_parameters is not None: params[lang] = episode_parameters else: msg = "{0} {1} - S{1}E{2}".format(_("No tvdb information found for"), show['seriesname'], season, episode) dialogs.ok(_("Episode info not found"), msg) return if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = to_unicode(params[lang]) link = on_play_video(mode, channelers, params, trakt_ids) if link: set_property("data", json.dumps({'dbid': dbid, 'tvdb': id, 'season': season, 'episode': episode})) season_info = get_season_metadata_tvdb(show_info, show[season], banners=False) episode_info = get_episode_metadata_tvdb(season_info, show[season][episode]) 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'], 'properties' : {'fanart_image' : episode_info['fanart']}, })
def play_episode(id, season, episode, mode): import_tvdb() id = int(id) season = int(season) episode = int(episode) # Get database id dbid = xbmc.getInfoLabel("ListItem.DBID") try: dbid = int(dbid) except: dbid = None # Get show data from TVDB show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) # Get players to use if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'library': play_plugin = get_player_plugin_from_library(id) if not play_plugin or play_plugin == "default": play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_LIBRARY) else: play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER) players = active_players("tvshows", filters = {'network': show.get('network')}) players = [p for p in players if p.id == play_plugin] or players if not players: xbmc.executebuiltin( "Action(Info)") action_cancel() return # Get show ids from Trakt trakt_ids = get_trakt_ids("tvdb", id, show['seriesname'], "show", show.get('year', 0)) # Get parameters params = {} for lang in get_needed_langs(players): if lang == LANG: tvdb_data = show else: tvdb_data = create_tvdb(lang)[id] if tvdb_data['seriesname'] is None: continue episode_parameters = get_episode_parameters(tvdb_data, season, episode) if episode_parameters is not None: params[lang] = episode_parameters else: msg = "{0} {1} - S{1}E{2}".format(_("No tvdb information found for"), show['seriesname'], season, episode) dialogs.ok(_("Episode info not found"), msg) return params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = to_unicode(params[lang]) # Go for it link = on_play_video(mode, players, params, trakt_ids) if link: # set properties set_property("data", json.dumps({'dbid': dbid, 'tvdb': id, 'season': season, 'episode': episode})) # Play season_info = get_season_metadata_tvdb(show_info, show[season], banners=False) episode_info = get_episode_metadata_tvdb(season_info, show[season][episode]) 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'], 'properties' : {'fanart_image' : episode_info['fanart']}, })
def play_episode(id, season, episode, mode): import_tvdb() id = int(id) season = int(season) episode = int(episode) # Get database id dbid = xbmc.getInfoLabel("ListItem.DBID") try: dbid = int(dbid) except: dbid = None # Get show data from TVDB show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) # Get players to use if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'library': play_plugin = get_player_plugin_from_library(id) if not play_plugin: play_plugin = plugin.get_setting( SETTING_TV_DEFAULT_PLAYER_FROM_LIBRARY) else: play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER) players = active_players("tvshows", filters={'network': show.get('network')}) players = [p for p in players if p.id == play_plugin] or players if not players: xbmc.executebuiltin("Action(Info)") action_cancel() return # Get show ids from Trakt trakt_ids = get_trakt_ids("tvdb", id, show['seriesname'], "show", show.get('year', 0)) # Get parameters params = {} for lang in get_needed_langs(players): if lang == LANG: tvdb_data = show else: tvdb_data = create_tvdb(lang)[id] if tvdb_data['seriesname'] is None: continue params[lang] = get_episode_parameters(tvdb_data, season, episode) params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = to_unicode(params[lang]) # Go for it link = on_play_video(mode, players, params, trakt_ids) if link: # set properties set_property( "data", json.dumps({ 'dbid': dbid, 'tvdb': id, 'season': season, 'episode': episode })) # Play season_info = get_season_metadata_tvdb(show_info, show[season], banners=False) episode_info = get_episode_metadata_tvdb(season_info, show[season][episode]) 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'], 'properties': { 'fanart_image': episode_info['fanart'] }, })