Пример #1
0
def login(force=False):
    utils.log("User: "******"; Logged in: " + str(config.get_setting_bool(
        constants.LOGGED_IN)) + "; Token: " + config.get_setting(constants.TOKEN))

    if force is False and not utils.isEmpty(config.get_setting(constants.TOKEN)) and config.get_setting_bool(constants.LOGGED_IN):
        utils.log("Already logged in")
        return

    opener = get_url_opener()

    values = {'username': config.get_setting(constants.USERNAME),
              'uid': config.get_unique_id(),
              'password': config.get_setting(constants.PASSWORD)}

    response = opener.open(API_ENDPOINT + '/api/v1.4/post/user/login', urllib.urlencode(values))

    response_code = response.getcode()
    response_text = response.read()

    if response_code != 200:
        raise ApiError(
            "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")
        utils.log("Did not receive json, something wrong: " + response_text)
        raise ApiError("Failed to log in, API error")
Пример #2
0
def get_stream_url(data_url):
    utils.log("Getting URL for channel: " + data_url)
    config.login_check()

    streamurl = None

    url = API_ENDPOINT + "/api/v1.4/get/content/live-streams/" + data_url + "?include=quality"
    opener = get_url_opener()
    opener.addheaders.append(
        ('Authorization', "Bearer " + config.get_setting(constants.TOKEN)))
    response = opener.open(url)

    response_text = response.read()
    response_code = response.getcode()

    if response_code != 200:
        config.set_setting_bool(constants.LOGGED_IN, False)
        raise ApiError(
            "Got incorrect response code while requesting stream info. Reponse code: "
            + response_code + ";\nText: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting(constants.LOGGED_IN, False)
        raise ApiError("Did not receive json, something wrong: " +
                       response_text)
Пример #3
0
def get_itemlist(service_url,
                 parameters,
                 channel="",
                 viewmode="",
                 folder=True):
    plugintools.log("tvalacarta.api.get_itemlist service_url=" + service_url +
                    ", parameters=" + repr(parameters))

    # Service call
    service_parameters = urllib.urlencode(parameters)
    plugintools.log("tvalacarta.api.get_json_response parameters=" +
                    service_parameters)

    try:
        body, response_headers = read(service_url, service_parameters)
    except:
        import traceback
        plugintools.log("tvalacarta.api.get_json_response " +
                        traceback.format_exc())

    json_response = plugintools.load_json(body)

    if json_response["error"] and json_response["error_code"] == "403":
        config.set_setting("account_session", "")

    itemlist = parse_itemlist_from_response(json_response,
                                            viewmode=viewmode,
                                            channel=channel,
                                            folder=folder)

    return itemlist
Пример #4
0
def get_stream_url(data_url):
    utils.log("Getting URL for channel: " + data_url)
    config.login_check()

    streamurl = None

    url = API_ENDPOINT + "/api/v1.7/get/content/live-streams/" + data_url + "?include=quality"
    opener = get_url_opener()
    opener.addheaders.append(('Authorization', "Bearer " + config.get_setting(constants.TOKEN)))
    response = opener.open(url)

    response_text = response.read()
    response_code = response.getcode()

    if response_code != 200:
        config.set_setting_bool(constants.LOGGED_IN, False)
        raise ApiError(
            "Got incorrect response code while requesting stream info. Reponse code: " + response_code + ";\nText: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting(constants.LOGGED_IN, False)
        raise ApiError("Did not receive json, something wrong: " + response_text)
Пример #5
0
def get_stream_url(data_url):
    utils.log("Getting URL for channel: " + data_url)
    config.login_check()

    streamurl = None

    url = API_ENDPOINT + "/get/content/live-streams/" + data_url + "?include=quality"
    opener = get_url_opener()
    opener.addheaders.append(
        ('Authorization', "Bearer " + config.get_setting(constants.TOKEN)))
    response = None
    try:
        response = opener.open(url)
    except urllib.error.HTTPError as e:
        config.set_setting(constants.LOGGED_IN, "False")
        raise ApiError("Something wrong: " + e.code)

    response_text = response.read()
    response_code = response.getcode()

    if response_code != 200:
        config.set_setting_bool(constants.LOGGED_IN, "False")
        raise ApiError(
            "Got incorrect response code while requesting stream info. Reponse code: "
            + response_code + ";\nText: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError:
        config.set_setting(constants.LOGGED_IN, "False")
        raise ApiError("Did not receive json, something wrong: " +
                       response_text)

    stream_links = {}

    for stream in json_object["data"]:

        if stream["type"] != "live-streams":
            continue

        url = stream["attributes"][
            "stream-url"] + "&auth_token=app_" + config.get_setting(
                constants.TOKEN)

        if "_lq.stream" in stream["id"]:
            stream_links["3-lq"] = url
        elif "_mq.stream" in stream["id"]:
            stream_links["2-mq"] = url
        elif "_hq.stream" in stream["id"]:
            stream_links["1-hq"] = url
        elif "_hd.stream" in stream["id"]:
            stream_links["0-hd"] = url

    for key in sorted(stream_links.keys()):
        streamurl = stream_links[key]
        break

    return streamurl
Пример #6
0
def login(force=False):
    utils.log("User: "******"; Logged in: " +
              str(config.get_setting_bool(constants.LOGGED_IN)) + "; Token: " +
              config.get_setting(constants.TOKEN))

    if force is False and not utils.isEmpty(config.get_setting(
            constants.TOKEN)) and config.get_setting_bool(constants.LOGGED_IN):
        utils.log("Already logged in")
        return

    opener = get_url_opener()

    values = {
        'id': config.get_setting(constants.USERNAME),
        'uid': config.get_unique_id(),
        'password': config.get_setting(constants.PASSWORD)
    }

    response = opener.open(API_ENDPOINT + '/post/user/users?%s' %
                           urllib.parse.urlencode(values))

    response_code = response.getcode()
    response_text = response.read()

    if response_code == 422:
        raise ApiError(
            "Login failed, Status: 422 Unprocessable Entity. Did you enter username/password?"
        )

    if response_code == 401:
        raise ApiError(
            "Login failed, Status: 401 unauthorized. Check your username/password"
        )

    if response_code != 200:
        raise ApiError(
            "Got incorrect response code during login. Reponse code: " +
            response_code + "; Text: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError:
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")
        utils.log("Did not receive json, something wrong: " + response_text)
        raise ApiError("Failed to log in, API error")

    utils.log(response_text)

    config.set_setting_bool(constants.LOGGED_IN, True)
    config.set_setting(constants.TOKEN,
                       json_object["data"]["attributes"]["token"])

    utils.log("Login success! Token: " + config.get_setting(constants.TOKEN))
    return True
Пример #7
0
def set_opcion(item, seleccion, opciones, video_urls):
    logger.info()
    # logger.debug(item.tostring('\n'))
    salir = False
    # No ha elegido nada, lo más probable porque haya dado al ESC

    if seleccion == -1:
        # Para evitar el error "Uno o más elementos fallaron" al cancelar la selección desde fichero strm
        listitem = xbmcgui.ListItem(item.title, iconImage="DefaultVideo.png", thumbnailImage=item.thumbnail)
        xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, listitem)

    # "Descargar"
    elif opciones[seleccion] == config.get_localized_string(30153):
        from channels import downloads
        if item.contentType == "list" or item.contentType == "tvshow":
            item.contentType = "video"
        item.play_menu = True
        downloads.save_download(item)
        salir = True

    # "Quitar de favoritos"
    elif opciones[seleccion] == config.get_localized_string(30154):
        from channels import favorites
        favorites.delFavourite(item)
        salir = True

    # "Añadir a favoritos":
    elif opciones[seleccion] == config.get_localized_string(30155):
        from channels import favorites
        item.from_channel = "favorites"
        favorites.addFavourite(item)
        salir = True

    # "Añadir a videoteca":
    elif opciones[seleccion] == config.get_localized_string(30161):
        titulo = item.fulltitle
        if titulo == "":
            titulo = item.title

        new_item = item.clone(title=titulo, action="play_from_library", category="Cine",
                              fulltitle=item.fulltitle, channel=item.channel)

        from core import videolibrarytools
        videolibrarytools.add_movie(new_item)

        salir = True

    # "Buscar Trailer":
    elif opciones[seleccion] == config.get_localized_string(30162):
        config.set_setting("subtitulo", False)
        xbmc.executebuiltin("XBMC.RunPlugin(%s?%s)" %
                            (sys.argv[0], item.clone(channel="trailertools", action="buscartrailer",
                                                     contextual=True).tourl()))
        salir = True

    return salir
Пример #8
0
def get_itemlist_from_item(item, viewmode="", channel="", context="", title_field="title", folder=True):
    plugintools.log("tvalacarta.api.get_itemlist_from_item item="+repr(item)+", context="+context)

    body , response_headers = read( item.url )
    json_response = plugintools.load_json(body)

    if json_response["error"] and json_response["error_code"]=="403":
        config.set_setting("account_session","")

    return parse_itemlist_from_response(json_response,folder=folder,viewmode=viewmode,channel=channel,context=context,title_field=title_field)
Пример #9
0
def set_opcion(item, seleccion, opciones, video_urls):
    logger.info()
    # logger.debug(item.tostring('\n'))
    salir = False
    # No ha elegido nada, lo más probable porque haya dado al ESC

    if seleccion == -1:
        # Para evitar el error "Uno o más elementos fallaron" al cancelar la selección desde fichero strm
        listitem = xbmcgui.ListItem(item.title)

        if config.get_platform(True)['num_version'] >= 16.0:
            listitem.setArt({
                'icon': "DefaultVideo.png",
                'thumb': item.thumbnail
            })
        else:
            listitem.setIconImage("DefaultVideo.png")
            listitem.setThumbnailImage(item.thumbnail)

        xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, listitem)

    # "Descargar"
    elif opciones[seleccion] == config.get_localized_string(30153):
        from channels import downloads
        if item.contentType == "list" or item.contentType == "tvshow":
            item.contentType = "video"
        item.play_menu = True
        downloads.save_download(item)
        salir = True

    # "Quitar de favoritos"
    elif opciones[seleccion] == config.get_localized_string(30154):
        from channels import favorites
        favorites.delFavourite(item)
        salir = True

    # "Añadir a favoritos":
    elif opciones[seleccion] == config.get_localized_string(30155):
        from channels import favorites
        item.from_channel = "favorites"
        favorites.addFavourite(item)
        salir = True

    # "Buscar Trailer":
    elif opciones[seleccion] == config.get_localized_string(30162):
        config.set_setting("subtitulo", False)
        xbmc.executebuiltin("XBMC.RunPlugin(%s?%s)" %
                            (sys.argv[0],
                             item.clone(channel="trailertools",
                                        action="buscartrailer",
                                        contextual=True).tourl()))
        salir = True

    return salir
Пример #10
0
def getDownloadListPath():

    # La ruta de la lista de descargas es un parámetro
    downloadpath = config.get_setting("downloadlistpath")

    # No está fijada, intenta forzarla
    try:
        if downloadpath == "":
            logger.info("[downloadtools.py] downloadpath está vacio")

            # Busca un setting del skin (Telebision)
            try:
                import xbmc
                downloadpath = xbmc.getInfoLabel('Skin.String(downloadpath)')
                logger.info("[downloadtools.py] downloadpath en el skin es " +
                            downloadpath)
            except:
                pass

            # No es Telebision, fuerza el directorio home de XBMC
            if downloadpath == "":
                downloadpath = os.path.join(config.get_data_path(),
                                            "downloads", "list")
                logger.info(
                    "[downloadtools.py] getDownloadPath: downloadpath=%s" %
                    downloadpath)
                if not os.path.exists(downloadpath):
                    logger.info(
                        "[downliadtools.py] download path doesn't exist:" +
                        downloadpath)
                    os.mkdir(downloadpath)
                config.set_setting("downloadlistpath", downloadpath)

            # Es Telebision, lo pone en el skin
            else:
                # guardar setting del skin en setting del plugin
                downloadpath = os.path.join(downloadpath, "list")
                downloadpath = xbmc.translatePath(downloadpath)
                logger.info("[downloadtools.py] downloadpath nativo es " +
                            downloadpath)
                config.set_setting("downloadlistpath", downloadpath)
    except:
        pass

    logger.info("[downloadtools.py] downloadlistpath=" + downloadpath)

    try:
        os.mkdir(downloadpath)
    except:
        pass

    return downloadpath
Пример #11
0
    def post(self, name):
        with model.session_scope() as session:
            user_session = self.get_user_session(session)
            user_session.policy.verify('conf_edit')

            name = to_snake_case(name)
            schema = self.get_schema(name)
            fileinfo = self.request.files['file'][0]
            body = fileinfo['body']
            if schema['type'] == 'image' and schema['accept'] == '.svg':
                body = yield self.clean_svg(body)

            config.set_setting(session, name, body.encode('utf-8'))

        self.finish()
Пример #12
0
    def put(self):
        with model.session_scope() as session:
            user_session = self.get_user_session(session)
            user_session.policy.verify('conf_edit')

            for name, schema in config.SCHEMA.items():
                if config.is_private(name, schema):
                    continue

                if name not in self.request_son:
                    config.reset_setting(session, name)
                    continue

                if config.is_primitive(schema):
                    config.set_setting(session, name,
                                       self.request_son[name]['value'])
        self.get()
Пример #13
0
def getDownloadListPath():
    
    # La ruta de la lista de descargas es un parámetro
    downloadpath = config.get_setting("downloadlistpath")
    
    # No está fijada, intenta forzarla
    try:
        if downloadpath == "":
            logger.info("[downloadtools.py] downloadpath está vacio")
            
            # Busca un setting del skin (Telebision)
            try:
                import xbmc
                downloadpath = xbmc.getInfoLabel('Skin.String(downloadpath)')
                logger.info("[downloadtools.py] downloadpath en el skin es "+downloadpath)
            except:
                pass
            
            # No es Telebision, fuerza el directorio home de XBMC
            if downloadpath == "":
                downloadpath = os.path.join (config.get_data_path(),"downloads","list")
                logger.info("[downloadtools.py] getDownloadPath: downloadpath=%s" % downloadpath)
                if not os.path.exists(downloadpath):
                    logger.info("[downliadtools.py] download path doesn't exist:"+downloadpath)
                    os.mkdir(downloadpath)
                config.set_setting("downloadlistpath",downloadpath)
            
            # Es Telebision, lo pone en el skin
            else:
                # guardar setting del skin en setting del plugin
                downloadpath = os.path.join( downloadpath , "list" )
                downloadpath = xbmc.translatePath( downloadpath )
                logger.info("[downloadtools.py] downloadpath nativo es "+downloadpath)
                config.set_setting("downloadlistpath", downloadpath)
    except:
        pass
    
    logger.info("[downloadtools.py] downloadlistpath="+downloadpath)
    
    try:
        os.mkdir(downloadpath)
    except:
        pass

    return downloadpath
Пример #14
0
def get_response(service_url,parameters):
    plugintools.log("tvalacarta.api.get_response service_url="+service_url+", parameters="+repr(parameters))

    # Service call
    service_parameters = urllib.urlencode(parameters)
    plugintools.log("tvalacarta.api.get_response parameters="+service_parameters)

    try:
        body, response_headers = read( service_url , service_parameters )
    except:
        import traceback
        plugintools.log("tvalacarta.api.get_response "+traceback.format_exc())

    json_response = plugintools.load_json(body)

    if json_response["error"] and json_response["error_code"]=="403":
        config.set_setting("account_session","")

    return json_response
Пример #15
0
def get_itemlist_from_item(item,
                           viewmode="",
                           channel="",
                           context="",
                           title_field="title",
                           folder=True):
    plugintools.log("tvalacarta.api.get_itemlist_from_item item=" +
                    repr(item) + ", context=" + context)

    body, response_headers = read(item.url)
    json_response = plugintools.load_json(body)

    if json_response["error"] and json_response["error_code"] == "403":
        config.set_setting("account_session", "")

    return parse_itemlist_from_response(json_response,
                                        folder=folder,
                                        viewmode=viewmode,
                                        channel=channel,
                                        context=context,
                                        title_field=title_field)
Пример #16
0
def get_itemlist(service_url,parameters,channel="",viewmode="",folder=True):
    plugintools.log("tvalacarta.api.get_itemlist service_url="+service_url+", parameters="+repr(parameters))

    # Service call
    service_parameters = urllib.urlencode(parameters)
    plugintools.log("tvalacarta.api.get_json_response parameters="+service_parameters)

    try:
        body, response_headers = read( service_url , service_parameters )
    except:
        import traceback
        plugintools.log("tvalacarta.api.get_json_response "+traceback.format_exc())

    json_response = plugintools.load_json(body)

    if json_response["error"] and json_response["error_code"]=="403":
        config.set_setting("account_session","")

    itemlist = parse_itemlist_from_response(json_response,viewmode=viewmode,channel=channel,folder=folder)

    return itemlist
Пример #17
0
def get_response(service_url, parameters):
    plugintools.log("tvalacarta.api.get_response service_url=" + service_url +
                    ", parameters=" + repr(parameters))

    # Service call
    service_parameters = urllib.urlencode(parameters)
    plugintools.log("tvalacarta.api.get_response parameters=" +
                    service_parameters)

    try:
        body, response_headers = read(service_url, service_parameters)
    except:
        import traceback
        plugintools.log("tvalacarta.api.get_response " +
                        traceback.format_exc())

    json_response = plugintools.load_json(body)

    if json_response["error"] and json_response["error_code"] == "403":
        config.set_setting("account_session", "")

    return json_response
Пример #18
0
def login(force=False):
    utils.log("User: "******"; Logged in: " +
              str(config.get_setting_bool(constants.LOGGED_IN)) + "; Token: " +
              config.get_setting(constants.TOKEN))

    if force is False and not utils.isEmpty(config.get_setting(
            constants.TOKEN)) and config.get_setting_bool(constants.LOGGED_IN):
        utils.log("Already logged in")
        return

    opener = get_url_opener()

    values = {
        'username': config.get_setting(constants.USERNAME),
        'uid': config.get_unique_id(),
        'password': config.get_setting(constants.PASSWORD)
    }

    response = opener.open(API_ENDPOINT + '/api/v1.4/post/user/login',
                           urllib.urlencode(values))

    response_code = response.getcode()
    response_text = response.read()

    if response_code != 200:
        raise ApiError(
            "Got incorrect response code during login. Reponse code: " +
            response_code + "; Text: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")
        utils.log("Did not receive json, something wrong: " + response_text)
        raise ApiError("Failed to log in, API error")
Пример #19
0
def get_epg(date):
    utils.log("Getting EPG for date: " + date)
    config.login_check()

    url = API_ENDPOINT + "/api/v1.4/get/tv/epg/?daynight=" + date
    opener = get_url_opener()
    opener.addheaders.append(('Authorization', "Bearer " + config.get_setting(constants.TOKEN)))
    response = opener.open(url)

    response_text = response.read()
    response_code = response.getcode()

    if response_code != 200:
        config.set_setting_bool(constants.LOGGED_IN, False)
        raise ApiError(
            "Got bad response from EPG service. Response code: " + response_code)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting(constants.LOGGED_IN, False)
        raise ApiError("Did not receive json, something wrong: " + response_text)
Пример #20
0
def set_current_servers_version(new_version):
    return int(config.set_setting("servers_version_number", str(new_version)))
Пример #21
0
        raise ApiError(
            "Got incorrect response code during login. Reponse code: " +
            response_code + "; Text: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")
        utils.log("Did not receive json, something wrong: " + response_text)
        raise ApiError("Failed to log in, API error")

    if json_object["status"] == "ko":
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")

        utils.log("Failed to log in. Message: " + response_text)
        raise ApiError("Failed to log in, check credentials")

    utils.log(response_text)

    config.set_setting_bool(constants.LOGGED_IN, True)
    config.set_setting(constants.TOKEN, json_object["token"])

    utils.log("Login success! Token: " + config.get_setting(constants.TOKEN))
    return True


def get_channels():
    config.login_check()
Пример #22
0
    if response_code != 200:
        raise ApiError(
            "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")
        utils.log("Did not receive json, something wrong: " + response_text)
        raise ApiError("Failed to log in, API error")

    if json_object["status"] == "ko":
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")

        utils.log("Failed to log in. Message: " + response_text)
        raise ApiError("Failed to log in, check credentials")

    utils.log(response_text)

    config.set_setting_bool(constants.LOGGED_IN, True)
    config.set_setting(constants.TOKEN, json_object["token"])

    utils.log("Login success! Token: " + config.get_setting(constants.TOKEN))
    return True


def get_channels():
    config.login_check()
Пример #23
0
def set_current_servers_version(new_version):
    return int(config.set_setting("servers_version_number", str(new_version)))
Пример #24
0
def mark_updated():
    utils.log("EPG data updated")
    config.set_setting(constants.LAST_EPG, utils.stringFromDateNow())
Пример #25
0
        raise ApiError(
            "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text)

    json_object = None
    try:
        json_object = json.loads(response_text)
    except ValueError, e:
        config.set_setting_bool(constants.LOGGED_IN, False)
        config.set_setting(constants.TOKEN, "")
        utils.log("Did not receive json, something wrong: " + response_text)
        raise ApiError("Failed to log in, API error")

    utils.log(response_text)

    config.set_setting_bool(constants.LOGGED_IN, True)
    config.set_setting(constants.TOKEN, json_object["data"]["attributes"]["token"])

    utils.log("Login success! Token: " + config.get_setting(constants.TOKEN))
    return True


def get_channels():
    config.login_check()

    url = API_ENDPOINT + '/get/content/packages?include=channels'
    opener = get_url_opener()
    response = opener.open(url)
    response_text = response.read()
    response_code = response.getcode()

    if response_code != 200: