def queue_source(item, depth=0): """ queue item Keyword Arguments: item -- totallyItem to try playing """ from resources.lib.util.url import get_addon_url totally_item = totallyItem(item) playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) if "<item>" in str(totally_item): play = False if xbmcaddon.Addon().getSetting("autostart_queue") == "true": if playlist.size() == 0: play = True playlist.add( get_addon_url("get_sources", str(item)), xbmcgui.ListItem(totally_item["title"], iconImage=totally_item.get("thumbnail", ""))) if play: play_queue() else: link = totally_item.get("url", totally_item.get("link", "")) totallylist = totallyList(link).get_raw_list() for list_item in totallylist: queue_source(str(list_item), depth + 1) if depth == 0: xbmcgui.Dialog().notification(ADDON.getAddonInfo("name"), _("Finished Queueing").encode('utf-8'), ADDON.getAddonInfo("icon")) xbmc.executebuiltin("Container.Refresh")
def get_info(items, dialog=None): from resources.lib.util.xml import totallyItem result = run_hook("get_info", items, dialog) if result: return result koding.reset_db() info = [] num_items = len(items) for index, item_xml in enumerate(items): if dialog: if dialog.iscanceled(): dialog.close() break percent = ((index + 1) * 100) / num_items dialog.update(percent, _("processing metadata"), "%s of %s" % (index + 1, num_items)) if type(item_xml) == dict: item = item_xml else: item = totallyItem(item_xml) item_info = {} content = item.get("content", "") try: if content == "movie": item_info = get_movie_metadata(item["imdb"]) elif content in ["tvshow", "season"]: item_info = get_show_metadata(item["imdb"]) elif content == "episode": item_info = get_episode_metadata(item["imdb"], item["season"], item["episode"]) if type(item_info) == list: item_info = {} if not item_info.get("plotoutline", None): item_info["plotoutline"] = item_info.get("plot", "") except Exception as e: koding.dolog("info error: " + repr(e)) summary = item.get("summary", False) if summary: if not item_info or type(item_info) != dict: item_info = {} item_info["plot"] = summary item_info["manual"] = True info.append(item_info) if dialog: dialog.close() tvdb.clear_cache() return info
def process_item(self, item_xml): if "<lastfm>" in item_xml: item = totallyItem(item_xml) result_item = { 'label': item["title"], 'icon': item.get("thumbnail", addon_icon), 'fanart': item.get("fanart", addon_fanart), 'mode': "lastfm", 'url': item.get("lastfm", ""), 'folder': True, 'imdb': "0", 'content': item.get("content", "files"), 'season': "0", 'episode': "0", 'info': {}, 'year': "0", 'context': get_context_items(item), "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item
def get_sources(item): """ get video_link and try to play it Keyword Arguments: item -- totallyItem to try playing """ result = run_hook("get_sources", item) if result: return if item.startswith("<plugin>"): # link to plugin link = totallyItem(item)["link"] sublinks = totallyItem(link).getAll("sublink") if sublinks: if len(sublinks) > 1: link = choose_quality(link) else: link = sublinks[0] link = link.replace("&", "&") xbmc.executebuiltin('Container.update(' + link + ')') return item = totallyItem(item) link = item["link"] if not link or link.replace("\t", "") == "": return meta = totallyItem(item["meta"]) title = meta["title"] year = meta.get("year", '').split("-")[0].strip() imdb = meta.get("imdb", "") tvdb = meta.get("tvdb", "") season = meta.get("season", "") episode = meta.get("episode", "") tvshowtitle = meta.get("tvshowtitle", None) premiered = meta.get("premiered", "") try: premiered = premiered.split("-")[0].strip() except: if len(premiered) == 4: pass elif not premiered: pass else: koding.dolog("wrong premiered format") busy_dialog = xbmcgui.DialogProgress() dialog = xbmcgui.Dialog() icon = ADDON.getAddonInfo('icon') totallyplayer = totallyPlayer(resume=False) try: spec = { "identifier": imdb, "season": season or "0", "episode": episode or "0" } match = koding.Get_From_Table("watched", spec) if match: match = match[0] if match["currentTime"] and not match["currentTime"] == "0": if dialog.yesno(ADDON.getAddonInfo("name"), _("Previous playback detected"), yeslabel=_("Resume"), nolabel=_("Restart")): totallyplayer = totallyPlayer(resume=True) except: pass totallyplayer.setItem(item) busy_dialog.create(xbmcaddon.Addon().getAddonInfo('name'), _("Processing Link")) preset = choose_quality(link) message = get_searching_message(preset) played = False infolabels = {} if preset: preset = preset.replace("&", "&") busy_dialog.update(0, message) listitem = None fetch_meta = ADDON.getSetting("metadata") == "true" listitem = xbmcgui.ListItem(path=link, iconImage=item.get("thumbnail", icon), thumbnailImage=item.get("thumbnail", icon)) infolabels = {} if fetch_meta and imdb != "0": # only try valid items with imdb try: info, created = get_info([item.item_string]) if info and type(info) == dict: infolabels = info except: pass else: infolabels["title"] = title infolabels["name"] = title if "plotoutline" not in infolabels: infolabels["plotoutline"] = infolabels.get("plot", "") if item.get("content", "") == "song": listitem.setInfo(type='Music', infoLabels={ 'title': meta.get("title", ""), 'artist': meta.get("artist", "") }) else: listitem.setInfo(type="video", infoLabels=infolabels) listitem.setLabel(item.get("title", item.get("name", ""))) if "search" in preset: exclude_scrapers_content = item.get("exclude_scrapers", "") if exclude_scrapers_content: exclude_scrapers = exclude_scrapers_content.split(";") else: exclude_scrapers = None # nanscraper link if item.get("content", "") == "song": artist = item.get("artist", "") played = Sources.get_music_sources(title, artist, preset=preset, dialog=busy_dialog, exclude=exclude_scrapers, listitem=listitem, player=totallyplayer) else: played = Sources.get_sources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, preset=preset, dialog=busy_dialog, listitem=listitem, exclude=exclude_scrapers, player=totallyplayer) elif preset.startswith("http") or preset.startswith("plugin"): # direct link if "/playlist" in preset and "youtube" in preset: busy_dialog.close() xbmc.executebuiltin('Container.update(' + preset + ')') return elif "plugin://plugin.video.youtube/play/?video_id=" in preset: xbmc.executebuiltin("PlayMedia(%s)" % preset) played = True elif item["content"] == "image": busy_dialog.close() xbmc.executebuiltin("ShowPicture(%s)" % preset) played = True else: played = koding.Play_Video(preset, showbusy=False, ignore_dp=True, item=listitem, player=totallyplayer, resolver=resolveurl) else: # who knows busy_dialog.close() koding.dolog("unknown link type: " + repr(preset)) raise Exception() busy_dialog.close() if played: totallyplayer.keep_alive()
def choose_quality(link, name=None, selected_link=None): """ choose quality for scraping Keyword Arguments: link -- totallyitem link with sublinks name -- Name to display in dialog (default None) """ import re if name is None: name = xbmc.getInfoLabel('listitem.label') if link.startswith("http") or link.startswith("plugin"): sublinks = [link] else: totally_link = totallyItem(link) sublinks = totally_link.getAll("sublink") if not sublinks: sublinks = [totally_link] links = [] message = get_link_message() if selected_link is None: default_link = ADDON.getSetting("default_link") else: default_link = selected_link link_dialog = ADDON.getSetting("use_link_dialog") == "true" direct_links = False for sublink in sublinks: if link_dialog and "search" in sublink: continue if "searchsd" in sublink: if default_link == "SD": return sublink label = 'SD' if message['SD'] != '': label += ' (%s)' % message['SD'] new_item = (label, sublink) elif "search" in sublink: if default_link == "HD": return sublink label = 'HD' if message['HD'] != '': label += ' (%s)' % message['HD'] new_item = (label, sublink) else: direct_links = True match = re.findall("(.*?)\((.*?)\)", sublink) if match: new_item = ('%s' % match[0][1], match[0][0]) else: new_item = ('Link %s' % (int(sublinks.index(sublink)) + 1), sublink) links.append(new_item) if link_dialog and (not direct_links or len(sublinks) > 1): links.append(("Search", "search")) if len(links) == 1: url = links[0][1] return url select = xbmcgui.Dialog().select(name, [i[0] for i in links]) if select == -1: return False else: url = links[select][1] return url
def process_item(self, item_xml): if "<tmdb>" in item_xml: item = totallyItem(item_xml) result_item = { 'label': item["title"], 'icon': item.get("thumbnail", addon_icon), 'fanart': item.get("fanart", addon_fanart), 'mode': "tmdb", 'url': item.get("tmdb", ""), 'folder': True, 'imdb': "0", 'content': "files", 'season': "0", 'episode': "0", 'info': {}, 'year': "0", 'context': get_context_items(item), "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item elif "tmdb_tv_show" in item_xml: item = totallyItem(item_xml) url = item.get("link", ")").replace("tmdb_tv_show(", "")[:-1] result_item = { 'label': item["title"], 'icon': item["thumbnail"], 'fanart': item.get("fanart", addon_fanart), 'mode': "tmdb_tv_show", 'url': "tmdb_id" + url, 'folder': True, 'content': "tvshows", 'season': "0", 'episode': "0", 'info': {}, "imdb": item.get("imdb", "0"), 'year': item.get("year", ""), 'context': get_context_items(item), "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item elif "tmdb_season(" in item_xml: item = totallyItem(item_xml) url = item.get("link", ")").replace("tmdb_season(", "")[:-1] season = url.split(",")[1] result_item = { 'label': item["title"], 'icon': item["thumbnail"], 'fanart': item.get("fanart", addon_fanart), 'mode': "tmdb_season", 'url': "tmdb_id" + url, 'folder': True, 'content': "seasons", 'season': str(season), 'episode': "0", 'info': {}, "imdb": item.get("imdb", "0"), 'year': item.get("year", ""), 'context': {}, "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item
def process_item(self, item_xml): #item_xml = remove_non_ascii(item_xml) if "<trakt>" in item_xml: item = totallyItem(item_xml) result_item = { 'label': item["title"], 'icon': item.get("thumbnail", addon_icon), 'fanart': item.get("fanart", addon_fanart), 'mode': "trakt", 'url': item.get("trakt", ""), 'folder': True, 'imdb': "0", 'content': "files", 'season': "0", 'episode': "0", 'info': {}, 'year': "0", 'context': get_context_items(item), "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item elif "trakt_tv_show(" in item_xml: item = totallyItem(item_xml) url = item.get("link", ")").replace("trakt_tv_show(", "")[:-1] result_item = { 'label': item["title"], 'icon': item.get("thumbnail", addon_icon), 'fanart': item.get("fanart", addon_fanart), 'mode': "trakt_tv_show", 'url': "trakt_id" + url, 'folder': True, 'imdb': item.get("imdb", ""), 'content': "tvshows", 'season': "0", 'episode': "0", 'info': {}, 'year': item.get("year", ""), 'context': get_context_items(item), "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item elif "trakt_season(" in item_xml: item = totallyItem(item_xml) url = item.get("link", ")").replace("trakt_season(", "")[:-1] season = url.split(",")[1] result_item = { 'label': item["title"], 'icon': item.get("thumbnail", addon_icon), 'fanart': item.get("fanart", addon_fanart), 'mode': "trakt_season", 'url': "trakt_id" + url, 'folder': True, 'imdb': item.get("imdb", ""), 'content': "seasons", 'season': str(season), 'episode': "0", 'info': {}, 'year': item.get("year", ""), 'context': get_context_items(item), "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item elif "trakt_list(" in item_xml: item = totallyItem(item_xml) url = item.get("link", ")").replace("trakt_list(", "")[:-1] user_id, list_id = url.split(",") list_url = "https://api.trakt.tv/users/%s/lists/%s/items/" % ( user_id, list_id) result_item = { 'label': item["title"], 'icon': item.get("thumbnail", addon_icon), 'fanart': item.get("fanart", addon_fanart), 'mode': "trakt", 'url': list_url, 'folder': True, 'imdb': item.get("imdb", ""), 'content': "files", 'season': "0", 'episode': "0", 'info': {}, 'year': item.get("year", ""), 'context': {}, "summary": item.get("summary", None) } result_item["properties"] = {'fanart_image': result_item["fanart"]} result_item['fanart_small'] = result_item["fanart"] return result_item return False