Пример #1
0
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")
Пример #2
0
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
Пример #3
0
 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
Пример #4
0
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("&amp;", "&")
        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("&amp;", "&")
        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()
Пример #5
0
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
Пример #6
0
 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
Пример #7
0
    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