Exemplo n.º 1
0
def get_channel_json(channel_name):
    # logger.info("channel_name=" + channel_name)
    import filetools
    channel_json = None
    try:
        channel_path = filetools.join(config.get_runtime_path(), "channels",
                                      channel_name + ".json")
        if not os.path.isfile(channel_path):
            channel_path = filetools.join(config.get_runtime_path(),
                                          'channels', "p**n",
                                          channel_name + ".json")
            if not os.path.isfile(channel_path):
                channel_path = filetools.join(config.get_runtime_path(),
                                              "specials",
                                              channel_name + ".json")
                if not os.path.isfile(channel_path):
                    channel_path = filetools.join(config.get_runtime_path(),
                                                  "servers",
                                                  channel_name + ".json")
                    if not os.path.isfile(channel_path):
                        channel_path = filetools.join(
                            config.get_runtime_path(), "servers", "debriders",
                            channel_name + ".json")

        if filetools.isfile(channel_path):
            # logger.info("channel_data=" + channel_path)
            channel_json = jsontools.load(filetools.read(channel_path))
            # logger.info("channel_json= %s" % channel_json)

    except Exception, ex:
        template = "An exception of type %s occured. Arguments:\n%r"
        message = template % (type(ex).__name__, ex.args)
        logger.error(" %s" % message)
Exemplo n.º 2
0
def get_server_json(server_name):
    # logger.info("server_name=" + server_name)
    try:
        server_path = filetools.join(config.get_runtime_path(), "servers", server_name + ".json")
        if not filetools.exists(server_path):
            server_path = filetools.join(config.get_runtime_path(), "servers", "debriders", server_name + ".json")

        # logger.info("server_path=" + server_path)
        server_json = jsontools.load(filetools.read(server_path))
        # logger.info("server_json= %s" % server_json)

    except Exception, ex:
        template = "An exception of type %s occured. Arguments:\n%r"
        message = template % (type(ex).__name__, ex.args)
        logger.error(" %s" % message)
        server_json = None
Exemplo n.º 3
0
def get_channel_json(channel_name):
    # logger.info("channel_name=" + channel_name)
    import filetools
    try:
        channel_path = filetools.join(config.get_runtime_path(), "channels",
                                      channel_name + ".json")
        # logger.info("channel_data=" + channel_path)
        channel_json = jsontools.load(filetools.read(channel_path))
        # logger.info("channel_json= %s" % channel_json)

    except Exception, ex:
        template = "An exception of type %s occured. Arguments:\n%r"
        message = template % (type(ex).__name__, ex.args)
        logger.error(" %s" % message)
        channel_json = None
Exemplo n.º 4
0
def actualiza(item):
    logger.info("deportesalacarta.channels.update_sports actualiza")

    local_folder = os.path.join(xbmc.translatePath("special://home"), "addons")
    error = False
    url = "https://github.com/CmosGit/Mod_pelisalacarta_deportes/raw/addon/plugin.video.deportesalacarta-%s.zip" % item.version
    progreso = platformtools.dialog_progress("Progreso de la actualización",
                                             "Descargando...")
    filename = 'deportesalacarta-%s.zip' % item.version
    localfilename = filetools.join(config.get_data_path(), filename)
    try:
        result = downloadtools.downloadfile(url, localfilename, continuar=True)
        progreso.update(50, "Descargando archivo", "Descargando...")
        # Lo descomprime
        logger.info(
            "deportesalacarta.channels.configuracion descomprime fichero...")
        from core import ziptools
        unzipper = ziptools.ziptools()
        logger.info("deportesalacarta.channels.configuracion destpathname=%s" %
                    local_folder)
        unzipper.extract(localfilename, local_folder, update=True)
        progreso.close()
    except:
        import traceback
        logger.info("Detalle del error: %s" % traceback.format_exc())
        # Borra el zip descargado
        filetools.remove(localfilename)
        progreso.close()
        platformtools.dialog_ok(
            "Error", "Se ha producido un error extrayendo el archivo")
        return

    # Borra el zip descargado
    logger.info("deportesalacarta.channels.configuracion borra fichero...")
    filetools.remove(localfilename)
    logger.info("deportesalacarta.channels.configuracion ...fichero borrado")

    platformtools.dialog_ok("Actualizado correctamente",
                            "Versión %s instalada con éxito" % item.version)

    xbmc.executebuiltin("Container.Refresh")
Exemplo n.º 5
0
def actualiza(item):
    logger.info("deportesalacarta.channels.update_sports actualiza")

    local_folder = os.path.join(xbmc.translatePath("special://home"), "addons")
    error = False
    if not item.url:
        url = "https://github.com/CmosGit/Mod_pelisalacarta_deportes/raw/addon/plugin.video.deportesalacarta-%s.zip" % item.version
    else:
        import servertools
        urls, puede, msg = servertools.resolve_video_urls_for_playing(
            item.server, item.url, "", False, True)
        if puede:
            data_ = httptools.downloadpage(urls[0], hide=True).data
            url = scrapertools.find_single_match(
                data_, '"downloadUrl"\s*:\s*"([^"]+)"')
            if not url:
                url = scrapertools.find_single_match(
                    data_, '<a id="download_button".*?href="([^"]+)"')
            if not item.server and not url:
                try:
                    name, value = scrapertools.find_single_match(
                        data_,
                        'method="post">.*?name="([^"]+)" value="([^"]+)"')
                    post = "%s=%s" % (name, value)
                    data_ = httptools.downloadpage(urls[0], post,
                                                   hide=True).data
                    url = scrapertools.find_single_match(
                        data_, '"downloadUrl"\s*:\s*"([^"]+)"')
                except:
                    pass

            if not url:
                urls, puede, msg = servertools.resolve_video_urls_for_playing(
                    item.server, base64.b64decode(item.url))
                url = urls[0][1]

    progreso = platformtools.dialog_progress("Progreso de la actualización",
                                             "Descargando...")
    filename = 'deportesalacarta-%s.zip' % item.version
    localfilename = filetools.join(config.get_data_path(), filename)
    try:
        result = downloadtools.downloadfile(url, localfilename, [], False,
                                            True, False)
        progreso.update(50, "Descargando archivo", "Descargando...")
        # Lo descomprime
        logger.info(
            "deportesalacarta.channels.configuracion descomprime fichero...")
        from core import ziptools
        unzipper = ziptools.ziptools()
        logger.info("deportesalacarta.channels.configuracion destpathname=%s" %
                    local_folder)
        unzipper.extract(localfilename, local_folder, update=True)
        progreso.close()
    except:
        import traceback
        logger.info("Detalle del error: %s" % traceback.format_exc())
        # Borra el zip descargado
        try:
            filetools.remove(localfilename)
        except:
            pass
        progreso.close()
        platformtools.dialog_ok(
            "Error", "Se ha producido un error extrayendo el archivo")
        return

    # Borra el zip descargado
    logger.info("deportesalacarta.channels.configuracion borra fichero...")
    try:
        filetools.remove(localfilename)
    except:
        pass
    logger.info("deportesalacarta.channels.configuracion ...fichero borrado")

    platformtools.dialog_notification(
        "Actualizado correctamente",
        "Versión %s instalada con éxito" % item.version)

    xbmc.executebuiltin("Container.Refresh")
Exemplo n.º 6
0
def get_default_settings(channel_name):
    import filetools, inspect

    # Check if it is a real channel
    try:
        channel = __import__('channels.%s' % channel_name,
                             fromlist=["channels.%s" % channel_name])
    except:
        return get_channel_json(channel_name).get('settings', list())

    list_language = get_lang(channel_name)

    # Check if the automatic renumbering function exists
    renumber = False
    if 'episodios' in dir(channel):
        from core import scrapertoolsV2
        if scrapertoolsV2.find_single_match(inspect.getsource(channel), r'(anime\s*=\s*True)') \
            or scrapertoolsV2.find_single_match(inspect.getsource(channel), r'(autorenumber\()'):
            renumber = True

    #  Collects configurations
    channel_language = categories = get_channel_json(channel_name).get(
        'language', list())
    channel_controls = get_channel_json(channel_name).get('settings', list())
    default_path = filetools.join(config.get_runtime_path(),
                                  'default_channel_settings' + '.json')
    default_controls = jsontools.load(filetools.read(default_path)).get(
        'settings', list())
    default_controls_renumber = jsontools.load(
        filetools.read(default_path)).get('renumber', list())
    categories = get_channel_json(channel_name).get('categories', list())

    # Apply default configurations if they do not exist
    for control in default_controls:
        if control['id'] not in str(channel_controls):
            if 'include_in_newest' in control['id']:
                label = control['id'].split('_')
                label = label[-1]
                if label == 'peliculas':
                    if 'movie' in categories:
                        control['label'] = config.get_localized_string(
                            70727) + ' - ' + config.get_localized_string(30122)
                        channel_controls.append(control)
                    else:
                        pass
                elif label == 'series':
                    if 'tvshow' in categories:
                        control['label'] = config.get_localized_string(
                            70727) + ' - ' + config.get_localized_string(30123)
                        channel_controls.append(control)
                    else:
                        pass
                elif label == 'anime':
                    if 'anime' in categories:
                        control['label'] = config.get_localized_string(
                            70727) + ' - ' + config.get_localized_string(30124)
                        channel_controls.append(control)
                    else:
                        pass

                else:
                    control['label'] = config.get_localized_string(
                        70727) + ' - ' + label.capitalize()
                    channel_controls.append(control)

            elif control['id'] == 'filter_languages':
                if len(channel_language) > 1:
                    control['lvalues'] = list_language
                    channel_controls.append(control)
                else:
                    pass

            else:
                channel_controls.append(control)

    if renumber:
        for control in default_controls_renumber:
            if control['id'] not in str(channel_controls):
                channel_controls.append(control)
            else:
                pass
    return channel_controls
Exemplo n.º 7
0
def set_channel_setting(name, value, channel):
    import filetools
    """
    Fija el valor de configuracion del parametro indicado.

    Establece 'value' como el valor del parametro 'name' en la configuracion propia del canal 'channel'.
    Devuelve el valor cambiado o None si la asignacion no se ha podido completar.

    Si se especifica el nombre del canal busca en la ruta \addon_data\plugin.video.alfa\settings_channels el
    archivo channel_data.json y establece el parametro 'name' al valor indicado por 'value'.
    Si el parametro 'name' no existe lo añade, con su valor, al archivo correspondiente.

    @param name: nombre del parametro
    @type name: str
    @param value: valor del parametro
    @type value: str
    @param channel: nombre del canal
    @type channel: str

    @return: 'value' en caso de que se haya podido fijar el valor y None en caso contrario
    @rtype: str, None

    """
    # Creamos la carpeta si no existe
    if not os.path.exists(
            os.path.join(config.get_data_path(), "settings_channels")):
        os.mkdir(os.path.join(config.get_data_path(), "settings_channels"))

    file_settings = os.path.join(config.get_data_path(), "settings_channels",
                                 channel + "_data.json")
    dict_settings = {}
    if channel not in ['trakt']: def_settings = get_default_settings(channel)

    dict_file = None

    if os.path.exists(file_settings):
        # Obtenemos configuracion guardada de ../settings/channel_data.json
        try:
            dict_file = jsontools.load(open(file_settings, "r").read())
            dict_settings = dict_file.get('settings', {})
        except EnvironmentError:
            logger.error("ERROR al leer el archivo: %s" % file_settings)

    if os.path.isfile(
            filetools.join(config.get_runtime_path(), "channels",
                           channel + ".json")):

        # delete unused Settings
        def_keys = []
        del_keys = []
        for key in def_settings:
            def_keys.append(key['id'])
        for key in dict_settings:
            if key not in def_keys:
                del_keys.append(key)
        for key in del_keys:
            del dict_settings[key]

    dict_settings[name] = value

    # comprobamos si existe dict_file y es un diccionario, sino lo creamos
    if dict_file is None or not dict_file:
        dict_file = {}

    dict_file['settings'] = dict_settings

    # Creamos el archivo ../settings/channel_data.json
    try:
        json_data = jsontools.dump(dict_file)
        open(file_settings, "w").write(json_data)
    except EnvironmentError:
        logger.error("ERROR al salvar el archivo: %s" % file_settings)
        return None

    return value
Exemplo n.º 8
0
def get_default_settings(channel_name):
    import filetools
    default_path = filetools.join(config.get_runtime_path(),
                                  'default_channel_settings' + '.json')
    default_file = jsontools.load(filetools.read(default_path))

    channel_path = filetools.join(config.get_runtime_path(), 'channels',
                                  channel_name + '.json')
    adult_path = filetools.join(config.get_runtime_path(), 'channels', 'p**n',
                                channel_name + '.json')

    # from core.support import dbg; dbg()
    if os.path.exists(channel_path) or os.path.exists(adult_path):
        default_controls = default_file['settings']
        default_controls_renumber = default_file['renumber']
        channel_json = get_channel_json(channel_name)

        #  Collects configurations
        channel_language = channel_json['language']
        channel_controls = channel_json['settings']
        categories = channel_json['categories']
        not_active = channel_json['not_active'] if channel_json.has_key(
            'not_active') else []
        default_off = channel_json['default_off'] if channel_json.has_key(
            'default_off') else []

        # Apply default configurations if they do not exist
        for control in default_controls:
            if control['id'] not in str(channel_controls):
                if 'include_in_newest' in control[
                        'id'] and 'include_in_newest' not in not_active and control[
                            'id'] not in not_active:
                    label = control['id'].split('_')
                    label = label[-1]
                    if label == 'peliculas':
                        if 'movie' in categories:
                            control['label'] = config.get_localized_string(
                                70727) + ' - ' + config.get_localized_string(
                                    30122)
                            control['default'] = False if (
                                'include_in_newest' in default_off) or (
                                    'include_in_newest_peliculas'
                                    in default_off) else True
                            channel_controls.append(control)
                        else:
                            pass
                    elif label == 'series':
                        if 'tvshow' in categories:
                            control['label'] = config.get_localized_string(
                                70727) + ' - ' + config.get_localized_string(
                                    30123)
                            control['default'] = False if (
                                'include_in_newest'
                                in default_off) or ('include_in_newest_series'
                                                    in default_off) else True
                            channel_controls.append(control)
                        else:
                            pass
                    elif label == 'anime':
                        if 'anime' in categories:
                            control['label'] = config.get_localized_string(
                                70727) + ' - ' + config.get_localized_string(
                                    30124)
                            control['default'] = False if (
                                'include_in_newest'
                                in default_off) or ('include_in_newest_anime'
                                                    in default_off) else True
                            channel_controls.append(control)
                        else:
                            pass

                    else:
                        control['label'] = config.get_localized_string(
                            70727) + ' - ' + label.capitalize()
                        control['default'] = control['default'] if control[
                            'id'] not in default_off else False
                        channel_controls.append(control)

                elif control[
                        'id'] not in not_active and 'include_in_newest' not in control[
                            'id']:
                    if type(control['default']) == bool:
                        control['default'] = control['default'] if control[
                            'id'] not in default_off else False
                    channel_controls.append(control)

        if 'anime' in categories:
            for control in default_controls_renumber:
                if control['id'] not in str(channel_controls):
                    channel_controls.append(control)
                else:
                    pass
    else:
        return get_channel_json(channel_name).get('settings', list())
    return channel_controls
