Esempio n. 1
0
def get_environment():
    """
    Devuelve las variables de entorno del OS, de Kodi y de Alfa más habituales,
    necesarias para el diagnóstico de fallos
    """

    try:
        import base64
        import ast

        environment = config.get_platform(full_version=True)
        environment['num_version'] = str(environment['num_version'])
        environment['python_version'] = str(platform.python_version())

        environment['os_release'] = str(platform.release())
        if xbmc.getCondVisibility("system.platform.Windows"):
            try:
                if platform._syscmd_ver()[2]:
                    environment['os_release'] = str(platform._syscmd_ver()[2])
            except:
                pass
        environment['prod_model'] = ''
        if xbmc.getCondVisibility("system.platform.Android"):
            environment['os_name'] = 'Android'
            try:
                for label_a in subprocess.check_output('getprop').split('\n'):
                    if 'build.version.release' in label_a:
                        environment['os_release'] = str(
                            scrapertools.find_single_match(
                                label_a, ':\s*\[(.*?)\]$'))
                    if 'product.model' in label_a:
                        environment['prod_model'] = str(
                            scrapertools.find_single_match(
                                label_a, ':\s*\[(.*?)\]$'))
            except:
                try:
                    for label_a in filetools.read(os.environ['ANDROID_ROOT'] +
                                                  '/build.prop').split():
                        if 'build.version.release' in label_a:
                            environment['os_release'] = str(
                                scrapertools.find_single_match(
                                    label_a, '=(.*?)$'))
                        if 'product.model' in label_a:
                            environment['prod_model'] = str(
                                scrapertools.find_single_match(
                                    label_a, '=(.*?)$'))
                except:
                    pass

        elif xbmc.getCondVisibility("system.platform.Linux.RaspberryPi"):
            environment['os_name'] = 'RaspberryPi'
        else:
            environment['os_name'] = str(platform.system())

        environment['machine'] = str(platform.machine())
        environment['architecture'] = str(sys.maxsize > 2**32 and "64-bit"
                                          or "32-bit")
        environment['language'] = str(xbmc.getInfoLabel('System.Language'))

        environment['cpu_usage'] = str(xbmc.getInfoLabel('System.CpuUsage'))

        environment['mem_total'] = str(
            xbmc.getInfoLabel('System.Memory(total)')).replace('MB',
                                                               '').replace(
                                                                   'KB', '')
        environment['mem_free'] = str(
            xbmc.getInfoLabel('System.Memory(free)')).replace('MB',
                                                              '').replace(
                                                                  'KB', '')
        if not environment['mem_total'] or not environment['mem_free']:
            try:
                if environment['os_name'].lower() == 'windows':
                    kernel32 = ctypes.windll.kernel32
                    c_ulong = ctypes.c_ulong
                    c_ulonglong = ctypes.c_ulonglong

                    class MEMORYSTATUS(ctypes.Structure):
                        _fields_ = [('dwLength', c_ulong),
                                    ('dwMemoryLoad', c_ulong),
                                    ('dwTotalPhys', c_ulonglong),
                                    ('dwAvailPhys', c_ulonglong),
                                    ('dwTotalPageFile', c_ulonglong),
                                    ('dwAvailPageFile', c_ulonglong),
                                    ('dwTotalVirtual', c_ulonglong),
                                    ('dwAvailVirtual', c_ulonglong),
                                    ('availExtendedVirtual', c_ulonglong)]

                    memoryStatus = MEMORYSTATUS()
                    memoryStatus.dwLength = ctypes.sizeof(MEMORYSTATUS)
                    kernel32.GlobalMemoryStatus(ctypes.byref(memoryStatus))
                    environment['mem_total'] = str(
                        old_div(int(memoryStatus.dwTotalPhys), (1024**2)))
                    environment['mem_free'] = str(
                        old_div(int(memoryStatus.dwAvailPhys), (1024**2)))

                else:
                    with open('/proc/meminfo') as f:
                        meminfo = f.read()
                    environment['mem_total'] = str(
                        old_div(
                            int(
                                re.search(r'MemTotal:\s+(\d+)',
                                          meminfo).groups()[0]), 1024))
                    environment['mem_free'] = str(
                        old_div(
                            int(
                                re.search(r'MemAvailable:\s+(\d+)',
                                          meminfo).groups()[0]), 1024))
            except:
                environment['mem_total'] = ''
                environment['mem_free'] = ''

        try:
            environment['kodi_buffer'] = '20'
            environment['kodi_bmode'] = '0'
            environment['kodi_rfactor'] = '4.0'
            if filetools.exists(
                    filetools.join(xbmc.translatePath("special://userdata"),
                                   "advancedsettings.xml")):
                advancedsettings = filetools.read(
                    filetools.join(xbmc.translatePath("special://userdata"),
                                   "advancedsettings.xml")).split('\n')
                for label_a in advancedsettings:
                    if 'memorysize' in label_a:
                        environment['kodi_buffer'] = str(
                            old_div(
                                int(
                                    scrapertools.find_single_match(
                                        label_a, '>(\d+)<\/')), 1024**2))
                    if 'buffermode' in label_a:
                        environment['kodi_bmode'] = str(
                            scrapertools.find_single_match(
                                label_a, '>(\d+)<\/'))
                    if 'readfactor' in label_a:
                        environment['kodi_rfactor'] = str(
                            scrapertools.find_single_match(
                                label_a, '>(.*?)<\/'))
        except:
            pass

        environment['userdata_path'] = str(
            xbmc.translatePath(config.get_data_path()))
        try:
            if environment['os_name'].lower() == 'windows':
                free_bytes = ctypes.c_ulonglong(0)
                ctypes.windll.kernel32.GetDiskFreeSpaceExW(
                    ctypes.c_wchar_p(environment['userdata_path']), None, None,
                    ctypes.pointer(free_bytes))
                environment['userdata_free'] = str(
                    round(float(free_bytes.value) / (1024**3), 3))
            else:
                disk_space = os.statvfs(environment['userdata_path'])
                if not disk_space.f_frsize:
                    disk_space.f_frsize = disk_space.f_frsize.f_bsize
                environment['userdata_free'] = str(round((float(disk_space.f_bavail) / \
                                                          (1024 ** 3)) * float(disk_space.f_frsize), 3))
        except:
            environment['userdata_free'] = '?'

        try:
            environment['videolab_series'] = '?'
            environment['videolab_episodios'] = '?'
            environment['videolab_pelis'] = '?'
            environment['videolab_path'] = str(
                xbmc.translatePath(config.get_videolibrary_path()))
            if filetools.exists(filetools.join(environment['videolab_path'], \
                                               config.get_setting("folder_tvshows"))):
                environment['videolab_series'] = str(len(filetools.listdir(filetools.join(environment['videolab_path'], \
                                                                                          config.get_setting(
                                                                                              "folder_tvshows")))))
                counter = 0
                for root, folders, files in filetools.walk(filetools.join(environment['videolab_path'], \
                                                                          config.get_setting("folder_tvshows"))):
                    for file in files:
                        if file.endswith('.strm'): counter += 1
                environment['videolab_episodios'] = str(counter)
            if filetools.exists(filetools.join(environment['videolab_path'], \
                                               config.get_setting("folder_movies"))):
                environment['videolab_pelis'] = str(len(filetools.listdir(filetools.join(environment['videolab_path'], \
                                                                                         config.get_setting(
                                                                                             "folder_movies")))))
        except:
            pass
        try:
            video_updates = ['No', 'Inicio', 'Una vez', 'Inicio+Una vez']
            environment['videolab_update'] = str(
                video_updates[config.get_setting("update", "videolibrary")])
        except:
            environment['videolab_update'] = '?'
        try:
            if environment['os_name'].lower() == 'windows':
                free_bytes = ctypes.c_ulonglong(0)
                ctypes.windll.kernel32.GetDiskFreeSpaceExW(
                    ctypes.c_wchar_p(environment['videolab_path']), None, None,
                    ctypes.pointer(free_bytes))
                environment['videolab_free'] = str(
                    round(float(free_bytes.value) / (1024**3), 3))
            else:
                disk_space = os.statvfs(environment['videolab_path'])
                if not disk_space.f_frsize:
                    disk_space.f_frsize = disk_space.f_frsize.f_bsize
                environment['videolab_free'] = str(round((float(disk_space.f_bavail) / \
                                                          (1024 ** 3)) * float(disk_space.f_frsize), 3))
        except:
            environment['videolab_free'] = '?'

        environment['torrent_list'] = []
        environment['torrentcli_option'] = ''
        environment['torrent_error'] = ''
        environment['torrentcli_rar'] = config.get_setting("mct_rar_unpack",
                                                           server="torrent",
                                                           default=True)
        environment['torrentcli_backgr'] = config.get_setting(
            "mct_background_download", server="torrent", default=True)
        environment['torrentcli_lib_path'] = config.get_setting(
            "libtorrent_path", server="torrent", default="")
        if environment['torrentcli_lib_path']:
            lib_path = 'Activo'
        else:
            lib_path = 'Inactivo'
        environment['torrentcli_unrar'] = config.get_setting("unrar_path",
                                                             server="torrent",
                                                             default="")
        if environment['torrentcli_unrar']:
            if xbmc.getCondVisibility("system.platform.Android"):
                unrar = 'Android'
            else:
                unrar, bin = filetools.split(environment['torrentcli_unrar'])
                unrar = unrar.replace('\\', '/')
                if not unrar.endswith('/'):
                    unrar = unrar + '/'
                unrar = scrapertools.find_single_match(
                    unrar, '\/([^\/]+)\/$').capitalize()
        else:
            unrar = 'Inactivo'
        torrent_id = config.get_setting("torrent_client",
                                        server="torrent",
                                        default=0)
        environment['torrentcli_option'] = str(torrent_id)
        torrent_options = platformtools.torrent_client_installed()
        if lib_path == 'Activo':
            torrent_options = ['MCT'] + torrent_options
            torrent_options = ['BT'] + torrent_options
        environment['torrent_list'].append({'Torrent_opt': str(torrent_id), 'Libtorrent': lib_path, \
                                            'RAR_Auto': str(environment['torrentcli_rar']), \
                                            'RAR_backgr': str(environment['torrentcli_backgr']), \
                                            'UnRAR': unrar})
        environment['torrent_error'] = config.get_setting("libtorrent_error",
                                                          server="torrent",
                                                          default="")
        if environment['torrent_error']:
            environment['torrent_list'].append(
                {'Libtorrent_error': environment['torrent_error']})

        for torrent_option in torrent_options:
            cliente = dict()
            cliente['D_load_Path'] = ''
            cliente['Libre'] = '?'
            cliente['Plug_in'] = torrent_option.replace('Plugin externo: ', '')
            if cliente['Plug_in'] == 'BT':
                cliente['D_load_Path'] = str(
                    config.get_setting("bt_download_path",
                                       server="torrent",
                                       default=''))
                if not cliente['D_load_Path']: continue
                cliente['Buffer'] = str(
                    config.get_setting("bt_buffer",
                                       server="torrent",
                                       default=50))
            elif cliente['Plug_in'] == 'MCT':
                cliente['D_load_Path'] = str(
                    config.get_setting("mct_download_path",
                                       server="torrent",
                                       default=''))
                if not cliente['D_load_Path']: continue
                cliente['Buffer'] = str(
                    config.get_setting("mct_buffer",
                                       server="torrent",
                                       default=50))
            elif xbmc.getCondVisibility('System.HasAddon("plugin.video.%s")' %
                                        cliente['Plug_in']):
                __settings__ = xbmcaddon.Addon(id="plugin.video.%s" %
                                               cliente['Plug_in'])
                cliente['Plug_in'] = cliente['Plug_in'].capitalize()
                if cliente['Plug_in'] == 'Torrenter':
                    cliente['D_load_Path'] = str(
                        xbmc.translatePath(__settings__.getSetting('storage')))
                    if not cliente['D_load_Path']:
                        cliente['D_load_Path'] = str(filetools.join(xbmc.translatePath("special://home/"), \
                                                                    "cache", "xbmcup", "plugin.video.torrenter",
                                                                    "Torrenter"))
                    cliente['Buffer'] = str(
                        __settings__.getSetting('pre_buffer_bytes'))
                else:
                    cliente['D_load_Path'] = str(
                        xbmc.translatePath(
                            __settings__.getSetting('download_path')))
                    cliente['Buffer'] = str(
                        __settings__.getSetting('buffer_size'))
                    if __settings__.getSetting(
                            'download_storage'
                    ) == '1' and __settings__.getSetting('memory_size'):
                        cliente['Memoria'] = str(
                            __settings__.getSetting('memory_size'))

            if cliente['D_load_Path']:
                try:
                    if environment['os_name'].lower() == 'windows':
                        free_bytes = ctypes.c_ulonglong(0)
                        ctypes.windll.kernel32.GetDiskFreeSpaceExW(
                            ctypes.c_wchar_p(cliente['D_load_Path']), None,
                            None, ctypes.pointer(free_bytes))
                        cliente['Libre'] = str(round(float(free_bytes.value) / \
                                                     (1024 ** 3), 3)).replace('.', ',')
                    else:
                        disk_space = os.statvfs(cliente['D_load_Path'])
                        if not disk_space.f_frsize:
                            disk_space.f_frsize = disk_space.f_frsize.f_bsize
                        cliente['Libre'] = str(round((float(disk_space.f_bavail) / \
                                                      (1024 ** 3)) * float(disk_space.f_frsize), 3)).replace('.', ',')
                except:
                    pass
            environment['torrent_list'].append(cliente)

        environment['proxy_active'] = ''
        try:
            proxy_channel_bloqued_str = base64.b64decode(
                config.get_setting('proxy_channel_bloqued')).decode('utf-8')
            proxy_channel_bloqued = dict()
            proxy_channel_bloqued = ast.literal_eval(proxy_channel_bloqued_str)
            for channel_bloqued, proxy_active in list(
                    proxy_channel_bloqued.items()):
                if proxy_active != 'OFF':
                    environment['proxy_active'] += channel_bloqued + ', '
        except:
            pass
        if not environment['proxy_active']: environment['proxy_active'] = 'OFF'
        environment['proxy_active'] = environment['proxy_active'].rstrip(', ')

        for root, folders, files in filetools.walk(
                xbmc.translatePath("special://logpath/")):
            for file in files:
                if file.lower() in ['kodi.log', 'jarvis.log', 'spmc.log', 'cemc.log', \
                                    'mygica.log', 'wonderbox.log', 'leiapp,log', \
                                    'leianmc.log', 'kodiapp.log', 'anmc.log', \
                                    'latin-anmc.log']:
                    environment['log_path'] = str(filetools.join(root, file))
                    break
            else:
                environment['log_path'] = ''
            break

        if environment['log_path']:
            environment['log_size_bytes'] = str(
                filetools.getsize(environment['log_path']))
            environment['log_size'] = str(round(float(environment['log_size_bytes']) / \
                                                (1024 * 1024), 3))
        else:
            environment['log_size_bytes'] = ''
            environment['log_size'] = ''

        environment['debug'] = str(config.get_setting('debug'))
        environment['addon_version'] = str(config.get_addon_version())

    except:
        logger.error(traceback.format_exc())
        environment = {}
        environment['log_size'] = ''
        environment['cpu_usage'] = ''
        environment['python_version'] = ''
        environment['log_path'] = ''
        environment['userdata_free'] = ''
        environment['mem_total'] = ''
        environment['machine'] = ''
        environment['platform'] = ''
        environment['videolab_path'] = ''
        environment['num_version'] = ''
        environment['os_name'] = ''
        environment['video_db'] = ''
        environment['userdata_path'] = ''
        environment['log_size_bytes'] = ''
        environment['name_version'] = ''
        environment['language'] = ''
        environment['mem_free'] = ''
        environment['prod_model'] = ''
        environment['proxy_active'] = ''
        environment['architecture'] = ''
        environment['os_release'] = ''
        environment['videolab_free'] = ''
        environment['kodi_buffer'] = ''
        environment['kodi_bmode'] = ''
        environment['kodi_rfactor'] = ''
        environment['videolab_series'] = ''
        environment['videolab_episodios'] = ''
        environment['videolab_pelis'] = ''
        environment['videolab_update'] = ''
        environment['debug'] = ''
        environment['addon_version'] = ''
        environment['torrent_list'] = []
        environment['torrentcli_option'] = ''
        environment['torrentcli_rar'] = ''
        environment['torrentcli_lib_path'] = ''
        environment['torrentcli_unrar'] = ''
        environment['torrent_error'] = ''

    return environment
