コード例 #1
0
ファイル: shortcuts.py プロジェクト: Muzic98/addon
def servers_menu(item):
    # from core.support import dbg; dbg()
    from core import servertools
    from core.item import Item
    from platformcode import config, platformtools
    from specials import setting

    names = []
    ids = []

    if item.type == 'debriders':
        action = 'server_debrid_config'
        server_list = list(servertools.get_debriders_list().keys())
        for server in server_list:
            server_parameters = servertools.get_server_parameters(server)
            if server_parameters['has_settings']:
                names.append(server_parameters['name'])
                ids.append(server)

        select = platformtools.dialog_select(
            config.get_localized_string(60552), names)
        if select != -1:
            ID = ids[select]

            it = Item(channel='settings', action=action, config=ID)
            setting.server_debrid_config(it)
    else:
        action = 'server_config'
        server_list = list(servertools.get_servers_list().keys())
        for server in sorted(server_list):
            server_parameters = servertools.get_server_parameters(server)
            if server_parameters["has_settings"] and [
                    x for x in server_parameters["settings"]
                    if x["id"] not in ["black_list", "white_list"]
            ]:
                names.append(server_parameters['name'])
                ids.append(server)

        select = platformtools.dialog_select(
            config.get_localized_string(60538), names)
        if select != -1:
            ID = ids[select]

            it = Item(channel='settings', action=action, config=ID)

            setting.server_config(it)
    if select != -1:
        servers_menu(item)
コード例 #2
0
ファイル: unify.py プロジェクト: Jpocas3212/salva59sg
def thumbnail_type(item):
    #logger.info()
    # Se comprueba que tipo de thumbnail se utilizara en findvideos,
    # Poster o Logo del servidor

    thumb_type = config.get_setting('video_thumbnail_type')
    info = item.infoLabels
    if not item.contentThumbnail:
        item.contentThumbnail = item.thumbnail

    if info:
        if info['thumbnail'] != '':
            item.contentThumbnail = info['thumbnail']

        if item.action == 'play':
            if thumb_type == 0:
                if info['thumbnail'] != '':
                    item.thumbnail = info['thumbnail']
            elif thumb_type == 1:
                from core.servertools import get_server_parameters
                #logger.debug('item.server: %s'%item.server)
                server_parameters = get_server_parameters(item.server.lower())
                item.thumbnail = server_parameters.get("thumbnail",
                                                       item.contentThumbnail)

    return item.thumbnail
コード例 #3
0
ファイル: unify.py プロジェクト: whiplash78/addon
def thumbnail_type(item):
    # logger.info()
    # Check what type of thumbnail will be used in findvideos, Poster or Logo of the server

    thumb_type = config.get_setting('video_thumbnail_type')
    info = item.infoLabels
    if not item.contentThumbnail:
        item.contentThumbnail = item.thumbnail

    if info:
        if info['thumbnail'] != '':
            item.contentThumbnail = info['thumbnail']

        if item.action == 'play':
            if thumb_type == 0:
                if info['thumbnail'] != '':
                    item.thumbnail = info['thumbnail']
            elif thumb_type == 1:
                from core.servertools import get_server_parameters
                # logger.debug('item.server: %s'%item.server)
                server_parameters = get_server_parameters(item.server.lower())
                item.thumbnail = server_parameters.get("thumbnail",
                                                       item.contentThumbnail)

    return item.thumbnail
コード例 #4
0
ファイル: configuracion.py プロジェクト: d3v3l0p1n/mitvspain
def menu_servers(item):
    logger.info()
    itemlist = list()

    itemlist.append(Item(channel=CHANNELNAME, title="Sevidores bloqueados",
                         action="servers_blacklist", folder=False,
                         thumbnail=get_thumbnail_path("thumb_configuracion_0.png")))
                         
    itemlist.append(Item(channel=CHANNELNAME, title="Servidores favoritos",
                         action="servers_favorites", folder=False,
                         thumbnail=get_thumbnail_path("thumb_configuracion_0.png")))
    
    itemlist.append(Item(channel=CHANNELNAME, title="Ajustes de debriders:",
                         action="", folder=False,
                         thumbnail=get_thumbnail_path("thumb_configuracion_0.png")))

    
    # Inicio - Servidores configurables

    server_list = servertools.get_debriders_list().keys()
    for server in server_list:
        server_parameters = servertools.get_server_parameters(server)
        if server_parameters["has_settings"]:
            itemlist.append(Item(channel=CHANNELNAME, title="   Configuración del servidor '%s'" % server_parameters["name"],
                                 action="server_config", config=server, folder=False,
                                 thumbnail=""))
                                 
    itemlist.append(Item(channel=CHANNELNAME, title="Ajustes de servidores",
                         action="", folder=False,
                         thumbnail=get_thumbnail_path("thumb_configuracion_0.png")))

    server_list = servertools.get_servers_list().keys()

    for server in sorted(server_list):
        server_parameters = servertools.get_server_parameters(server)
        logger.info(server_parameters)
        if server_parameters["has_settings"] and filter(lambda x: x["id"] not in ["black_list", "white_list"], server_parameters["settings"]):
            itemlist.append(Item(channel=CHANNELNAME, title="   Configuración del servidor '%s'" % server_parameters["name"],
                                 action="server_config", config=server, folder=False,
                                 thumbnail=""))
                                 
    # Fin - Servidores configurables

    return itemlist
コード例 #5
0
ファイル: test_generic.py プロジェクト: giorgiomogol/addon
 def test_get_video_url(self):
     module = __import__('servers.%s' % self.name,
                         fromlist=["servers.%s" % self.name])
     page_url = self.server.url
     print('testing ' + page_url)
     self.assert_(hasattr(module, 'test_video_exists'),
                  self.name + ' has no test_video_exists')
     try:
         if module.test_video_exists(page_url)[0]:
             urls = module.get_video_url(page_url)
             server_parameters = servertools.get_server_parameters(
                 self.name)
             self.assertTrue(
                 urls or server_parameters.get("premium"), self.name +
                 ' scraper did not return direct urls for ' + page_url)
             print(urls)
             for u in urls:
                 spl = u[1].split('|')
                 if len(spl) == 2:
                     directUrl, headersUrl = spl
                 else:
                     directUrl, headersUrl = spl[0], ''
                 headers = {}
                 if headersUrl:
                     for name in headersUrl.split('&'):
                         h, v = name.split('=')
                         h = str(h)
                         headers[h] = str(v)
                     print(headers)
                 if 'magnet:?' in directUrl:  # check of magnet links not supported
                     continue
                 page = downloadpage(directUrl,
                                     headers=headers,
                                     only_headers=True,
                                     use_requests=True)
                 self.assertTrue(
                     page.success,
                     self.name + ' scraper returned an invalid link')
                 self.assertLess(
                     page.code, 400, self.name + ' scraper returned a ' +
                     str(page.code) + ' link')
                 contentType = page.headers['Content-Type']
                 self.assert_(
                     contentType.startswith('video')
                     or 'mpegurl' in contentType
                     or 'octet-stream' in contentType
                     or 'dash+xml' in contentType, self.name +
                     ' scraper did not return valid url for link ' +
                     page_url + '<br>Direct url: ' + directUrl +
                     '<br>Content-Type: ' + contentType)
     except:
         import traceback
         logger.error(traceback.format_exc())
コード例 #6
0
def menu_servers(item):
    logger.info()
    itemlist = list()

    itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60550), action="servers_blacklist", folder=False,
                         thumbnail=get_thumb("setting_0.png")))

    itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60551),
                         action="servers_favorites", folder=False, thumbnail=get_thumb("setting_0.png")))

    itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60552),
                         action="", folder=False, text_bold = True, thumbnail=get_thumb("setting_0.png")))

    # Inicio - Servidores configurables

    server_list = servertools.get_debriders_list().keys()
    for server in server_list:
        server_parameters = servertools.get_server_parameters(server)
        if server_parameters["has_settings"]:
            itemlist.append(
                Item(channel=CHANNELNAME, title = ".    " + config.get_localized_string(60553) % server_parameters["name"],
                     action="server_debrid_config", config=server, folder=False, thumbnail=""))

    itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60554),
                         action="", folder=False, text_bold = True, thumbnail=get_thumb("setting_0.png")))

    server_list = servertools.get_servers_list().keys()

    for server in sorted(server_list):
        server_parameters = servertools.get_server_parameters(server)
        logger.info(server_parameters)
        if server_parameters["has_settings"] and filter(lambda x: x["id"] not in ["black_list", "white_list"],
                                                        server_parameters["settings"]):
            itemlist.append(
                Item(channel=CHANNELNAME, title=".    " + config.get_localized_string(60553) % server_parameters["name"],
                     action="server_config", config=server, folder=False, thumbnail=""))

    # Fin - Servidores configurables

    return itemlist