Exemplo n.º 9
0
def verify_directories_created():
    import logger
    import filetools
    from resources.lib.platformcode import xbmc_library

    config_paths = [["librarypath", "library"], ["downloadpath", "downloads"],
                    ["downloadlistpath", "downloads/list"],
                    ["settings_path", "settings_channels"]]

    for path, default in config_paths:
        saved_path = get_setting(path)

        # Biblioteca
        if path == "librarypath":
            set_setting("library_version", "v4")
            if not saved_path:
                saved_path = xbmc_library.search_library_path()
                if saved_path:
                    set_setting(path, saved_path)

        if not saved_path:
            saved_path = "special://profile/addon_data/plugin.video." + PLUGIN_NAME + "/" + default
            set_setting(path, saved_path)

        if get_setting("library_set_content") == True and path in [
                "librarypath", "downloadpath"
        ]:
            # logger.debug("library_set_content %s" % get_setting("library_set_content"))
            xbmc_library.add_sources(saved_path)

        saved_path = xbmc.translatePath(saved_path)
        if not filetools.exists(saved_path):
            logger.debug("Creating %s: %s" % (path, saved_path))
            filetools.mkdir(saved_path)

    config_paths = [["folder_movies", "CINE"], ["folder_tvshows", "SERIES"]]

    for path, default in config_paths:
        saved_path = get_setting(path)

        if not saved_path:
            saved_path = default
            set_setting(path, saved_path)

        content_path = filetools.join(get_library_path(), saved_path)
        if not filetools.exists(content_path):
            logger.debug("Creating %s: %s" % (path, content_path))
            if filetools.mkdir(content_path) and get_setting(
                    "library_set_content") == True:
                xbmc_library.set_content(default)

        elif get_setting("library_ask_set_content") == 2:
            xbmc_library.set_content(default)

    try:
        import scrapertools
        # Buscamos el archivo addon.xml del skin activo
        skindir = filetools.join(xbmc.translatePath("special://home"),
                                 'addons', xbmc.getSkinDir(), 'addon.xml')
        # Extraemos el nombre de la carpeta de resolución por defecto
        folder = ""
        data = filetools.read(skindir)
        res = scrapertools.find_multiple_matches(data, '(<res .*?>)')
        for r in res:
            if 'default="true"' in r:
                folder = scrapertools.find_single_match(r, 'folder="([^"]+)"')
                break

        # Comprobamos si existe en pelisalacarta y sino es así, la creamos
        default = filetools.join(get_runtime_path(), 'resources', 'skins',
                                 'Default')
        if folder and not filetools.exists(filetools.join(default, folder)):
            filetools.mkdir(filetools.join(default, folder))

        # Copiamos el archivo a dicha carpeta desde la de 720p si éste no existe o si el tamaño es diferente
        if folder and folder != '720p':
            for root, folders, files in filetools.walk(
                    filetools.join(default, '720p')):
                for f in files:
                    if not filetools.exists(filetools.join(default, folder, f)) or \
                          (filetools.getsize(filetools.join(default, folder, f)) !=
                           filetools.getsize(filetools.join(default, '720p', f))):
                        filetools.copy(filetools.join(default, '720p', f),
                                       filetools.join(default, folder, f),
                                       True)
    except:
        import traceback
        logger.error("Al comprobar o crear la carpeta de resolución")
        logger.error(traceback.format_exc())