Esempio n. 2
0
def getmainlist(view="thumb_"):
    logger.info()
    itemlist = list()

    if config.dev_mode():
        itemlist.append(
            Item(title="Redirect",
                 channel="checkhost",
                 action="check_channels",
                 thumbnail='',
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails"))
    # Añade los canales que forman el menú principal
    if addon.getSetting('enable_news_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30130),
                 channel="news",
                 action="mainlist",
                 thumbnail=get_thumb("news.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70285),
                     "channel": "news",
                     "action": "menu_opciones",
                     "goto": True
                 }]))

    if addon.getSetting('enable_channels_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30118),
                 channel="channelselector",
                 action="getchanneltypes",
                 thumbnail=get_thumb("channels.png", view),
                 view=view,
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails"))

    if addon.getSetting('enable_search_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30103),
                 channel="search",
                 path='special',
                 action="mainlist",
                 thumbnail=get_thumb("search.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="list",
                 context=[{
                     "title": config.get_localized_string(70286),
                     "channel": "search",
                     "action": "opciones",
                     "goto": True
                 }]))

    if addon.getSetting('enable_onair_menu') == "true":
        itemlist.append(
            Item(channel="filmontv",
                 action="mainlist",
                 title=config.get_localized_string(50001),
                 thumbnail=get_thumb("on_the_air.png"),
                 viewmode="thumbnails"))

    if addon.getSetting('enable_link_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(70527),
                 channel="kodfavorites",
                 action="mainlist",
                 thumbnail=get_thumb("mylink.png", view),
                 view=view,
                 category=config.get_localized_string(70527),
                 viewmode="thumbnails"))

    if addon.getSetting('enable_fav_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30102),
                 channel="favorites",
                 action="mainlist",
                 thumbnail=get_thumb("favorites.png", view),
                 category=config.get_localized_string(30102),
                 viewmode="thumbnails"))

    if config.get_videolibrary_support() and addon.getSetting(
            'enable_library_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30131),
                 channel="videolibrary",
                 action="mainlist",
                 thumbnail=get_thumb("videolibrary.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70287),
                     "channel": "videolibrary",
                     "action": "channel_config"
                 }]))
    if downloadenabled != "false":
        itemlist.append(
            Item(title=config.get_localized_string(30101),
                 channel="downloads",
                 action="mainlist",
                 thumbnail=get_thumb("downloads.png", view),
                 viewmode="list",
                 context=[{
                     "title": config.get_localized_string(70288),
                     "channel": "setting",
                     "config": "downloads",
                     "action": "channel_config"
                 }]))

    thumb_setting = "setting_%s.png" % 0  # config.get_setting("plugin_updates_available")

    itemlist.append(
        Item(title=config.get_localized_string(30100),
             channel="setting",
             action="mainlist",
             thumbnail=get_thumb(thumb_setting, view),
             category=config.get_localized_string(30100),
             viewmode="list"))

    itemlist.append(
        Item(title=config.get_localized_string(30104) + " (v" +
             config.get_addon_version(with_fix=True) + ")",
             channel="help",
             action="mainlist",
             thumbnail=get_thumb("help.png", view),
             category=config.get_localized_string(30104),
             viewmode="list"))
    return itemlist
Esempio n. 3
0
def submenu_tools(item):
    logger.info()
    itemlist = list()

    # Herramientas personalizadas
    import os
    channel_custom = os.path.join(config.get_runtime_path(), 'channels',
                                  'custom.py')
    if not filetools.exists(channel_custom):
        user_custom = os.path.join(config.get_data_path(), 'custom.py')
        if filetools.exists(user_custom):
            filetools.copy(user_custom, channel_custom, silent=True)
    if filetools.exists(channel_custom):
        itemlist.append(
            Item(channel='custom',
                 action='mainlist',
                 title='Custom Channel',
                 thumbnail=get_thumb('setting_0.png'),
                 viewType='files'))

    itemlist.append(
        Item(action="check_quickfixes",
             channel=CHANNELNAME,
             folder=False,
             plot="Versión actual: {}".format(
                 config.get_addon_version(from_xml=True)),
             thumbnail=get_thumb("update.png"),
             title="Comprobar actualizaciones urgentes (Actual: Alfa {})".
             format(config.get_addon_version(from_xml=True))))

    itemlist.append(
        Item(action="update_quasar",
             channel=CHANNELNAME,
             folder=False,
             thumbnail=get_thumb("update.png"),
             title="Actualizar addon externo Quasar"))

    itemlist.append(
        Item(
            action="reset_trakt",
            channel=CHANNELNAME,
            folder=False,
            plot=
            "Reinicia la vinculacion, no se pierden los datos de seguimiento",
            thumbnail=
            "https://trakt.tv/assets/logos/white-bg@2x-626e9680c03d0542b3e26c3305f58050d2178e5d4222fac7831d83cf37fef42b.png",
            title="Reiniciar vinculación con Trakt"))

    itemlist.append(
        Item(channel=CHANNELNAME,
             title=config.get_localized_string(60564) + ":",
             action="",
             folder=False,
             text_bold=True,
             thumbnail=get_thumb("channels.png")))

    itemlist.append(
        Item(channel=CHANNELNAME,
             title="- {}".format(config.get_localized_string(60565)),
             action="conf_tools",
             folder=True,
             extra="lib_check_datajson",
             thumbnail=get_thumb("channels.png")))

    if config.get_videolibrary_support():
        itemlist.append(
            Item(channel=CHANNELNAME,
                 title=config.get_localized_string(60566) + ":",
                 action="",
                 folder=False,
                 text_bold=True,
                 thumbnail=get_thumb("videolibrary.png")))

        itemlist.append(
            Item(channel=CHANNELNAME,
                 action="overwrite_tools",
                 folder=False,
                 thumbnail=get_thumb("videolibrary.png"),
                 title="- " + config.get_localized_string(60567)))

        itemlist.append(
            Item(channel="videolibrary",
                 action="update_videolibrary",
                 folder=False,
                 thumbnail=get_thumb("videolibrary.png"),
                 title="- " + config.get_localized_string(60568)))

    return itemlist
Esempio n. 4
0
def getmainlist(view="thumb_"):
    logger.info()
    itemlist = list()

    # Añade los canales que forman el menú principal
    itemlist.append(
        Item(title=config.get_localized_string(30130),
             channel="news",
             action="mainlist",
             thumbnail=get_thumb("news.png", view),
             category=config.get_localized_string(30119),
             viewmode="thumbnails",
             context=[{
                 "title": config.get_localized_string(70285),
                 "channel": "news",
                 "action": "menu_opciones",
                 "goto": True
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30118),
             channel="channelselector",
             action="getchanneltypes",
             thumbnail=get_thumb("channels.png", view),
             view=view,
             category=config.get_localized_string(30119),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(70527),
             channel="alfavorites",
             action="mainlist",
             thumbnail=get_thumb("mylink.png", view),
             view=view,
             category=config.get_localized_string(70527),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(30103),
             channel="search",
             action="mainlist",
             thumbnail=get_thumb("search.png", view),
             category=config.get_localized_string(30119),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70286),
                 "channel": "search",
                 "action": "opciones",
                 "goto": True
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30102),
             channel="favorites",
             action="mainlist",
             thumbnail=get_thumb("favorites.png", view),
             category=config.get_localized_string(30102),
             viewmode="thumbnails"))

    if config.get_videolibrary_support():
        itemlist.append(
            Item(title=config.get_localized_string(30131),
                 channel="videolibrary",
                 action="mainlist",
                 thumbnail=get_thumb("videolibrary.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70287),
                     "channel": "videolibrary",
                     "action": "channel_config"
                 }]))

    itemlist.append(
        Item(title=config.get_localized_string(30101),
             channel="downloads",
             action="mainlist",
             thumbnail=get_thumb("downloads.png", view),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70288),
                 "channel": "setting",
                 "config": "downloads",
                 "action": "channel_config"
             }]))

    thumb_setting = "setting_%s.png" % 0  # config.get_setting("plugin_updates_available")

    itemlist.append(
        Item(title=config.get_localized_string(30100),
             channel="setting",
             action="mainlist",
             thumbnail=get_thumb(thumb_setting, view),
             category=config.get_localized_string(30100),
             viewmode="list"))

    itemlist.append(
        Item(title=config.get_localized_string(30104) + " (" +
             config.get_localized_string(20000) + " " +
             config.get_addon_version(with_fix=False) + ")",
             channel="help",
             action="mainlist",
             thumbnail=get_thumb("help.png", view),
             category=config.get_localized_string(30104),
             viewmode="list"))
    return itemlist
Esempio n. 5
0
def init():
    logger.info()
    """
    Todo el código añadido al add-on se borra con cada actualización.  Esta función permite restaurarlo automáticamente con cada actualización.  Esto permite al usuario tener su propio código, bajo su responsabilidad, y restaurarlo al add-on cada vez que se actualiza.
    
    El mecanismo funciona copiando el contenido de la carpeta-arbol "./userdata/addon_data/plugin.video.alfa/custom_code/..." sobre
    las carpetas de código del add-on.  No verifica el contenido, solo vuelca(reemplaza) el contenido de "custom_code".
    
    El usuario almacenará en las subcarpetas de "custom_code" su código actualizado y listo para ser copiado en cualquier momento.
    Si no se desea que copie algo, simplemente se borra de "custom_code" y ya no se copiará en la próxima actualización.
    
    Los pasos que sigue esta función, son los siguientes:
    
    1.- La función se llama desde videolibrary_service.py, desde la función inicial:
            # Copia Custom code a las carpetas de Alfa desde la zona de Userdata
            from platformcode import custom_code
            custom_code.init()
            
    2.- En el inicio de Kodi, comprueba si existe la carpeta "custom_code" en "./userdata/addon_data/plugin.video.alfa/".  
        Si no existe, la crea y sale sin más, dando al ususario la posibilidad de copiar sobre esa estructura su código, 
        y que la función la vuelque sobre el add-on en el próximo inicio de Kodi.
        
    3.- En el siguiente inicio de Kodi, comprueba si existe el custom_code.json en la carpeta root del add-on.
        Si no existe, lo crea con el número de versión del add-on vacío, para permitir que se copien los archivos en esta pasada.
        
    4.- Verifica que el número de versión del add-on es diferente de el de custom_code.json.  Si es la misma versión, 
        se sale porque ya se realizo la copia anteriormente.
        Si la versión es distinta, se realiza el volcado de todos los archivos de la carpeta-árbol "custom_code" sobre el add-on.
        Si la carpeta de destino no existe, dará un error y se cancelará la copia.  Se considera que no tienen sentido nuevas carpetas.
        
    5.- Si la copia ha terminado con éxito, se actualiza el custom_code.json con el número de versión del add-on,
        para que en inicios sucesivos de Kodi no se realicen las copias, hasta que el add-on cambie de versión.
        En el número de versión del add-on no se considera el número de fix.
        
    Tiempos:    Copiando 7 archivos de prueba, el proceso ha tardado una décima de segundo.
    """

    try:
        #Se realizan algunas funciones con cada nueva versión de Alfa
        if not filetools.exists(
                filetools.join(config.get_runtime_path(), 'custom_code.json')):
            config.set_setting(
                'cf_assistant_ua',
                '')  # Se limpia CF_UA. Mejora de rendimiento en httptools CF

        #Comprime la BD de cache de TMDB para evitar que crezca demasiado
        bd_tmdb_maintenance()
        if config.get_setting('tmdb_cache_expire', default=4) == 4:
            config.set_setting('tmdb_cache_expire', 2)

        #Verifica si es necsario instalar script.alfa-update-helper
        verify_script_alfa_update_helper()

        #Borra el .zip de instalación de Alfa de la carpeta Packages, por si está corrupto, y que así se pueda descargar de nuevo
        version = 'plugin.video.alfa-%s.zip' % config.get_addon_version(
            with_fix=False)
        filetools.remove(
            filetools.join('special://home', 'addons', 'packages', version),
            True)

        #Borrar contenido de carpeta de Torrents y de Subtitles
        filetools.rmdirtree(filetools.join(config.get_videolibrary_path(),
                                           'temp_torrents_Alfa'),
                            silent=True)
        subtitle_path = config.get_kodi_setting("subtitles.custompath")
        if subtitle_path and filetools.exists(subtitle_path):
            for file in filetools.listdir(subtitle_path):
                if not file.endswith('.srt'): continue
                file_path = filetools.join(subtitle_path, file)
                ret = filetools.remove(file_path, silent=True)
                if not ret:
                    logger.error('ERROR on REMOVING subtitle: ' + file_path)

        #Verifica si Kodi tiene algún achivo de Base de Datos de Vídeo de versiones anteriores, entonces los borra
        verify_Kodi_video_DB()

        #Verifica si la Base de Datos de Vídeo tiene la fuente de CINE con useFolderNames=1
        set_Kodi_video_DB_useFolderNames()

        #LIBTORRENT: se descarga el binario de Libtorrent cada vez que se actualiza Alfa
        try:
            threading.Thread(target=update_libtorrent).start(
            )  # Creamos un Thread independiente, hasta el fin de Kodi
            time.sleep(2)  # Dejamos terminar la inicialización...
        except:  # Si hay problemas de threading, nos vamos
            logger.error(traceback.format_exc())

        #QUASAR: Preguntamos si se hacen modificaciones a Quasar
        if not filetools.exists(filetools.join(config.get_data_path(), "quasar.json")) \
                    and not config.get_setting('addon_quasar_update', default=False):
            question_update_external_addon("quasar")

        #QUASAR: Hacemos las modificaciones a Quasar, si está permitido, y si está instalado
        if config.get_setting('addon_quasar_update', default=False) or \
                    (filetools.exists(filetools.join(config.get_data_path(), \
                    "quasar.json")) and not xbmc.getCondVisibility('System.HasAddon("plugin.video.quasar")')):
            if not update_external_addon("quasar"):
                platformtools.dialog_notification(
                    "Actualización Quasar", "Ha fallado. Consulte el log")

        #Existe carpeta "custom_code" ? Si no existe se crea y se sale
        custom_code_dir = filetools.join(config.get_data_path(), 'custom_code')
        if not filetools.exists(custom_code_dir):
            create_folder_structure(custom_code_dir)
            return

        else:
            #Existe "custom_code.json" ? Si no existe se crea
            custom_code_json_path = config.get_runtime_path()
            custom_code_json = filetools.join(custom_code_json_path,
                                              'custom_code.json')
            if not filetools.exists(custom_code_json):
                create_json(custom_code_json_path)

            #Se verifica si la versión del .json y del add-on son iguales.  Si es así se sale.  Si no se copia "custom_code" al add-on
            verify_copy_folders(custom_code_dir, custom_code_json_path)

        #Si se han quedado "colgadas" descargas con archivos .RAR, se intenta identificarlos y reactivar el UnRar
        reactivate_unrar(init=True, mute=True)

        #Inicia un rastreo de vídeos decargados desde .torrent: marca los VISTOS y elimina los controles de los BORRADOS
        from servers import torrent
        try:
            threading.Thread(target=torrent.mark_torrent_as_watched).start(
            )  # Creamos un Thread independiente, hasta el fin de Kodi
            time.sleep(2)  # Dejamos terminar la inicialización...
        except:  # Si hay problemas de threading, nos vamos
            logger.error(traceback.format_exc())
    except:
        logger.error(traceback.format_exc())
Esempio n. 6
0
from core.jsontools import to_utf8
from platformcode import config, logger
from platformcode.logger import WebErrorException

#Dominios que necesitan Cloudscraper.  AÑADIR dominios de canales sólo si es necesario

global CF_LIST
CF_LIST = list()
CF_LIST_PATH = os.path.join(config.get_runtime_path(), "resources", "CF_Domains.txt")

if os.path.exists(CF_LIST_PATH):
    with open(CF_LIST_PATH, "rb") as CF_File:
        CF_LIST = CF_File.read().splitlines()

## Obtiene la versión del addon
__version = config.get_addon_version()

cookies_lock = Lock()

cj = cookielib.MozillaCookieJar()
ficherocookies = os.path.join(config.get_data_path(), "cookies.dat")

# Headers por defecto, si no se especifica nada
default_headers = dict()
# default_headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/79.0.3945.117"

ver = config.get_setting("chrome_ua_version")
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36" % ver

default_headers["User-Agent"] = ua
#default_headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
Esempio n. 7
0
def mainlist(item):
    logger.info()
    item.category = config.__addon_name

    itemlist = []

    itemlist.append(
        item.clone(action='channels',
                   extra='movies',
                   title='Películas',
                   thumbnail=config.get_thumb('movie')))

    itemlist.append(
        item.clone(action='channels',
                   extra='tvshows',
                   title='Series',
                   thumbnail=config.get_thumb('tvshow')))

    itemlist.append(
        item.clone(action='channels',
                   extra='documentaries',
                   title='Documentales',
                   thumbnail=config.get_thumb('documentary')))

    itemlist.append(
        Item(channel='generos',
             action='mainlist',
             title='Géneros',
             thumbnail=config.get_thumb('genres')))

    itemlist.append(
        Item(channel='search',
             action='mainlist',
             title='Buscar',
             thumbnail=config.get_thumb('search')))

    itemlist.append(
        Item(channel='tracking',
             action='mainlist',
             title='Enlaces guardados  (videoteca)',
             thumbnail=config.get_thumb('videolibrary')))

    itemlist.append(
        Item(channel='downloads',
             action='mainlist',
             title='Descargas',
             thumbnail=config.get_thumb('downloads')))

    itemlist.append(
        Item(channel='actions',
             action='open_settings',
             title='Configuración / Ayuda (Balandro v%s)' %
             config.get_addon_version(),
             folder=False,
             thumbnail=config.get_thumb('settings')))

    if config.get_setting('channels_link_main', default=False):
        itemlist.append(
            item.clone(action='channels',
                       extra='all',
                       title='Canales',
                       thumbnail=config.get_thumb('stack')))

    # Developers:
    import os
    if os.path.exists(
            os.path.join(config.get_runtime_path(), 'modules', 'test.py')):
        itemlist.append(
            Item(channel='test',
                 action='mainlist',
                 title='Tests Canales y Servidores',
                 thumbnail=config.get_thumb('dev')))
    if os.path.exists(
            os.path.join(config.get_runtime_path(), 'modules',
                         'developer.py')):
        itemlist.append(
            Item(channel='developer',
                 action='mainlist',
                 title='Gestión de géneros',
                 thumbnail=config.get_thumb('dev')))

    return itemlist
Esempio n. 8
0
def getmainlist(view="thumb_"):
    logger.info()
    itemlist = list()

    # Añade los canales que forman el menú principal
    itemlist.append(
        Item(title=config.get_localized_string(30130),
             channel="news",
             action="mainlist",
             thumbnail=get_thumb("news.png", view),
             category=config.get_localized_string(30119),
             viewmode="thumbnails",
             context=[{
                 "title": config.get_localized_string(70285),
                 "channel": "news",
                 "action": "menu_opciones",
                 "goto": True
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30118),
             channel="channelselector",
             action="getchanneltypes",
             thumbnail=get_thumb("channels.png", view),
             view=view,
             category=config.get_localized_string(30119),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(70527),
             channel="alfavorites",
             action="mainlist",
             thumbnail=get_thumb("mylink.png", view),
             view=view,
             category=config.get_localized_string(70527),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(30103),
             channel="search",
             action="mainlist",
             thumbnail=get_thumb("search.png", view),
             category=config.get_localized_string(30119),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70286),
                 "channel": "search",
                 "action": "opciones",
                 "goto": True
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30102),
             channel="favorites",
             action="mainlist",
             thumbnail=get_thumb("favorites.png", view),
             category=config.get_localized_string(30102),
             viewmode="thumbnails"))

    if config.get_videolibrary_support():
        itemlist.append(
            Item(title=config.get_localized_string(30131),
                 channel="videolibrary",
                 action="mainlist",
                 thumbnail=get_thumb("videolibrary.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70287),
                     "channel": "videolibrary",
                     "action": "channel_config"
                 }]))

    itemlist.append(
        Item(title=config.get_localized_string(30101),
             channel="downloads",
             action="mainlist",
             thumbnail=get_thumb("downloads.png", view),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70288),
                 "channel": "setting",
                 "config": "downloads",
                 "action": "channel_config"
             }]))

    thumb_setting = "setting_%s.png" % 0  # config.get_setting("plugin_updates_available")

    itemlist.append(
        Item(title=config.get_localized_string(30100),
             channel="setting",
             action="mainlist",
             thumbnail=get_thumb(thumb_setting, view),
             category=config.get_localized_string(30100),
             viewmode="list"))

    if config.is_xbmc():
        itemlist.append(
            Item(title="Reportar un fallo",
                 channel="setting",
                 action="report_menu",
                 thumbnail=get_thumb("error.png", view),
                 category=config.get_localized_string(30104),
                 viewmode="list"))

    itemlist.append(
        Item(title=config.get_localized_string(30104) + " (" +
             config.get_localized_string(20000) + " " +
             config.get_addon_version(with_fix=False) + ")",
             channel="help",
             action="mainlist",
             thumbnail=os.path.join(config.get_runtime_path(), "resources",
                                    'Screenshot.jpg'),
             category=config.get_localized_string(30104),
             viewmode="list"))

    from lib import generictools
    browser, res = generictools.call_browser('', lookup=True)
    if not browser:
        action = ''
        itemlist.append(
            Item(
                channel="setting",
                action=action,
                url='https://alfa-addon.com/foros/tutoriales.11/',
                title=
                "Tutoriales relevantes [COLOR gold](Instala un browser externo: Chrome, Firefox, Opera)[/COLOR]:",
                thumbnail=get_thumb("help.png", view),
                unify=False,
                folder=False,
                category=config.get_localized_string(30104),
                viewmode="list"))
    else:
        action = 'call_browser'
        itemlist.append(
            Item(
                channel="setting",
                action=action,
                url='https://alfa-addon.com/foros/tutoriales.11/',
                title=
                "Tutoriales relevantes [COLOR limegreen](pincha para usar [I]%s[/I])[/COLOR]:"
                % browser,
                thumbnail=get_thumb("help.png", view),
                unify=False,
                folder=False,
                category=config.get_localized_string(30104),
                viewmode="list"))

    itemlist.append(
        Item(
            channel="setting",
            action=action,
            url=
            'https://alfa-addon.com/threads/manual-de-alfa-mobile-assistant-herramienta-de-apoyo.3797/',
            title=
            "-     [COLOR yellow]Manual de Alfa Mobile Assistant (herramienta de apoyo)[/COLOR]   "
            +
            "https://alfa-addon.com/threads/manual-de-alfa-mobile-assistant-herramienta-de-apoyo.3797/",
            thumbnail=get_thumb("help.png", view),
            unify=False,
            folder=False,
            category=config.get_localized_string(30104),
            viewmode="list"))

    return itemlist
Esempio n. 9
0
def get_environment():
    """
    Devuelve las variables de entorno del OS, de Kodi y de Alfa más habituales,
    necesarias para el diagnóstico de fallos 
    """

    try:
        import base64
        import ast
        
        PLATFORM = config.get_system_platform()
        
        environment = config.get_platform(full_version=True)
        environment['num_version'] = str(environment['num_version'])
        environment['python_version'] = '%s (%s, %s)' % (str(platform.python_version()), \
                    str(sys.api_version), str(platform.python_implementation()))
        environment['os_release'] = str(platform.release())
        environment['prod_model'] = ''
        try:
            import multiprocessing
            environment['proc_num'] = ' (%sx)' % str(multiprocessing.cpu_count())
        except:
            environment['proc_num'] = ''
        
        if PLATFORM in ['windows', 'xbox']:
            environment['os_name'] = PLATFORM.capitalize()
            try:
                if platform.platform():
                    environment['os_release'] = str(platform.platform()).replace('Windows-', '')
                elif platform._syscmd_ver()[2]:
                    environment['os_release'] = str(platform._syscmd_ver()[2])
                
                command = ["wmic", "cpu", "get", "name"]
                p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags=0x08000000)
                output_cmd, error_cmd = p.communicate()
                if PY3 and isinstance(output_cmd, bytes):
                    output_cmd = output_cmd.decode()
                output_cmd = re.sub(r'\n|\r|\s{2}', '', output_cmd)
                environment['prod_model'] = str(scrapertools.find_single_match(output_cmd, \
                                '\w+.*?(?i)(?:Intel\(R\))?(?:\s*Core\(TM\))\s*(.*?CPU.*?)\s*(?:\@|$)'))
            except:
                pass
        
        elif PLATFORM in ['android', 'atv2']:
            environment['os_name'] = PLATFORM.capitalize()
            try:
                for label_a in subprocess.check_output('getprop').split(FF):
                    if PY3 and isinstance(label_a, bytes):
                        label_a = label_a.decode()
                    if 'build.version.release' in label_a:
                        environment['os_release'] = str(scrapertools.find_single_match(label_a, ':\s*\[(.*?)\]$'))
                    if 'product.model' in label_a:
                        environment['prod_model'] = str(scrapertools.find_single_match(label_a, ':\s*\[(.*?)\]$'))
            except:
                try:
                    for label_a in filetools.read(os.environ['ANDROID_ROOT'] + '/build.prop').split():
                        if PY3 and isinstance(label_a, bytes):
                            label_a = label_a.decode()
                        if 'build.version.release' in label_a:
                            environment['os_release'] = str(scrapertools.find_single_match(label_a, '=(.*?)$'))
                        if 'product.model' in label_a:
                            environment['prod_model'] = str(scrapertools.find_single_match(label_a, '=(.*?)$'))
                except:
                    pass
            environment['prod_model'] += ' (%s)' % config.is_rooted(silent=True)
        
        elif PLATFORM in ['linux']:
            environment['os_name'] = PLATFORM.capitalize()
            try:
                for label_a in subprocess.check_output('hostnamectl').split(FF):
                    if PY3 and isinstance(label_a, bytes):
                        label_a = label_a.decode()
                    if 'Operating' in label_a:
                        environment['os_release'] = str(scrapertools.find_single_match(label_a, 'Operating\s*S\w+:\s*(.*?)\s*$'))
                        break
                        
                for label_a in subprocess.check_output(['cat', '/proc/cpuinfo']).split(FF):
                    if PY3 and isinstance(label_a, bytes):
                        label_a = label_a.decode()
                    if 'model name' in label_a:
                        environment['prod_model'] = str(scrapertools.find_single_match(label_a, \
                                'model.*?:\s*(?i)(?:Intel\(R\))?(?:\s*Core\(TM\))\s*(.*?CPU.*?)\s*(?:\@|$)'))
                        break
            except:
                pass

        elif PLATFORM in ['raspberry']:
            environment['os_name'] = 'RaspberryPi'
        
        else:
            environment['os_name'] = str(PLATFORM.capitalize())

        if not environment['os_release']: environment['os_release'] = str(platform.release())
        if environment['proc_num'] and environment['prod_model']: environment['prod_model'] += environment['proc_num']
        environment['machine'] = str(platform.machine())
        environment['architecture'] = str(sys.maxsize > 2 ** 32 and "64-bit" or "32-bit")
        environment['language'] = str(xbmc.getInfoLabel('System.Language'))

        environment['cpu_usage'] = str(xbmc.getInfoLabel('System.CpuUsage'))
        
        environment['mem_total'] = str(xbmc.getInfoLabel('System.Memory(total)')).replace('MB', '').replace('KB', '')
        environment['mem_free'] = str(xbmc.getInfoLabel('System.Memory(free)')).replace('MB', '').replace('KB', '')
        if not environment['mem_total'] or not environment['mem_free']:
            try:
                if environment['os_name'].lower() in ['windows', 'xbox']:
                    kernel32 = ctypes.windll.kernel32
                    c_ulong = ctypes.c_ulong
                    c_ulonglong = ctypes.c_ulonglong
                    class MEMORYSTATUS(ctypes.Structure):
                        _fields_ = [
                            ('dwLength', c_ulong),
                            ('dwMemoryLoad', c_ulong),
                            ('dwTotalPhys', c_ulonglong),
                            ('dwAvailPhys', c_ulonglong),
                            ('dwTotalPageFile', c_ulonglong),
                            ('dwAvailPageFile', c_ulonglong),
                            ('dwTotalVirtual', c_ulonglong),
                            ('dwAvailVirtual', c_ulonglong),
                            ('availExtendedVirtual', c_ulonglong)
                        ]
                 
                    memoryStatus = MEMORYSTATUS()
                    memoryStatus.dwLength = ctypes.sizeof(MEMORYSTATUS)
                    kernel32.GlobalMemoryStatus(ctypes.byref(memoryStatus))
                    environment['mem_total'] = str(old_div(int(memoryStatus.dwTotalPhys), (1024**2)))
                    environment['mem_free'] = str(old_div(int(memoryStatus.dwAvailPhys), (1024**2)))

                else:
                    with open('/proc/meminfo') as f:
                        meminfo = f.read()
                    environment['mem_total'] = str(old_div(int(re.search(r'MemTotal:\s+(\d+)', meminfo).groups()[0]), 1024))
                    environment['mem_free'] = str(old_div(int(re.search(r'MemAvailable:\s+(\d+)', meminfo).groups()[0]), 1024))
            except:
                environment['mem_total'] = ''
                environment['mem_free'] = ''
            
        try:
            environment['kodi_buffer'] = '20'
            environment['kodi_bmode'] = '0'
            environment['kodi_rfactor'] = '4.0'
            if filetools.exists(filetools.join("special://userdata", "advancedsettings.xml")):
                advancedsettings = filetools.read(filetools.join("special://userdata", 
                                "advancedsettings.xml")).split('\n')
                for label_a in advancedsettings:
                    if 'memorysize' in label_a:
                        environment['kodi_buffer'] = str(old_div(int(scrapertools.find_single_match
                                (label_a, '>(\d+)<\/')), 1024**2))
                    if 'buffermode' in label_a:
                        environment['kodi_bmode'] = str(scrapertools.find_single_match
                                (label_a, '>(\d+)<\/'))
                    if 'readfactor' in label_a:
                        environment['kodi_rfactor'] = str(scrapertools.find_single_match
                                (label_a, '>(.*?)<\/'))
        except:
            pass
        
        environment['userdata_path'] = str(config.get_data_path())
        environment['userdata_path_perm'] = filetools.file_info(environment['userdata_path'])
        if not environment['userdata_path_perm']: del environment['userdata_path_perm']
        try:
            if environment['os_name'].lower() in ['windows', 'xbox']:
                free_bytes = ctypes.c_ulonglong(0)
                ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(environment['userdata_path']), 
                                None, None, ctypes.pointer(free_bytes))
                environment['userdata_free'] = str(round(float(free_bytes.value) / (1024**3), 3))
            else:
                disk_space = os.statvfs(environment['userdata_path'])
                if not disk_space.f_frsize: disk_space.f_frsize = disk_space.f_frsize.f_bsize
                environment['userdata_free'] = str(round((float(disk_space.f_bavail) / \
                                (1024**3)) * float(disk_space.f_frsize), 3))
        except:
            environment['userdata_free'] = '?'
        
        if environment.get('userdata_path_perm', ''):
            environment['userdata_path'] = environment['userdata_path_perm']
            del environment['userdata_path_perm']
        environment['torrent_lang'] = '%s/%s' % (config.get_setting("channel_language", default="").upper(), \
                                config.get_setting("second_language", default="").upper())

        try:
            environment['videolab_series'] = '?'
            environment['videolab_episodios'] = '?'
            environment['videolab_pelis'] = '?'
            environment['videolab_path'] = str(config.get_videolibrary_path())
            environment['videolab_path_perm'] = filetools.file_info(environment['videolab_path'])
            if not environment['videolab_path_perm']:
                environment['videolab_path_perm'] = environment['videolab_path']
            if filetools.exists(filetools.join(environment['videolab_path'], \
                                config.get_setting("folder_tvshows"))):
                environment['videolab_series'] = str(len(filetools.listdir(filetools.join(environment['videolab_path'], \
                                config.get_setting("folder_tvshows")))))
                counter = 0
                for root, folders, files in filetools.walk(filetools.join(environment['videolab_path'], \
                                    config.get_setting("folder_tvshows"))):
                    for file in files:
                        if file.endswith('.strm'): counter += 1
                environment['videolab_episodios'] = str(counter)
            if filetools.exists(filetools.join(environment['videolab_path'], \
                                config.get_setting("folder_movies"))):
                environment['videolab_pelis'] = str(len(filetools.listdir(filetools.join(environment['videolab_path'], \
                                config.get_setting("folder_movies")))))
        except:
            pass
        try:
            video_updates = ['No', 'Inicio', 'Una vez', 'Inicio+Una vez', 'Dos veces al día']
            environment['videolab_update'] = str(video_updates[config.get_setting("update", "videolibrary")])
            if config.get_setting("videolibrary_backup_scan", "videolibrary", default=False):
                environment['videolab_update'] += ' (Solo SCAN)'
        except:
            environment['videolab_update'] = '?'
        try:
            if environment['os_name'].lower() in ['windows', 'xbox']:
                free_bytes = ctypes.c_ulonglong(0)
                ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(environment['videolab_path']), 
                                None, None, ctypes.pointer(free_bytes))
                environment['videolab_free'] = str(round(float(free_bytes.value) / (1024**3), 3))
            else:
                disk_space = os.statvfs(environment['videolab_path'])
                if not disk_space.f_frsize: disk_space.f_frsize = disk_space.f_frsize.f_bsize
                environment['videolab_free'] = str(round((float(disk_space.f_bavail) / \
                                (1024**3)) * float(disk_space.f_frsize), 3))
        except:
            environment['videolab_free'] = '?'

        torrent_paths = torrent_dirs()
        environment['torrent_list'] = []
        environment['torrentcli_option'] = ''
        environment['torrent_error'] = ''
        environment['torrentcli_rar'] = config.get_setting("mct_rar_unpack", server="torrent", default=True)
        environment['torrentcli_backgr'] = config.get_setting("mct_background_download", server="torrent", default=True)
        environment['torrentcli_lib_path'] = config.get_setting("libtorrent_path", server="torrent", default="")
        
        if environment['torrentcli_lib_path']:
            lib_path = 'Activo'
        else:
            lib_path = 'Inactivo'
        if config.get_setting("libtorrent_version", server="torrent", default=""):
            lib_path += '-%s' % config.get_setting("libtorrent_version", server="torrent", default="")
        environment['torrentcli_unrar'] = config.get_setting("unrar_path", server="torrent", default="")
        if environment['torrentcli_unrar']:
            unrar = config.get_setting("unrar_device", server="torrent", default="").capitalize()
        else:
            unrar = 'Inactivo'
        torrent_id = config.get_setting("torrent_client", server="torrent", default=0)
        environment['torrentcli_option'] = str(torrent_id)
        torrent_options = platformtools.torrent_client_installed()
        if lib_path != 'Inactivo':
            torrent_options = [': MCT'] + torrent_options
            torrent_options = [': BT'] + torrent_options
        environment['torrent_list'].append({'Torrent_opt': str(torrent_id), 'Libtorrent': lib_path, \
                                            'RAR_Auto': str(environment['torrentcli_rar']), \
                                            'RAR_backgr': str(environment['torrentcli_backgr']), \
                                            'UnRAR': unrar})
        environment['torrent_error'] = config.get_setting("libtorrent_error", server="torrent", default="")
        if environment['torrent_error']:
            environment['torrent_list'].append({'Libtorrent_error': environment['torrent_error']})

        for torrent_option in torrent_options:
            cliente = dict()
            cliente['D_load_Path'] = ''
            cliente['Libre'] = '?'
            cliente['Plug_in'] = scrapertools.find_single_match(torrent_option, ':\s*(\w+)')
            if cliente['Plug_in'] not in ['BT', 'MCT']: cliente['Plug_in'] = cliente['Plug_in'].capitalize()
            
            cliente['D_load_Path'] = torrent_paths[cliente['Plug_in'].upper()]
            cliente['D_load_Path_perm'] = filetools.file_info(cliente['D_load_Path'])
            cliente['Buffer'] = str(torrent_paths[cliente['Plug_in'].upper()+'_buffer'])
            cliente['Version'] = str(torrent_paths[cliente['Plug_in'].upper()+'_version'])
            if cliente['Plug_in'].upper() == 'TORREST':
                cliente['Buffer'] = str(int(int(torrent_paths[cliente['Plug_in'].upper()+'_buffer']) /(1024*1024)))
                bin_path = filetools.join('special://home', 'addons', 'plugin.video.torrest', 'resources', 'bin')
                if filetools.exists(bin_path):
                    cliente['Platform'] = str(filetools.listdir(bin_path)[0])
                else:
                    cliente['Platform'] = 'None'
                try:
                    __settings__ = xbmcaddon.Addon(id="plugin.video.torrest")
                    cliente['Platform'] += ': %s: %s:%s' % (str(__settings__.getSetting("service_enabled")), \
                                    str(__settings__.getSetting("service_ip")), str(__settings__.getSetting("port")))
                except:
                    pass
                #cliente['Options'] = str(filetools.read(filetools.join('special://masterprofile', \
                #                    'addon_data', 'plugin.video.torrest', 'settings.xml')))
            if torrent_paths.get(cliente['Plug_in'].upper()+'_memory_size', ''):
                cliente['Memoria'] = str(torrent_paths[cliente['Plug_in'].upper()+'_memory_size'])
            
            if cliente.get('D_load_Path', ''):
                try:
                    if environment['os_name'].lower() in ['windows', 'xbox']:
                        free_bytes = ctypes.c_ulonglong(0)
                        ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(cliente['D_load_Path']), 
                                    None, None, ctypes.pointer(free_bytes))
                        cliente['Libre'] = str(round(float(free_bytes.value) / \
                                    (1024**3), 3)).replace('.', ',')
                    else:
                        disk_space = os.statvfs(cliente['D_load_Path'])
                        if not disk_space.f_frsize: disk_space.f_frsize = disk_space.f_frsize.f_bsize
                        cliente['Libre'] = str(round((float(disk_space.f_bavail) / \
                                    (1024**3)) * float(disk_space.f_frsize), 3)).replace('.', ',')
                except:
                    pass
                if cliente.get('D_load_Path_perm', ''):
                    cliente['D_load_Path'] = cliente['D_load_Path_perm']
                    del cliente['D_load_Path_perm']
            environment['torrent_list'].append(cliente)

        environment['proxy_active'] = ''
        try:
            proxy_channel_bloqued_str = base64.b64decode(config.get_setting('proxy_channel_bloqued')).decode('utf-8')
            proxy_channel_bloqued = dict()
            proxy_channel_bloqued = ast.literal_eval(proxy_channel_bloqued_str)
            for channel_bloqued, proxy_active in list(proxy_channel_bloqued.items()):
                if proxy_active != 'OFF':
                    environment['proxy_active'] += channel_bloqued + ', '
        except:
            pass
        if not environment['proxy_active']: environment['proxy_active'] = 'OFF'
        environment['proxy_active'] = environment['proxy_active'].rstrip(', ')

        for root, folders, files in filetools.walk("special://logpath/"):
            for file in files:
                if file.lower() in ['kodi.log', 'jarvis.log', 'spmc.log', 'cemc.log', \
                                    'mygica.log', 'wonderbox.log', 'leiapp,log', \
                                    'leianmc.log', 'kodiapp.log', 'anmc.log', \
                                    'latin-anmc.log']:
                    environment['log_path'] = str(filetools.join(root, file))
                    break
            else:
                environment['log_path'] = ''
            break
        
        if environment.get('log_path', ''):
            environment['log_size_bytes'] = str(filetools.getsize(environment['log_path']))
            environment['log_size'] = str(round(float(environment['log_size_bytes']) / \
                                (1024*1024), 3))
        else:
            environment['log_size_bytes'] = ''
            environment['log_size'] = ''
        
        environment['debug'] = str(config.get_setting('debug'))
        environment['addon_version'] = '%s (Upd: %s h.)' % (str(config.get_addon_version(from_xml=True)), \
                                str(config.get_setting("addon_update_timer", default=12)).replace('0', 'No'))

        environment['assistant_version'] = str(None)
        if filetools.exists(filetools.join(config.get_data_path(), 'alfa-mobile-assistant.version')):
            environment['assistant_version'] = filetools.read(filetools.join(config.get_data_path(), 'alfa-mobile-assistant.version'))
        environment['assistant_version'] += '; Req: %s' % str(config.get_setting('assistant_binary', default=False))
        environment['assistant_cf_ua'] = str(config.get_setting('cf_assistant_ua', default=None))
        assistant_path = filetools.join(os.getenv('ANDROID_STORAGE'), 'emulated', '0', 'Android', 'data', 'com.alfa.alfamobileassistant')
        if PLATFORM in ['android', 'atv2'] and filetools.exists(assistant_path):
            environment['assistant_path'] = str(filetools.file_info(assistant_path))
    
    except:
        logger.error(traceback.format_exc())
        environment = {}
        environment['log_size'] = ''
        environment['cpu_usage'] = ''
        environment['python_version'] = ''
        environment['log_path'] = ''
        environment['userdata_free'] = ''
        environment['mem_total'] = ''
        environment['machine'] = ''
        environment['platform'] = ''
        environment['videolab_path'] = ''
        environment['num_version'] = ''
        environment['os_name'] = ''
        environment['video_db'] = ''
        environment['userdata_path'] = ''
        environment['log_size_bytes'] = ''
        environment['name_version'] = ''
        environment['language'] = ''
        environment['mem_free'] = ''
        environment['prod_model'] = ''
        environment['proxy_active'] = ''
        environment['architecture'] = ''
        environment['os_release'] = ''
        environment['videolab_free'] = ''
        environment['kodi_buffer'] = ''
        environment['kodi_bmode'] = ''
        environment['kodi_rfactor'] = ''
        environment['videolab_series'] = ''
        environment['videolab_episodios'] = ''
        environment['videolab_pelis'] = ''
        environment['videolab_update'] = ''
        environment['videolab_path_perm'] = ''
        environment['debug'] = ''
        environment['addon_version'] = ''
        environment['torrent_list'] = []
        environment['torrent_lang'] = ''
        environment['torrentcli_option'] = ''
        environment['torrentcli_rar'] = ''
        environment['torrentcli_lib_path'] = ''
        environment['torrentcli_unrar'] = ''
        environment['torrent_error'] = ''
        environment['assistant_version'] = ''
        environment['assistant_cf_ua'] = ''
        
    return environment
Esempio n. 10
0
def check_addon_updates(verbose=False):
    logger.info()

    # Forzamos la actualización de los repos para facilitar la actualización del addon Alfa
    xbmc.executebuiltin('UpdateAddonRepos')

    ADDON_UPDATES_JSON = 'https://extra.alfa-addon.com/addon_updates/updates.json'
    ADDON_UPDATES_ZIP = 'https://extra.alfa-addon.com/addon_updates/updates.zip'

    try:
        get_ua_list()
    except:
        pass

    try:
        last_fix_json = os.path.join(
            config.get_runtime_path(),
            'last_fix.json')  # información de la versión fixeada del usuario
        # Se guarda en get_runtime_path en lugar de get_data_path para que se elimine al cambiar de versión

        try:
            localfilename = os.path.join(config.get_data_path(),
                                         'temp_updates.zip')
            if os.path.exists(localfilename): os.remove(localfilename)
        except:
            pass

        # Descargar json con las posibles actualizaciones
        # -----------------------------------------------
        resp = httptools.downloadpage(ADDON_UPDATES_JSON,
                                      timeout=5,
                                      ignore_response_code=True)
        if not resp.sucess and resp.code != 404:
            logger.info('ERROR en la descarga de actualizaciones: %s' %
                        resp.code,
                        force=True)
            if verbose:
                dialog_notification(
                    'Alfa: error en la actualización',
                    'Hay un error al descargar la actualización')
            return False
        if not resp.data:
            logger.info('No se encuentran actualizaciones del addon',
                        force=True)
            if verbose:
                dialog_notification('Alfa ya está actualizado',
                                    'No hay ninguna actualización urgente')
            check_update_to_others(
                verbose=verbose
            )  # Comprueba las actualuzaciones de otros productos
            return False

        data = jsontools.load(resp.data)
        if 'addon_version' not in data or 'fix_version' not in data:
            logger.info('No hay actualizaciones del addon', force=True)
            if verbose:
                dialog_notification('Alfa ya está actualizado',
                                    'No hay ninguna actualización urgente')
            check_update_to_others(
                verbose=verbose
            )  # Comprueba las actualuzaciones de otros productos
            return False

        # Comprobar versión que tiene instalada el usuario con versión de la actualización
        # --------------------------------------------------------------------------------
        current_version = config.get_addon_version(with_fix=False,
                                                   from_xml=True)
        if current_version != data['addon_version']:
            logger.info('No hay actualizaciones para la versión %s del addon' %
                        current_version,
                        force=True)
            if verbose:
                dialog_notification('Alfa ya está actualizado',
                                    'No hay ninguna actualización urgente')
            check_update_to_others(
                verbose=verbose
            )  # Comprueba las actualuzaciones de otros productos
            return False

        if os.path.exists(last_fix_json):
            try:
                lastfix = {}
                with open(last_fix_json, "r") as lfj:
                    lastfix = jsontools.load(lfj.read())
                if lastfix['addon_version'] == data[
                        'addon_version'] and lastfix['fix_version'] == data[
                            'fix_version']:
                    logger.info(
                        'Ya está actualizado con los últimos cambios. Versión %s.fix%d'
                        % (data['addon_version'], data['fix_version']),
                        force=True)
                    if verbose:
                        dialog_notification(
                            'Alfa ya está actualizado', 'Versión %s.fix%d' %
                            (data['addon_version'], data['fix_version']))
                    check_update_to_others(
                        verbose=verbose
                    )  # Comprueba las actualuzaciones de otros productos
                    return False
            except:
                if lastfix:
                    logger.error('last_fix.json: ERROR en: ' + str(lastfix))
                else:
                    logger.error('last_fix.json: ERROR desconocido')
                lastfix = {}

        # Descargar zip con las actualizaciones
        # -------------------------------------

        if downloadtools.downloadfile(
                ADDON_UPDATES_ZIP, localfilename, silent=True) < 0:
            raise

        # Descomprimir zip dentro del addon
        # ---------------------------------
        try:
            unzipper = ziptools.ziptools()
            unzipper.extract(localfilename, config.get_runtime_path())
        except:
            xbmc.executebuiltin('Extract("%s", "%s")' %
                                (localfilename, config.get_runtime_path()))
            time.sleep(1)

        # Borrar el zip descargado
        # ------------------------
        try:
            os.remove(localfilename)
        except:
            pass

        # Si es PY3 se actualizan los módulos marshal
        # Se reinicia Proxytools
        try:
            if PY3:
                from platformcode.custom_code import marshal_check
                marshal_check()
            if not PY3:
                from core.proxytools import get_proxy_list
            else:
                from core.proxytools_py3 import get_proxy_list
            get_proxy_list(monitor_start=False)
        except:
            logger.error('Error Marshalizando e iniciando Proxytools')
            logger.error(traceback.format_exc())

        # Guardar información de la versión fixeada
        # -----------------------------------------
        try:
            show_update_info(data)
        except:
            pass
        last_id = 0
        if isinstance(data["files"], list):
            last_id = len(data["files"])
        elif isinstance(data["files"], dict):
            for k in data["files"].keys():
                if int(k) > last_id:
                    last_id = int(k)

        if 'files' in data: data.pop('files', None)
        data["last_id"] = last_id
        with open(last_fix_json, "w") as lfj:
            lfj.write(jsontools.dump(data))
        # Actualiza la versión del addon en las cabeceras
        try:
            httptools.__version = '%s.fix%d' % (data['addon_version'],
                                                data['fix_version'])
        except:
            pass

        logger.info('Addon actualizado correctamente a %s.fix%d' %
                    (data['addon_version'], data['fix_version']),
                    force=True)

        if verbose and not config.get_setting("show_fixes", default=True):
            dialog_notification(
                'Alfa actualizado a', 'Versión %s.fix%d' %
                (data['addon_version'], data['fix_version']))

        check_update_to_others(
            verbose=verbose
        )  # Comprueba las actualuzaciones de otros productos
        return True

    except:
        logger.error('Error al comprobar actualizaciones del addon!')
        logger.error(traceback.format_exc())
        if verbose:
            dialog_notification('Alfa actualizaciones',
                                'Error al comprobar actualizaciones')
        check_update_to_others(
            verbose=verbose
        )  # Comprueba las actualuzaciones de otros productos
        return False
Esempio n. 11
0
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per altadefinizione01
# ------------------------------------------------------------

from core import servertools, httptools, tmdb, scrapertoolsV2, support
from core.item import Item
from platformcode import logger, config
from specials import autoplay

#URL che reindirizza sempre al dominio corrente
#host = "https://altadefinizione01.to"

__channel__ = "altadefinizione01"
host = config.get_addon_version(__channel__)

IDIOMAS = {'Italiano': 'IT'}
list_language = IDIOMAS.values()
list_servers = [
    'openload', 'streamango', 'rapidvideo', 'streamcherry', 'megadrive'
]
list_quality = ['default']

checklinks = config.get_setting('checklinks', 'altadefinizione01')
checklinks_number = config.get_setting('checklinks_number',
                                       'altadefinizione01')

headers = [['Referer', host]]
blacklist_categorie = ['Altadefinizione01', 'Altadefinizione.to']

Esempio n. 12
0
def init():
    logger.info()
    """
    Todo el código añadido al add-on se borra con cada actualización.  Esta función permite restaurarlo automáticamente con cada actualización.  Esto permite al usuario tener su propio código, bajo su responsabilidad, y restaurarlo al add-on cada vez que se actualiza.
    
    El mecanismo funciona copiando el contenido de la carpeta-arbol "./userdata/addon_data/plugin.video.alfa/custom_code/..." sobre
    las carpetas de código del add-on.  No verifica el contenido, solo vuelca(reemplaza) el contenido de "custom_code".
    
    El usuario almacenará en las subcarpetas de "custom_code" su código actualizado y listo para ser copiado en cualquier momento.
    Si no se desea que copie algo, simplemente se borra de "custom_code" y ya no se copiará en la próxima actualización.
    
    Los pasos que sigue esta función, son los siguientes:
    
    1.- La función se llama desde videolibrary_service.py, desde la función inicial:
            # Copia Custom code a las carpetas de Alfa desde la zona de Userdata
            from platformcode import custom_code
            custom_code.init()
            
    2.- En el inicio de Kodi, comprueba si existe la carpeta "custom_code" en "./userdata/addon_data/plugin.video.alfa/".  
        Si no existe, la crea y sale sin más, dando al ususario la posibilidad de copiar sobre esa estructura su código, 
        y que la función la vuelque sobre el add-on en el próximo inicio de Kodi.
        
    3.- En el siguiente inicio de Kodi, comprueba si existe el custom_code.json en la carpeta root del add-on.
        Si no existe, lo crea con el número de versión del add-on vacío, para permitir que se copien los archivos en esta pasada.
        
    4.- Verifica que el número de versión del add-on es diferente de el de custom_code.json.  Si es la misma versión, 
        se sale porque ya se realizo la copia anteriormente.
        Si la versión es distinta, se realiza el volcado de todos los archivos de la carpeta-árbol "custom_code" sobre el add-on.
        Si la carpeta de destino no existe, dará un error y se cancelará la copia.  Se considera que no tienen sentido nuevas carpetas.
        
    5.- Si la copia ha terminado con éxito, se actualiza el custom_code.json con el número de versión del add-on,
        para que en inicios sucesivos de Kodi no se realicen las copias, hasta que el add-on cambie de versión.
        En el número de versión del add-on no se considera el número de fix.
        
    Tiempos:    Copiando 7 archivos de prueba, el proceso ha tardado una décima de segundo.
    """

    try:
        #Borra el .zip de instalación de Alfa de la carpeta Packages, por si está corrupto, y que así se pueda descargar de nuevo
        version = 'plugin.video.alfa-%s.zip' % config.get_addon_version(
            with_fix=False)
        filetools.remove(
            filetools.join(xbmc.translatePath('special://home'), 'addons',
                           'packages', version), True)

        #Verifica si Kodi tiene algún achivo de Base de Datos de Vídeo de versiones anteriores, entonces los borra
        verify_Kodi_video_DB()

        #LIBTORRENT: se descarga el binario de Libtorrent cada vez que se actualiza Alfa
        try:
            threading.Thread(target=update_libtorrent).start(
            )  # Creamos un Thread independiente, hasta el fin de Kodi
            time.sleep(2)  # Dejamos terminar la inicialización...
        except:  # Si hay problemas de threading, nos vamos
            logger.error(traceback.format_exc())

        #QUASAR: Preguntamos si se hacen modificaciones a Quasar
        if not filetools.exists(filetools.join(config.get_data_path(), "quasar.json")) \
                    and not config.get_setting('addon_quasar_update', default=False):
            question_update_external_addon("quasar")

        #QUASAR: Hacemos las modificaciones a Quasar, si está permitido, y si está instalado
        if config.get_setting('addon_quasar_update', default=False) or \
                    (filetools.exists(filetools.join(config.get_data_path(), \
                    "quasar.json")) and not xbmc.getCondVisibility('System.HasAddon("plugin.video.quasar")')):
            if not update_external_addon("quasar"):
                platformtools.dialog_notification(
                    "Actualización Quasar", "Ha fallado. Consulte el log")

        #Existe carpeta "custom_code" ? Si no existe se crea y se sale
        custom_code_dir = filetools.join(config.get_data_path(), 'custom_code')
        if not filetools.exists(custom_code_dir):
            create_folder_structure(custom_code_dir)
            return

        else:
            #Existe "custom_code.json" ? Si no existe se crea
            custom_code_json_path = config.get_runtime_path()
            custom_code_json = filetools.join(custom_code_json_path,
                                              'custom_code.json')
            if not filetools.exists(custom_code_json):
                create_json(custom_code_json_path)

            #Se verifica si la versión del .json y del add-on son iguales.  Si es así se sale.  Si no se copia "custom_code" al add-on
            verify_copy_folders(custom_code_dir, custom_code_json_path)
    except:
        logger.error(traceback.format_exc())
Esempio n. 13
0
def submenu_tools(item):
    logger.info()
    itemlist = list()

    # Herramientas personalizadas
    import os
    channel_custom = os.path.join(config.get_runtime_path(), 'channels', 'custom.py')
    if not filetools.exists(channel_custom):
        user_custom = os.path.join(config.get_data_path(), 'custom.py')
        if filetools.exists(user_custom):
            filetools.copy(user_custom, channel_custom, silent=True)
    if filetools.exists(channel_custom):
        itemlist.append(Item(channel='custom', action='mainlist', title='Custom Channel'))


    itemlist.append(Item(channel=CHANNELNAME, action="check_quickfixes", folder=False,
                         title=config.get_localized_string(30001), plot="Versión actual: %s" % config.get_addon_version() ))
    itemlist.append(Item(channel=CHANNELNAME, action="update_quasar", folder=False,
                         title=config.get_localized_string(70569)))
    itemlist.append(Item(channel=CHANNELNAME, action="", title="", folder=False,
                         thumbnail=get_thumb("setting_0.png")))

    itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60564) + ":", action="", folder=False,
                         text_bold=True, thumbnail=get_thumb("channels.png")))
    itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60565), action="conf_tools",
                         folder=True, extra="lib_check_datajson", thumbnail=get_thumb("channels.png")))

    if config.get_videolibrary_support():
        itemlist.append(Item(channel=CHANNELNAME, action="", title="", folder=False,
                             thumbnail=get_thumb("setting_0.png")))
        itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60566) + ":", action="", folder=False,
                             text_bold=True, thumbnail=get_thumb("videolibrary.png")))
        itemlist.append(Item(channel=CHANNELNAME, action="overwrite_tools", folder=False,
                             thumbnail=get_thumb("videolibrary.png"),
                             title="- " + config.get_localized_string(60567)))
        itemlist.append(Item(channel="videolibrary", action="update_videolibrary", folder=False,
                             thumbnail=get_thumb("videolibrary.png"),
                             title="- " + config.get_localized_string(60568)))

    return itemlist
Esempio n. 14
0
def getmainlist(view="thumb_"):
    logger.info()
    itemlist = list()

    # Añade los canales que forman el menú principal
    itemlist.append(
        Item(title=config.get_localized_string(30130),
             channel="news",
             action="mainlist",
             thumbnail=get_thumb("news.png", view),
             category=config.get_localized_string(30119),
             viewmode="thumbnails",
             context=[{
                 "title": config.get_localized_string(70285),
                 "channel": "news",
                 "action": "news_setting"
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30118),
             channel="channelselector",
             action="getchanneltypes",
             thumbnail=get_thumb("channels.png", view),
             view=view,
             category=config.get_localized_string(30119),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(70527),
             channel="alfavorites",
             action="mainlist",
             thumbnail=get_thumb("mylink.png", view),
             view=view,
             category=config.get_localized_string(70527),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(30103),
             channel="search",
             action="mainlist",
             thumbnail=get_thumb("search.png", view),
             category=config.get_localized_string(30119),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70286),
                 "channel": "search",
                 "action": "opciones",
                 "goto": True
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30102),
             channel="favorites",
             action="mainlist",
             thumbnail=get_thumb("favorites.png", view),
             category=config.get_localized_string(30102),
             viewmode="thumbnails"))

    if config.get_videolibrary_support():
        itemlist.append(
            Item(title=config.get_localized_string(30131),
                 channel="videolibrary",
                 action="mainlist",
                 thumbnail=get_thumb("videolibrary.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70287),
                     "channel": "videolibrary",
                     "action": "channel_config"
                 }]))

    itemlist.append(
        Item(title=config.get_localized_string(30101),
             channel="downloads",
             action="mainlist",
             thumbnail=get_thumb("downloads.png", view),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70288),
                 "channel": "setting",
                 "config": "downloads",
                 "action": "channel_config"
             }]))

    thumb_setting = "setting_%s.png" % 0  # config.get_setting("plugin_updates_available")

    itemlist.append(
        Item(title=config.get_localized_string(30100),
             channel="setting",
             action="mainlist",
             thumbnail=get_thumb(thumb_setting, view),
             category=config.get_localized_string(30100),
             viewmode="list"))

    if config.is_xbmc():
        itemlist.append(
            Item(title=config.get_localized_string(70761),
                 channel="setting",
                 action="report_menu",
                 thumbnail=get_thumb("error.png", view),
                 category=config.get_localized_string(30104),
                 viewmode="list"))

    itemlist.append(
        Item(title=config.get_localized_string(30104) + " (" +
             config.get_localized_string(20000) + " " +
             config.get_addon_version(with_fix=False, from_xml=True) + ")",
             channel="help",
             action="mainlist",
             thumbnail=os.path.join(config.get_runtime_path(), "resources",
                                    'Screenshot.jpg'),
             category=config.get_localized_string(30104),
             viewmode="list"))

    from lib import generictools
    browser, res = generictools.call_browser('', lookup=True)
    if not browser:
        action = ''
        itemlist.append(
            Item(channel="setting",
                 action=action,
                 url='https://alfa-addon.com/foros/tutoriales.11/',
                 title=config.get_localized_string(70758) + " [COLOR gold](" +
                 config.get_localized_string(70759) +
                 ": Chrome, Firefox, Opera)[/COLOR]:",
                 thumbnail=get_thumb("help.png", view),
                 unify=False,
                 folder=False,
                 category=config.get_localized_string(30104),
                 viewmode="list"))
    else:
        action = 'call_browser'
        itemlist.append(
            Item(channel="setting",
                 action=action,
                 url='https://alfa-addon.com/foros/tutoriales.11/',
                 title=config.get_localized_string(70758) +
                 (" [COLOR limegreen]" + config.get_localized_string(70760) +
                  "[/COLOR]") % browser,
                 thumbnail=get_thumb("help.png", view),
                 unify=False,
                 folder=False,
                 category=config.get_localized_string(30104),
                 viewmode="list"))

    itemlist.append(
        Item(
            channel="setting",
            action=action,
            url=
            'https://alfa-addon.com/threads/si-tienes-android-10-y-kodi-19-vas-a-tener-problemas-con-los-torrents.4211/',
            title=
            "-     [COLOR yellow]Si tienes Android 10+ y Kodi 19+ vas a tener problemas con los torrents[/COLOR]   "
            +
            "https://alfa-addon.com/threads/si-tienes-android-10-y-kodi-19-vas-a-tener-problemas-con-los-torrents.4211/",
            thumbnail=get_thumb("help.png", view),
            unify=False,
            folder=False,
            category=config.get_localized_string(30104),
            viewmode="list"))

    itemlist.append(
        Item(
            channel="setting",
            action=action,
            url=
            'https://alfa-addon.com/threads/torrest-el-gestor-de-torrents-definitivo.4085/',
            title=
            "-     [COLOR yellow]Torrest: el gestor de torrents definitivo[/COLOR]   "
            +
            "https://alfa-addon.com/threads/torrest-el-gestor-de-torrents-definitivo.4085/",
            thumbnail=get_thumb("help.png", view),
            unify=False,
            folder=False,
            category=config.get_localized_string(30104),
            viewmode="list"))

    return itemlist
Esempio n. 15
0
def getmainlist(view="thumb_"):
    logger.info()
    itemlist = list()

    # Añade los canales que forman el menú principal

    get_string = config.get_localized_string
    addon_version = config.get_addon_version(with_fix=False, from_xml=True)

    itemlist.append(
        Item(
            title = get_string(30130),
            channel = "news",
            action = "mainlist",
            thumbnail = get_thumb("news.png", view),
            category = get_string(30119),
            viewmode = "thumbnails",
            context = [
                {
                    "title": get_string(70285),
                    "channel": "news", 
                    "action":"news_setting"
                }
            ]
        )
    )

    itemlist.append(
        Item(
            title = get_string(30118),
            channel = "channelselector",
            action = "getchanneltypes",
            thumbnail = get_thumb("channels.png", view),
            view = view,
            category = get_string(30119),
            viewmode = "thumbnails"
        )
    )

    itemlist.append(
        Item(
            title = get_string(80787),
            channel = "info_popup",
            action = "mainlist",
            thumbnail = get_thumb("wishlist.png", view),
            category = "wishlist",
            viewmode = "thumbnails",
            context = [
                {
                    "title": get_string(80788),
                    "channel": "info_popup",
                    "action": "show_settings"
                }
            ]
        )
    )

    itemlist.append(
        Item(
            title = get_string(70527),
            channel = "alfavorites",
            action ="mainlist",
            thumbnail = get_thumb("mylink.png", view),
            view = view,
            category = get_string(70527),
            viewmode = "thumbnails"
        )
    )

    itemlist.append(
        Item(
            title = get_string(30103),
            channel = "search",
            action = "mainlist",
            thumbnail = get_thumb("search.png", view),
            category = get_string(30119),
            viewmode = "list",
            context = [
                {
                    "title": get_string(70286),
                    "channel": "search",
                    "action": "opciones",
                    "goto": True
                }
            ]
        )
    )

    itemlist.append(
        Item(
            title = get_string(30102),
            channel = "favorites",
            action = "mainlist",
            thumbnail = get_thumb("favorites.png", view),
            category = get_string(30102),
            viewmode = "thumbnails"
        )
    )

    if config.get_videolibrary_support():
        itemlist.append(
            Item(
                title = get_string(30131),
                channel = "videolibrary",
                action = "mainlist",
                thumbnail = get_thumb("videolibrary.png", view),
                category = get_string(30119),
                viewmode = "thumbnails",
                context = [
                    {
                        "title": get_string(70287),
                        "channel": "videolibrary",
                        "action": "channel_config"
                    }
                ]
            )
        )

    itemlist.append(
        Item(
            title = get_string(30101),
            channel = "downloads",
            action = "mainlist",
            thumbnail = get_thumb("downloads.png", view),
            viewmode = "list",
            context = [
                {
                    "title": get_string(70288),
                    "channel": "setting",
                    "config": "downloads",
                    "action": "channel_config"
                }
            ]
        )
    )

    # fix = config.get_addon_version_fix()
    thumb_setting = "setting_%s.png" % 0 # int(fix[4:])

    itemlist.append(
        Item(
            title = get_string(30100),
            channel = "setting",
            action = "mainlist",
            thumbnail = get_thumb(thumb_setting, view),
            category = get_string(30100),
            viewmode = "list"
        )
    )

    if config.is_xbmc():
        itemlist.append(
            Item(
                title = get_string(70761),
                channel = "report",
                action = "mainlist",
                thumbnail = get_thumb("error.png", view),
                category = get_string(30104),
                viewmode = "list"
            )
        )

    itemlist.append(
        Item(
            title = '{} ({} {})'.format(get_string(30104), get_string(20000), addon_version),
            channel = "help",
            action = "mainlist",
            thumbnail = os.path.join(config.get_runtime_path(), "resources", 'Screenshot.jpg'),
            category = get_string(30104),
            viewmode = "list"
        )
    )
                         
    try:
        versiones = config.get_versions_from_repo()
    except:
        versiones = {}
        import traceback
        logger.error(traceback.format_exc())

    if versiones and addon_version != versiones.get('plugin.video.alfa', ''):
        itemlist.append(
            Item(
                title = "[COLOR hotpink][B]Actualizar a versión[/B][/COLOR] [COLOR gold][B]%s[/B][/COLOR] (versión instalada: %s)" %  (versiones['plugin.video.alfa'], addon_version),
                channel = "channelselector",
                action = "install_alfa",
                thumbnail = os.path.join(config.get_runtime_path(), "resources", 'Screenshot.jpg'),
                category = get_string(30104),
                viewmode = "list"
            )
        )

    from lib import generictools
    browser, res = generictools.call_browser('', lookup=True)
    browser_dict = {}

    if browser:
        browser_dict['action'] = 'call_browser'
        browser_dict['title'] = '{} [COLOR limegreen]{}[/COLOR]'.format(get_string(70758), get_string(70760) % browser)
    else:
        browser_dict['action'] = ''
        browser_dict['title'] = '{} [COLOR gold]({}: Chrome, Firefox, Opera)[/COLOR]:'.format(get_string(70758), get_string(70759))

    itemlist.append(
        Item(
            channel = "setting",
            action = browser_dict['action'],
            url = 'https://alfa-addon.com/foros/tutoriales.11/', 
            title = browser_dict['title'],
            thumbnail = get_thumb("help.png", view),
            unify = False,
            folder = False, 
            category = get_string(30104),
            viewmode = "list"
        )
    )
    
    itemlist.append(
        Item(
            channel = "setting",
            action = browser_dict['action'],
            url = 'https://alfa-addon.com/threads/dontorrent-potenciado-con-busquedas-en-btdigg.4798/', 
            title = "-     [COLOR yellow]Dontorrent potenciado con búsquedas en [COLOR limegreen]BT[/COLOR][COLOR red]Digg[/COLOR][/COLOR]   " + 
                    "https://alfa-addon.com/threads/dontorrent-potenciado-con-busquedas-en-btdigg.4798/",
            thumbnail = get_thumb("on_the_air.png", view),
            unify = False,
            folder = False,
            category = get_string(30104),
            viewmode = "list"
        )
    )

    return itemlist
Esempio n. 16
0
def check_addon_updates(verbose=False):
    logger.info()

    ADDON_UPDATES_JSON = 'https://extra.alfa-addon.com/addon_updates/updates.json'
    ADDON_UPDATES_ZIP = 'https://extra.alfa-addon.com/addon_updates/updates.zip'

    try:
        last_fix_json = os.path.join(
            config.get_runtime_path(),
            'last_fix.json')  # información de la versión fixeada del usuario
        # Se guarda en get_runtime_path en lugar de get_data_path para que se elimine al cambiar de versión

        # Descargar json con las posibles actualizaciones
        # -----------------------------------------------
        data = httptools.downloadpage(ADDON_UPDATES_JSON, timeout=2).data
        if data == '':
            logger.info('No se encuentran actualizaciones del addon')
            if verbose:
                platformtools.dialog_notification(
                    'Alfa ya está actualizado',
                    'No hay ninguna actualización urgente')
            return False

        data = jsontools.load(data)
        if 'addon_version' not in data or 'fix_version' not in data:
            logger.info('No hay actualizaciones del addon')
            if verbose:
                platformtools.dialog_notification(
                    'Alfa ya está actualizado',
                    'No hay ninguna actualización urgente')
            return False

        # Comprobar versión que tiene instalada el usuario con versión de la actualización
        # --------------------------------------------------------------------------------
        current_version = config.get_addon_version(with_fix=False)
        if current_version != data['addon_version']:
            logger.info('No hay actualizaciones para la versión %s del addon' %
                        current_version)
            if verbose:
                platformtools.dialog_notification(
                    'Alfa ya está actualizado',
                    'No hay ninguna actualización urgente')
            return False

        if os.path.exists(last_fix_json):
            try:
                lastfix = {}
                lastfix = jsontools.load(filetools.read(last_fix_json))
                if lastfix['addon_version'] == data[
                        'addon_version'] and lastfix['fix_version'] == data[
                            'fix_version']:
                    logger.info(
                        'Ya está actualizado con los últimos cambios. Versión %s.fix%d'
                        % (data['addon_version'], data['fix_version']))
                    if verbose:
                        platformtools.dialog_notification(
                            'Alfa ya está actualizado', 'Versión %s.fix%d' %
                            (data['addon_version'], data['fix_version']))
                    return False
            except:
                if lastfix:
                    logger.error('last_fix.json: ERROR en: ' + str(lastfix))
                else:
                    logger.error('last_fix.json: ERROR desconocido')
                lastfix = {}

        # Descargar zip con las actualizaciones
        # -------------------------------------
        localfilename = os.path.join(config.get_data_path(),
                                     'temp_updates.zip')
        if os.path.exists(localfilename): os.remove(localfilename)

        downloadtools.downloadfile(ADDON_UPDATES_ZIP,
                                   localfilename,
                                   silent=True)

        # Descomprimir zip dentro del addon
        # ---------------------------------
        try:
            unzipper = ziptools.ziptools()
            unzipper.extract(localfilename, config.get_runtime_path())
        except:
            import xbmc
            xbmc.executebuiltin('XBMC.Extract("%s", "%s")' %
                                (localfilename, config.get_runtime_path()))
            time.sleep(1)

        # Borrar el zip descargado
        # ------------------------
        os.remove(localfilename)

        # Guardar información de la versión fixeada
        # -----------------------------------------
        if 'files' in data: data.pop('files', None)
        filetools.write(last_fix_json, jsontools.dump(data))

        logger.info('Addon actualizado correctamente a %s.fix%d' %
                    (data['addon_version'], data['fix_version']))
        if verbose:
            platformtools.dialog_notification(
                'Alfa actualizado a', 'Versión %s.fix%d' %
                (data['addon_version'], data['fix_version']))
        return True

    except:
        logger.error('Error al comprobar actualizaciones del addon!')
        logger.error(traceback.format_exc())
        if verbose:
            platformtools.dialog_notification(
                'Alfa actualizaciones', 'Error al comprobar actualizaciones')
        return False
Esempio n. 17
0
def check_addon_updates(verbose=False):
    logger.info()

    # Forzamos la actualización de los repos para facilitar la actualización del addon Alfa
    xbmc.executebuiltin('UpdateAddonRepos')
    
    ADDON_UPDATES_JSON = 'https://extra.alfa-addon.com/addon_updates/updates.json'
    ADDON_UPDATES_ZIP = 'https://extra.alfa-addon.com/addon_updates/updates.zip'

    try:
        get_ua_list()
    except:
        pass

    try:
        last_fix_json = os.path.join(config.get_runtime_path(), 'last_fix.json')   # información de la versión fixeada del usuario
        # Se guarda en get_runtime_path en lugar de get_data_path para que se elimine al cambiar de versión

        try:
            localfilename = os.path.join(config.get_data_path(), 'temp_updates.zip')
            if os.path.exists(localfilename): os.remove(localfilename)
        except:
            pass
        
        # Descargar json con las posibles actualizaciones
        # -----------------------------------------------
        data = httptools.downloadpage(ADDON_UPDATES_JSON, timeout=5).data
        if data == '': 
            logger.info('No se encuentran actualizaciones del addon')
            if verbose:
                dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente')
            check_update_to_others(verbose=verbose)                             # Comprueba las actualuzaciones de otros productos
            return False

        data = jsontools.load(data)
        if 'addon_version' not in data or 'fix_version' not in data: 
            logger.info('No hay actualizaciones del addon')
            if verbose:
                dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente')
            check_update_to_others(verbose=verbose)                             # Comprueba las actualuzaciones de otros productos
            return False

        # Comprobar versión que tiene instalada el usuario con versión de la actualización
        # --------------------------------------------------------------------------------
        current_version = config.get_addon_version(with_fix=False, from_xml=True)
        if current_version != data['addon_version']:
            logger.info('No hay actualizaciones para la versión %s del addon' % current_version)
            if verbose:
                dialog_notification('Alfa ya está actualizado', 'No hay ninguna actualización urgente')
            check_update_to_others(verbose=verbose)                             # Comprueba las actualuzaciones de otros productos
            return False

        if os.path.exists(last_fix_json):
            try:
                lastfix =  {} 
                lastfix = jsontools.load(open(last_fix_json, "r").read())
                if lastfix['addon_version'] == data['addon_version'] and lastfix['fix_version'] == data['fix_version']:
                    logger.info('Ya está actualizado con los últimos cambios. Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
                    if verbose:
                        dialog_notification('Alfa ya está actualizado', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
                    check_update_to_others(verbose=verbose)                     # Comprueba las actualuzaciones de otros productos
                    return False
            except:
                if lastfix:
                    logger.error('last_fix.json: ERROR en: ' + str(lastfix))
                else:
                    logger.error('last_fix.json: ERROR desconocido')
                lastfix =  {}

        # Descargar zip con las actualizaciones
        # -------------------------------------

        downloadtools.downloadfile(ADDON_UPDATES_ZIP, localfilename, silent=True)
        
        # Descomprimir zip dentro del addon
        # ---------------------------------
        try:
            unzipper = ziptools.ziptools()
            unzipper.extract(localfilename, config.get_runtime_path())
        except:
            xbmc.executebuiltin('Extract("%s", "%s")' % (localfilename, config.get_runtime_path()))
            time.sleep(1)
        
        # Borrar el zip descargado
        # ------------------------
        try:
            os.remove(localfilename)
        except:
            pass
        
        # Si es PY3 se actualizan los módulos marshal
        if PY3:
            from platformcode.custom_code import marshal_check
            marshal_check()
        
        # Guardar información de la versión fixeada
        # -----------------------------------------
        if 'files' in data: data.pop('files', None)
            
        open(last_fix_json, "w").write(jsontools.dump(data))
        
        logger.info('Addon actualizado correctamente a %s.fix%d' % (data['addon_version'], data['fix_version']))
        if verbose:
            dialog_notification('Alfa actualizado a', 'Versión %s.fix%d' % (data['addon_version'], data['fix_version']))
        
        check_update_to_others(verbose=verbose)                                 # Comprueba las actualuzaciones de otros productos
        return True

    except:
        logger.error('Error al comprobar actualizaciones del addon!')
        logger.error(traceback.format_exc())
        if verbose:
            dialog_notification('Alfa actualizaciones', 'Error al comprobar actualizaciones')
        check_update_to_others(verbose=verbose)                                 # Comprueba las actualuzaciones de otros productos
        return False
Esempio n. 18
0
def getmainlist(view="thumb_"):
    logger.debug()
    itemlist = list()

    # Main Menu Channels
    if addon.getSetting('enable_news_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30130),
                 channel="news",
                 action="mainlist",
                 thumbnail=get_thumb("news.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70285),
                     "channel": "shortcuts",
                     "action": "SettingOnPosition",
                     "category": 7,
                     "setting": 1
                 }]))

    if addon.getSetting('enable_channels_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30118),
                 channel="channelselector",
                 action="getchanneltypes",
                 thumbnail=get_thumb("channels.png", view),
                 view=view,
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails"))

    if addon.getSetting('enable_search_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30103),
                 channel="search",
                 path='special',
                 action="mainlist",
                 thumbnail=get_thumb("search.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="list",
                 context=[{
                     "title": config.get_localized_string(60412),
                     "action": "setting_channel_new",
                     "channel": "search"
                 }, {
                     "title": config.get_localized_string(70286),
                     "channel": "shortcuts",
                     "action": "SettingOnPosition",
                     "category": 5,
                     "setting": 1
                 }]))

    if addon.getSetting('enable_onair_menu') == "true":
        itemlist.append(
            Item(channel="filmontv",
                 action="mainlist",
                 title=config.get_localized_string(50001),
                 thumbnail=get_thumb("on_the_air.png"),
                 viewmode="thumbnails"))

    if addon.getSetting('enable_link_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(70527),
                 channel="kodfavorites",
                 action="mainlist",
                 thumbnail=get_thumb("mylink.png", view),
                 view=view,
                 category=config.get_localized_string(70527),
                 viewmode="thumbnails"))

    if addon.getSetting('enable_fav_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30102),
                 channel="favorites",
                 action="mainlist",
                 thumbnail=get_thumb("favorites.png", view),
                 category=config.get_localized_string(30102),
                 viewmode="thumbnails"))

    if config.get_videolibrary_support() and addon.getSetting(
            'enable_library_menu') == "true":
        itemlist.append(
            Item(title=config.get_localized_string(30131),
                 channel="videolibrary",
                 action="mainlist",
                 thumbnail=get_thumb("videolibrary.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70287),
                     "channel": "shortcuts",
                     "action": "SettingOnPosition",
                     "category": 2,
                     "setting": 1
                 }, {
                     "title": config.get_localized_string(60568),
                     "channel": "videolibrary",
                     "action": "update_videolibrary"
                 }]))
    if downloadenabled != "false":
        itemlist.append(
            Item(title=config.get_localized_string(30101),
                 channel="downloads",
                 action="mainlist",
                 thumbnail=get_thumb("downloads.png", view),
                 viewmode="list",
                 context=[{
                     "title": config.get_localized_string(70288),
                     "channel": "shortcuts",
                     "action": "SettingOnPosition",
                     "category": 6
                 }]))

    thumb_setting = "setting_%s.png" % 0  # config.get_setting("plugin_updates_available")

    itemlist.append(
        Item(title=config.get_localized_string(30100),
             channel="setting",
             action="settings",
             thumbnail=get_thumb(thumb_setting, view),
             category=config.get_localized_string(30100),
             viewmode="list",
             folder=False))
    itemlist.append(
        Item(title=config.get_localized_string(30104) + " (v" +
             config.get_addon_version(with_fix=True) + ")",
             channel="help",
             action="mainlist",
             thumbnail=get_thumb("help.png", view),
             category=config.get_localized_string(30104),
             viewmode="list"))
    return itemlist
Esempio n. 19
0
import time
import os

from platformcode import config, logger, platformtools

from core import jsontools
from core import filetools
from core.item import Item
from lib.alfa_assistant import execute_binary_from_alfa_assistant

json_data_file_name = 'custom_code.json'
ADDON_NAME = 'plugin.video.alfa'
ADDON_PATH = config.get_runtime_path()
ADDON_USERDATA_PATH = config.get_data_path()
ADDON_USERDATA_BIN_PATH = filetools.join(ADDON_USERDATA_PATH, 'bin')
ADDON_VERSION = config.get_addon_version(with_fix=False, from_xml=True)
ADDON_CUSTOMCODE_JSON = filetools.join(ADDON_PATH, json_data_file_name)


def init():
    logger.info()

    """
    Todo el código añadido al add-on se borra con cada actualización.  Esta función permite restaurarlo automáticamente con cada actualización.  Esto permite al usuario tener su propio código, bajo su responsabilidad, y restaurarlo al add-on cada vez que se actualiza.
    
    El mecanismo funciona copiando el contenido de la carpeta-arbol "./userdata/addon_data/plugin.video.alfa/custom_code/..." sobre
    las carpetas de código del add-on.  No verifica el contenido, solo vuelca(reemplaza) el contenido de "custom_code".
    
    El usuario almacenará en las subcarpetas de "custom_code" su código actualizado y listo para ser copiado en cualquier momento.
    Si no se desea que copie algo, simplemente se borra de "custom_code" y ya no se copiará en la próxima actualización.
    
Esempio n. 20
0
def getmainlist(view="thumb_"):
    logger.info()
    itemlist = list()

    # Añade los canales que forman el menú principal
    itemlist.append(
        Item(title=config.get_localized_string(30130),
             channel="news",
             action="mainlist",
             thumbnail=get_thumb("news.png", view),
             category=config.get_localized_string(30119),
             viewmode="thumbnails",
             context=[{
                 "title": config.get_localized_string(70285),
                 "channel": "news",
                 "action": "menu_opciones",
                 "goto": True
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30118),
             channel="channelselector",
             action="getchanneltypes",
             thumbnail=get_thumb("channels.png", view),
             view=view,
             category=config.get_localized_string(30119),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(70527),
             channel="alfavorites",
             action="mainlist",
             thumbnail=get_thumb("mylink.png", view),
             view=view,
             category=config.get_localized_string(70527),
             viewmode="thumbnails"))

    itemlist.append(
        Item(title=config.get_localized_string(30103),
             channel="search",
             action="mainlist",
             thumbnail=get_thumb("search.png", view),
             category=config.get_localized_string(30119),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70286),
                 "channel": "search",
                 "action": "opciones",
                 "goto": True
             }]))

    itemlist.append(
        Item(title=config.get_localized_string(30102),
             channel="favorites",
             action="mainlist",
             thumbnail=get_thumb("favorites.png", view),
             category=config.get_localized_string(30102),
             viewmode="thumbnails"))

    if config.get_videolibrary_support():
        itemlist.append(
            Item(title=config.get_localized_string(30131),
                 channel="videolibrary",
                 action="mainlist",
                 thumbnail=get_thumb("videolibrary.png", view),
                 category=config.get_localized_string(30119),
                 viewmode="thumbnails",
                 context=[{
                     "title": config.get_localized_string(70287),
                     "channel": "videolibrary",
                     "action": "channel_config"
                 }]))

    itemlist.append(
        Item(title=config.get_localized_string(30101),
             channel="downloads",
             action="mainlist",
             thumbnail=get_thumb("downloads.png", view),
             viewmode="list",
             context=[{
                 "title": config.get_localized_string(70288),
                 "channel": "setting",
                 "config": "downloads",
                 "action": "channel_config"
             }]))

    thumb_setting = "setting_%s.png" % 0  # config.get_setting("plugin_updates_available")

    itemlist.append(
        Item(title=config.get_localized_string(30100),
             channel="setting",
             action="mainlist",
             thumbnail=get_thumb(thumb_setting, view),
             category=config.get_localized_string(30100),
             viewmode="list"))

    if config.is_xbmc():
        itemlist.append(
            Item(title="Reportar un fallo",
                 channel="setting",
                 action="report_menu",
                 thumbnail=get_thumb("error.png", view),
                 category=config.get_localized_string(30104),
                 viewmode="list"))

    itemlist.append(
        Item(title=config.get_localized_string(30104) + " (" +
             config.get_localized_string(20000) + " " +
             config.get_addon_version(with_fix=False) + ")",
             channel="help",
             action="mainlist",
             thumbnail=get_thumb("help.png", view),
             category=config.get_localized_string(30104),
             viewmode="list"))

    itemlist.append(
        Item(
            channel="setting",
            action="call_chrome",
            url='https://alfa-addon.com/foros/tutoriales.11/',
            title=
            "Tutoriales relevantes [COLOR yellow](pincha si tienes instalado Chrome)[/COLOR]:",
            thumbnail=get_thumb("help.png", view),
            unify=False,
            folder=False,
            category=config.get_localized_string(30104),
            viewmode="list"))

    itemlist.append(
        Item(
            channel="setting",
            action="call_chrome",
            url=
            'https://alfa-addon.com/threads/descargas-gestion-integral-de-clientes-torrent.3526/',
            title=
            "-     [COLOR yellow]Descargas: Gestión Integral de Clientes Torrent[/COLOR]   "
            +
            "https://alfa-addon.com/threads/descargas-gestion-integral-de-clientes-torrent.3526/",
            thumbnail=get_thumb("help.png", view),
            unify=False,
            folder=False,
            category=config.get_localized_string(30104),
            viewmode="list"))

    itemlist.append(
        Item(
            channel="setting",
            action="call_chrome",
            url=
            'https://alfa-addon.com/threads/no-se-actualiza-alfa-como-descargarlo-manualmente.3292/',
            title=
            "-     [COLOR yellow]¿No se ACTUALIZA Alfa? Cómo DESCARGARLO manualmente[/COLOR]   "
            +
            "https://alfa-addon.com/threads/no-se-actualiza-alfa-como-descargarlo-manualmente.3292/",
            thumbnail=get_thumb("help.png", view),
            unify=False,
            folder=False,
            category=config.get_localized_string(30104),
            viewmode="list"))
    return itemlist