コード例 #7
0
ファイル: globalsearch.py プロジェクト: whiplash78/addon
 def makeItem(self, item):
     logger.debug()
     thumb = item.thumbnail if item.thumbnail else 'Infoplus/' + item.contentType.replace('show','') + 'png'
     logger.info('THUMB', thumb)
     it = xbmcgui.ListItem(item.title)
     it.setProperty('thumb', thumb)
     it.setProperty('fanart', item.fanart)
     it.setProperty('plot', item.plot)
     it.setProperty('verified', item.verified)
     if item.server:
         color = scrapertools.find_single_match(item.alive, r'(FF[^\]]+)')
         it.setProperty('channel', channeltools.get_channel_parameters(item.channel).get('title',''))
         it.setProperty('thumb', "https://raw.githubusercontent.com/kodiondemand/media/master/resources/servers/%s.png" % item.server.lower())
         it.setProperty('servername', servertools.get_server_parameters(item.server.lower()).get('name',item.server))
         it.setProperty('color', color if color else 'FF0082C2')
     return it
コード例 #8
0
    def makeItem(self, url):
        item = Item().fromurl(url)
        channelParams = channeltools.get_channel_parameters(item.channel)
        thumb = item.thumbnail if item.thumbnail else 'Infoplus/' + item.contentType.replace(
            'show', '') + '.png'
        logger.info('THUMB', thumb)
        it = xbmcgui.ListItem(item.title)
        year = str(item.year if item.year else item.infoLabels.get('year', ''))
        rating = str(item.infoLabels.get('rating', ''))
        it.setProperties({
            'thumb':
            thumb,
            'fanart':
            item.fanart,
            'plot':
            item.plot,
            'year':
            '    [' + year + ']' if year else '',
            'rating':
            '    [' + rating + ']' if rating else '',
            'item':
            url,
            'verified':
            item.verified,
            'channel':
            channelParams['title'],
            'channelthumb':
            channelParams['thumbnail'] if item.verified else ''
        })
        if item.server:
            color = scrapertools.find_single_match(item.alive, r'(FF[^\]]+)')
            it.setProperties({
                'channel':
                channeltools.get_channel_parameters(item.channel).get(
                    'title', ''),
                'thumb':
                "https://raw.githubusercontent.com/kodiondemand/media/master/resources/servers/%s.png"
                % item.server.lower(),
                'servername':
                servertools.get_server_parameters(item.server.lower()).get(
                    'name', item.server),
                'color':
                color if color else 'FF0082C2'
            })

        return it
コード例 #9
0
ファイル: test_generic.py プロジェクト: rrosajp/addon
    def test_get_video_url(self):
        module = __import__('servers.%s' % self.name, fromlist=["servers.%s" % self.name])
        page_url = self.server.url
        # httptools.default_headers['Referer'] = self.server.referer
        print('testing ' + page_url)
        print('Found on ' + self.server.foundOn)
        print()

        self.assert_(hasattr(module, 'test_video_exists'), self.name + ' has no test_video_exists')

        if module.test_video_exists(page_url)[0]:
            urls = module.get_video_url(page_url)
            server_parameters = servertools.get_server_parameters(self.name)
            self.assertTrue(urls or server_parameters.get("premium"),
                            self.name + ' scraper did not return direct urls for ' + page_url)
            print(urls)
            for u in urls:
                spl = u[1].split('|')
                if len(spl) == 2:
                    directUrl, headersUrl = spl
                else:
                    directUrl, headersUrl = spl[0], ''
                headers = {}
                if headersUrl:
                    for name in headersUrl.split('&'):
                        h, v = name.split('=')
                        h = str(h)
                        headers[h] = str(v)
                    print(headers)
                if 'magnet:?' in directUrl:  # check of magnet links not supported
                    continue
                page = downloadpage(directUrl, headers=headers, only_headers=True, use_requests=True, verify=False)
                if not page.success and directUrl.split('.')[-1] == 'm3u8':  # m3u8 is a text file and HEAD may be forbidden
                    page = downloadpage(directUrl, headers=headers, use_requests=True, verify=False)

                self.assertTrue(page.success, self.name + ' scraper returned an invalid link')
                self.assertLess(page.code, 400, self.name + ' scraper returned a ' + str(page.code) + ' link')
                contentType = page.headers['Content-Type']
                self.assert_(contentType.startswith(
                    'video') or 'mpegurl' in contentType or 'octet-stream' in contentType or 'dash+xml' in contentType,
                             self.name + ' scraper did not return valid url for link ' + page_url + '<br>Direct url: ' + directUrl + '<br>Content-Type: ' + contentType)
                print('test passed')
コード例 #10
0
ファイル: peliculasgratis.py プロジェクト: yonvima/addon
def findvideos(item):
    logger.info()
    itemlist = []
    data = httptools.downloadpage(item.url).data
    if item.extra != "dd" and item.extra != "descarga":
        if item.contentType != "movie":
            bloque_links = scrapertools.find_single_match(
                data, '<div class="links">(.*?)<\/i>Selecciona un')
            if bloque_links == "":
                bloque_links = scrapertools.find_single_match(
                    data, '<div class="links">(.*?)<div class="enlaces">')
        else:
            bloque_links = scrapertools.find_single_match(
                data, '<div class="links">(.*?)<\/i>Descargar')
            if bloque_links == "":
                bloque_links = scrapertools.find_single_match(
                    data, '<div class="links">(.*?)<div class="enlaces">')
        patron = '<a class="goto" rel="nofollow".*?data-id="([^<]+)".*?'
        patron += 'src="([^"]+)">'
        patron += '([^<]+)<.*?'
        patron += 'src="([^"]+)'
        patron += '">([^<]+).*?'
        patron += '<span>([^<]+)'
        links = scrapertools.find_multiple_matches(bloque_links, patron)
        for id, thumb, server, idiomapng, idioma, calidad in links:
            idioma = idioma.strip()
            calidad = calidad.lower()
            calidad = re.sub(r' ', '-', calidad)
            if calidad == "ts":
                calidad = re.sub(r'ts', 'ts-hq', calidad)
            url = host + "/goto/"
            url_post = urllib.urlencode({'id': id})
            server_name = scrapertools.get_match(server, '(\w+)\.').replace(
                "waaw", "netutv")
            server_parameters = servertools.get_server_parameters(server_name)
            icon_server = server_parameters.get("thumbnail", "")
            extra = "online"
            title = server_name + " (" + calidad + ") (" + idioma + ")"
            itemlist.append(
                item.clone(title=title,
                           url=url,
                           action="play",
                           thumbnail=icon_server,
                           folder=True,
                           id=url_post,
                           language=idioma,
                           quality=calidad,
                           server=server_name))
    else:
        bloque_dd = scrapertools.find_single_match(
            data, '<\/i>Descargar(.*?)<div class="enlaces">')
        links_dd = scrapertools.find_multiple_matches(
            bloque_dd,
            '<a class="low".*?data-id="(.*?)".*?src="([^"]+)">([^<]+)<.*?src[^<]+>([^<]+).*?<span>([^<]+)'
        )
        for id, thumb, server, idioma, calidad in links_dd:
            idioma = idioma.strip()
            calidad = calidad.lower()
            calidad = re.sub(r' ', '-', calidad)
            if calidad == "ts":
                calidad = re.sub(r'ts', 'ts-hq', calidad)
            if CALIDADES.get(calidad):
                calidad = CALIDADES.get(calidad)
            else:
                calidad = "[COLOR brown]" + calidad + "[/COLOR]"
            if IDIOMAS.get(idioma):
                idioma = IDIOMAS.get(idioma)
            else:
                idioma = "[COLOR brown]" + idioma + "[/COLOR]"
            url = host + "/goto/"
            data_post = urllib.urlencode({'id': id})
            server_name = scrapertools.get_match(server, '(.*?)\.').strip()
            icon_server = os.path.join(config.get_runtime_path(), "resources",
                                       "images", "servers",
                                       "server_" + server_name + ".png")
            icon_server = icon_server.replace('streamin', 'streaminto')
            icon_server = icon_server.replace('ul', 'uploadedto')
            if not os.path.exists(icon_server):
                icon_server = thumb
            extra = "descarga"
            itemlist.append(
                item.clone(title="[COLOR floralwhite][B]" + server +
                           "[/B][/COLOR] " + calidad + " " + idioma,
                           url=url,
                           action="play",
                           thumbnail=icon_server,
                           id=data_post))
    if item.infoLabels["year"]:
        tmdb.set_infoLabels(itemlist)
    if item.contentType == "movie" and item.extra != "descarga" and item.extra != "online":
        if config.get_videolibrary_support() and len(itemlist) > 0:
            itemlist.append(
                Item(channel=item.channel,
                     title="Añadir película a la videoteca",
                     action="add_pelicula_to_library",
                     url=item.url,
                     text_color="green",
                     infoLabels={'title': item.fulltitle},
                     thumbnail="http://imgur.com/xjrGmVM.png",
                     fulltitle=item.fulltitle,
                     extra=extra))
    if item.extra != "dd" and item.extra != "descarga" and item.extra != "online":
        bloque_dd = scrapertools.find_single_match(
            data, '<\/i>Descargar(.*?)<div class="enlaces">')
        if bloque_dd:
            itemlist.append(
                item.clone(
                    title="[COLOR aqua][B]Ver enlaces Descarga[/B][/COLOR] ",
                    action="findvideos",
                    thumbnail=thumb,
                    fanart="",
                    contentType=item.contentType,
                    bloque_dd=bloque_dd,
                    extra="dd"))
    return itemlist
コード例 #11
0
ファイル: infoplus.py プロジェクト: Muzic98/addon
    def onInit(self):
        #### Compatibility with Kodi 18 ####
        if config.get_platform(True)['num_version'] < 18:
            self.setCoordinateResolution(2)
        if len(self.items) == 0:
            if Info.action == 'new_search' and Info.mode:
                from specials.search import new_search
                itemlist = new_search(Info)
            elif Info.action == 'channel_search':
                from specials.search import channel_search
                itemlist = channel_search(Info)
            else:
                self.channel = __import__('channels.%s' % Info.channel, fromlist=["channels.%s" % Info.channel])
                if Info.action == 'search': itemlist = getattr(self.channel, 'search')(Info, Info.search_text)
                else: itemlist = getattr(self.channel, Info.action)(Info)
            if not itemlist:
                if platformtools.dialog_yesno(config.get_localized_string(60473), config.get_localized_string(70820) % Info.channel):
                    remove()
                    self.close()
                    return Search(Info.clone(mode=Info.infoLabels['mediatype']))
                else:
                    remove()
                    self.close()
                    modal()
            for item in itemlist:
                if item.action not in ['save_download', 'add_pelicula_to_library', 'add_serie_to_library', ''] and item.infoLabels['title']:
                    if item.action == 'findvideos' and item.contentType in ['episode', 'tvshow']:
                        it = xbmcgui.ListItem(re.sub(r'\[[^\]]+\]', '', item.title))
                        self.getControl(NUMBER).setText(support.typo(config.get_localized_string(70362),'uppercase bold'))
                    else:
                        it = xbmcgui.ListItem(item.infoLabels['title'])
                    it.setProperty('channelname', channeltools.get_channel_parameters(item.channel).get('title',''))
                    it.setProperty('channel', item.channel)
                    it.setProperty('action', item.action)
                    it.setProperty('server', servertools.get_server_parameters(item.server.lower()).get('name',item.server))
                    it.setProperty('url', item.url)
                    for key, value in item.infoLabels.items():
                        it.setProperty(key, str(value))
                    if item.action == 'play':
                        it.setProperty('thumbnail', "https://raw.githubusercontent.com/kodiondemand/media/master/resources/servers/%s.png" % item.server.lower())
                    self.items.append(it)
                    self.itemlist.append(item)
            if itemlist[0].contentType == 'movie':
                if not itemlist[0].server:
                    self.commands.append(itemlist[0].clone(action='add_pelicula_to_library',  thumbnail=support.thumb('add_to_videolibrary')))
                    self.commands.append(itemlist[0].clone(channel='downloads', action='save_download', from_channel=itemlist[0].channel, from_action=itemlist[0].action, thumbnail=support.thumb('downloads')))
                else:
                    self.commands.append(Info.clone(channel='downloads', action='save_download', from_channel=Info.channel, from_action=Info.action, thumbnail=support.thumb('downloads')))
            if itemlist[0].contentType in ['tvshow', 'episode']:
                if not itemlist[0].server:
                    self.commands.append(itemlist[0].clone(action='add_serie_to_library',  thumbnail=support.thumb('add_to_videolibrary')))
                    self.commands.append(itemlist[0].clone(channel='downloads', action='save_download', from_channel=itemlist[0].channel, from_action=itemlist[0].action, thumbnail=support.thumb('downloads')))
                else:
                    self.commands.append(Info.clone(channel='downloads', action='save_download', from_channel=Info.channel, from_action=Info.action, thumbnail=support.thumb('downloads')))
            if self.commands:
                commands = []
                for command in self.commands:
                    it = xbmcgui.ListItem(command.title)
                    path = filetools.join(config.get_runtime_path(),'resources','skins','Default','media','Infoplus',command.thumbnail.split('/')[-1].replace('thumb_',''))
                    it.setProperty('thumbnail',path)
                    commands.append(it)
                self.getControl(COMMANDS).addItems(commands)
            if self.items:
                self.getControl(FANART).setImage(self.items[0].getProperty('fanart'))

            self.getControl(RECOMANDED).addItems(self.items)
            self.getControl(LOADING).setVisible(False)
            getFocus(self)
コード例 #12
0
    def start(self,
              list_controls=None,
              dict_values=None,
              caption="",
              callback=None,
              item=None,
              custom_button=None,
              channelpath=None):
        info()

        # Media Path
        self.mediapath = os.path.join(config.get_runtime_path(), 'resources',
                                      'skins', 'Default', 'media')

        # Params
        self.list_controls = list_controls
        self.values = dict_values
        self.caption = caption
        self.callback = callback
        self.item = item

        if isinstance(custom_button, dict):
            self.custom_button = {}
            self.custom_button["label"] = custom_button.get("label", "")
            self.custom_button["function"] = custom_button.get("function", "")
            self.custom_button["visible"] = bool(
                custom_button.get("visible", True))
            self.custom_button["close"] = bool(
                custom_button.get("close", False))
        else:
            self.custom_button = None

        # Load Channel Settings
        if not channelpath:
            channelpath = inspect.currentframe(
            ).f_back.f_back.f_code.co_filename
        self.channel = os.path.basename(channelpath).replace(".py", "")
        self.ch_type = os.path.basename(os.path.dirname(channelpath))
        # If list_controls does not exist, it is removed from the channel json
        if not self.list_controls:

            # If the channel path is in the "channels" folder, we get the controls and values using chaneltools
            if os.path.join(config.get_runtime_path(),
                            "channels") in channelpath or os.path.join(
                                config.get_runtime_path(),
                                "specials") in channelpath:

                # The call is made from a channel
                self.list_controls, default_values = channeltools.get_channel_controls_settings(
                    self.channel)
                self.kwargs = {"channel": self.channel}
                self.channelName = channeltools.get_channel_json(
                    self.channel)['name']

            # If the channel path is in the "servers" folder, we get the controls and values through servertools
            elif os.path.join(config.get_runtime_path(),
                              "servers") in channelpath:

                # The call is made from a channel
                self.list_controls, default_values = servertools.get_server_controls_settings(
                    self.channel)
                self.kwargs = {"server": self.channel}
                self.channelName = servertools.get_server_parameters(
                    self.channel)['name']

            # Else Exit
            else:
                return None

        # If dict_values are not passed, create a blank dict
        if self.values is None:
            self.values = {}

        # Make title
        if self.caption == "":
            self.caption = str(
                config.get_localized_string(30100)) + ' - ' + self.channelName

        matches = match(self.caption, patron=r'@(\d+)').matches
        if matches:
            for m in matches:
                self.caption = self.caption.replace(
                    '@' + match, config.get_localized_string(int(m)))

        # Show Window
        self.return_value = None
        self.doModal()
        return self.return_value