Esempio n. 1
0
def grab_log(file=False, old=False, wizard=False):
    if wizard:
        if os.path.exists(CONFIG.WIZLOG):
            return CONFIG.WIZLOG if file else tools.read_from_file(
                CONFIG.WIZLOG)
        else:
            return False

    logsfound = []

    for item in [
            file for file in os.listdir(CONFIG.LOGPATH)
            if os.path.basename(file).startswith('kodi')
    ]:
        if item.endswith('.log'):
            if (old and 'old' in item) or (not old and 'old' not in item):
                logsfound.append(os.path.join(CONFIG.LOGPATH, item))

    if len(logsfound) > 0:
        logsfound.sort(key=lambda f: os.path.getmtime(f))
        if file:
            return logsfound[-1]
        else:
            return tools.read_from_file(logsfound[-1])
    else:
        return False
Esempio n. 2
0
def grab_log(file=False, old=False, wizard=False):
    from resources.libs.common import tools
    if wizard:
        if not os.path.exists(CONFIG.WIZLOG):
            return False
        else:
            if file:
                return CONFIG.WIZLOG
            else:
                return tools.read_from_file(CONFIG.WIZLOG)
    finalfile = 0
    logfilepath = os.listdir(CONFIG.LOGPATH)
    logsfound = []

    for item in logfilepath:
        if old and item.endswith('.old.log'):
            logsfound.append(os.path.join(CONFIG.LOGPATH, item))
        elif not old and item.endswith('.log') and not item.endswith('.old.log'):
            logsfound.append(os.path.join(CONFIG.LOGPATH, item))

    if len(logsfound) > 0:
        logsfound.sort(key=lambda f: os.path.getmtime(f))
        if file:
            return logsfound[-1]
        else:
            return tools.read_from_file(logsfound[-1])
    else:
        return False
Esempio n. 3
0
def view_advanced():
    from resources.libs.common import tools
    from resources.libs.gui import window

    window.show_text_box(
        CONFIG.ADDONTITLE,
        tools.read_from_file(CONFIG.ADVANCED).replace('\t', '    '))
Esempio n. 4
0
def kodi_17_fix():
    from resources.libs.common import tools
    from resources.libs import update

    addonlist = glob.glob(os.path.join(CONFIG.ADDONS, '*/'))
    disabledAddons = []
    for folder in sorted(addonlist, key=lambda x: x):
        addonxml = os.path.join(folder, 'addon.xml')
        if os.path.exists(addonxml):
            fold = folder.replace(CONFIG.ADDONS, '')[1:-1]
            aid = tools.parse_dom(tools.read_from_file(addonxml),
                                  'addon',
                                  ret='id')
            try:
                if len(aid) > 0:
                    addonid = aid[0]
                else:
                    addonid = fold
            except:
                try:
                    logging.log("{0} was disabled".format(aid[0]))
                    disabledAddons.append(addonid)
                except:
                    logging.log("Unable to enable: {0}".format(folder),
                                level=xbmc.LOGERROR)
    if len(disabledAddons) > 0:
        addon_database(disabledAddons, 1, True)
        logging.log_notify(
            CONFIG.ADDONTITLE,
            "[COLOR {0}]Enabling Addons Complete![/COLOR]".format(
                CONFIG.COLOR2))
    update.force_update()
    xbmc.executebuiltin("ReloadSkin()")
Esempio n. 5
0
def unhide_password():
    from resources.libs.common import tools
    from resources.libs.common import logging
    
    dialog = xbmcgui.Dialog()

    if dialog.yesno(CONFIG.ADDONTITLE,
                        "[COLOR {0}]Would you like to [COLOR {1}]unhide[/COLOR] all passwords when typing in the add-on settings menus?[/COLOR]".format(CONFIG.COLOR2, CONFIG.COLOR1),
                        yeslabel="[B][COLOR springgreen]Unhide Passwords[/COLOR][/B]",
                        nolabel="[B][COLOR red]No Cancel[/COLOR][/B]"):
        count = 0
        for folder in glob.glob(os.path.join(CONFIG.ADDONS, '*/')):
            sett = os.path.join(folder, 'resources', 'settings.xml')
            if os.path.exists(sett):
                f = tools.read_from_file(sett)
                match = tools.parse_dom(f, 'addon', ret='id')
                for line in match:
                    if 'pass' in line:
                        if 'option="hidden"' in line:
                            try:
                                change = line.replace('option="hidden"', '')
                                f.replace(line, change)
                                count += 1
                                logging.log("[Unhide Passwords] found in {0} on {1}".format(sett.replace(CONFIG.HOME, ''), line))
                            except:
                                pass
                tools.write_to_file(sett, f)
        logging.log_notify("[COLOR {0}]Unhide Passwords[/COLOR]".format(CONFIG.COLOR1),
                           "[COLOR {0}]{1} items changed[/COLOR]".format(CONFIG.COLOR2, count))
        logging.log("[Unhide Passwords] {0} items changed".format(count))
    else:
        logging.log("[Unhide Passwords] Cancelled")
Esempio n. 6
0
        def onInit(self):
            from resources.libs.common import tools

            self.title = 101
            self.msg = 102
            self.scrollbar = 103
            self.upload = 201
            self.kodilog = 202
            self.oldlog = 203
            self.wizardlog = 204
            self.closebutton = 205

            if window_msg is None:
                self.logmsg = tools.read_from_file(self.log_file)
            else:
                self.logmsg = window_msg
            self.logfile = os.path.basename(self.log_file)
            
            self.buttons = 'true' if ext_buttons else 'false'
            
            self.setProperty('texture.color1', CONFIG.COLOR1)
            self.setProperty('texture.color2', CONFIG.COLOR2)
            self.setProperty('message.title', window_title)
            self.setProperty('message.logmsg', highlight_text(self.logmsg))
            self.setProperty('message.logfile', self.logfile)
            self.setProperty('message.buttons', self.buttons)
Esempio n. 7
0
 def onInit(self):
     self.title = 101
     self.msg = 102
     self.scrollbar = 103
     self.upload = 201
     self.kodilog = 202
     self.oldlog = 203
     self.wizardlog = 204
     self.closebutton = 205
     if 98 - 98: I1IiiI % Ii1I * OoooooooOO
     if window_msg is None:
         self.logmsg = tools.read_from_file(self.log_file)
     else:
         self.logmsg = window_msg
     self.logfile = os.path.basename(self.log_file)
     if 51 - 51: iIii1I11I1II1.OoOoOO00 / oO0o + o0oOOo0O0Ooo
     self.buttons = 'true' if ext_buttons else 'false'
     if 33 - 33: ooOoO0o.II111iiii % iII111i + o0oOOo0O0Ooo
     self.setProperty('texture.color1', CONFIG.COLOR1)
     self.setProperty('texture.color2', CONFIG.COLOR2)
     self.setProperty('message.title', window_title)
     self.setProperty('message.logmsg', I1i1I(self.logmsg))
     self.setProperty('message.logfile', self.logfile)
     self.setProperty('message.buttons', self.buttons)
     if 71 - 71: Oo0Ooo % OOooOOo
Esempio n. 8
0
def check_log():
    from resources.libs.common import tools

    next = tools.get_date(days=1)
    lines = tools.read_from_file(CONFIG.WIZLOG).split('\n')

    if CONFIG.CLEANWIZLOGBY == '0':  # By Days
        keep = tools.get_date(days=-CONFIG.MAXWIZDATES[int(float(CONFIG.CLEANDAYS))])
        x = 0
        for line in lines:
            if str(line[1:11]) >= str(keep):
                break
            x += 1
        newfile = lines[x:]
        tools.write_to_file(CONFIG.WIZLOG, '\n'.join(newfile))
    elif CONFIG.CLEANWIZLOGBY == '1':  # By Size
        maxsize = CONFIG.MAXWIZSIZE[int(float(CONFIG.CLEANSIZE))]*1024
        if os.path.getsize(CONFIG.WIZLOG) >= maxsize:
            start = len(lines)/2
            newfile = lines[start:]
            tools.write_to_file(CONFIG.WIZLOG, '\n'.join(newfile))
    elif CONFIG.CLEANWIZLOGBY == '2':  # By Lines
        maxlines = CONFIG.MAXWIZLINES[int(float(CONFIG.CLEANLINES))]
        if len(lines) > maxlines:
            start = len(lines) - int(maxlines/2)
            newfile = lines[start:]
            tools.write_to_file(CONFIG.WIZLOG, '\n'.join(newfile))
    CONFIG.set_setting('nextcleandate', str(next))
def error_list(file):
    errors = []
    b = tools.read_from_file(file).replace('\n', '[CR]').replace('\r', '')

    match = re.compile("-->Python callback/script returned the following error<--(.+?)-->End of Python script error report<--").findall(b)
    for item in match:
        errors.append(item)
    return errors
Esempio n. 10
0
def installed(addon):
    url = os.path.join(CONFIG.ADDONS, addon, 'addon.xml')
    if os.path.exists(url):
        try:
            name = tools.parse_dom(tools.read_from_file(url), 'addon', ret='name', attrs={'id': addon})
            icon = os.path.join(CONFIG.ADDONS, addon, 'icon.png')  # read from infolabel?
            logging.log_notify('[COLOR {0}]{1}[/COLOR]'.format(CONFIG.COLOR1, name[0]),
                               '[COLOR {0}]Add-on Enabled[/COLOR]'.format(CONFIG.COLOR2), '2000', icon)
        except:
            pass
Esempio n. 11
0
def create_temp(plugin):
    from resources.libs.common import tools

    temp = os.path.join(CONFIG.PLUGIN, 'resources', 'tempaddon.xml')
    r = tools.read_from_file(temp)
    plugdir = os.path.join(CONFIG.ADDONS, plugin)
    if not os.path.exists(plugdir):
        os.makedirs(plugdir)

    tools.write_to_file(os.path.join(plugdir, 'addon.xml'), r.replace('testid', plugin).replace('testversion', '0.0.1'))
    logging.log("{0}: wrote addon.xml".format(plugin))
Esempio n. 12
0
def depends_list(plugin):
    addonxml = os.path.join(CONFIG.ADDONS, plugin, 'addon.xml')
    if os.path.exists(addonxml):

        match  = tools.parse_dom(tools.read_from_file(addonxml), 'import', ret='addon')
        items  = []
        for depends in match:
            if not 'xbmc.python' in depends:
                items.append(depends)
        return items
    return []
Esempio n. 13
0
 def binaries(self):
     from resources.libs import db
     from resources.libs import install
     from resources.libs.common import logging
     from resources.libs.common import tools
     
     dialog = xbmcgui.Dialog()
     binarytxt = os.path.join(CONFIG.USERDATA, 'build_binaries.txt')
     
     restore = False
     binaryids = []
     
     if os.path.exists(binarytxt):
         binaryids = tools.read_from_file(binarytxt).split(',')
         
         # dialog.ok(CONFIG.ADDONTITLE, '[COLOR {0}]The restored backup may depend on the following platform-specific addons, which were not included:[/COLOR]'.format(CONFIG.COLOR2), '[COLOR {0}]{1}[/COLOR]'.format(CONFIG.COLOR1, ', '.join([tools.get_addon_info(id, 'name') for id in binaryids])), '[COLOR {0}]For best results, consider installing them manually after Kodi restarts.[/COLOR]'.format(CONFIG.COLOR2))
         
         logging.log("[Binary Detection] Reinstalling Eligible Binary Addons", level=xbmc.LOGNOTICE)            
         dialog.ok(CONFIG.ADDONTITLE, '[COLOR {0}]The restored build contains platform-specific addons, which will now be automatically installed. A number of dialogs may pop up during this process. Cancelling them may cause the restored build to function incorrectly.[/COLOR]'.format(CONFIG.COLOR2))
         restore = True
     else:
         logging.log("[Binary Detection] No Eligible Binary Addons to Reinstall", level=xbmc.LOGNOTICE)
         return True
     
     if restore:       
         success = []
         fail = []
         
         if len(binaryids) == 0:
             logging.log('No addons selected for installation.', level=xbmc.LOGNOTICE)
             return
         
         # clear out the addons for sure
         # for id in binaryids:
             # if clear.remove_addon(id, tools.get_addon_info(id, 'name'), over=True, data=False):
                 # continue
             
         # finally, reinstall addons
         for id in binaryids:
             if install.install_from_kodi(id):
                 logging.log('{0} install succeeded.'.format(id), level=xbmc.LOGNOTICE)
                 success.append(id)
             else:
                 logging.log('{0} install failed.'.format(id), level=xbmc.LOGNOTICE)
                 fail.append(id)
                 
         if not fail:
             dialog.ok(CONFIG.ADDONTITLE, 'The selected addons were all installed successfully.')
             os.remove(binarytxt)
             return True
         else:
             dialog.ok(CONFIG.ADDONTITLE, 'The following addons failed to install:\n{0}'.format(', '.join(fail)))
             return False
Esempio n. 14
0
def binaries():
    dialog = xbmcgui.Dialog()

    binarytxt = os.path.join(CONFIG.USERDATA, 'build_binaries.txt')

    if os.path.exists(binarytxt):
        binaryids = tools.read_from_file(binarytxt).split(',')

        logging.log(
            "[Binario Detección] Reinstalación de Add-ons Binarios Elegibles")
        dialog.ok(
            CONFIG.ADDONTITLE,
            '[COLOR {0}]La compilación restaurada contiene add-ons específicos de la plataforma, que ahora serán '
            'instalados automáticamente. Es posible que aparezcan varios cuadros de diálogo durante este proceso. Cancelarlos '
            'puede hacer que la compilación restaurada funcione incorrectamente.[/COLOR]'
            .format(CONFIG.COLOR2))
    else:
        logging.log(
            "[Detección de Binario] No hay Addons Binarios Elegibles para Reinstalar"
        )
        return True

    success = []
    fail = []

    if len(binaryids) == 0:
        logging.log('No se seleccionaron add-ons para la instalación.')
        return

    from resources.libs.gui import addon_menu

    # finally, reinstall addons
    for addonid in binaryids:
        if addon_menu.install_from_kodi(addonid):
            logging.log('{0} instalación correcta.'.format(addonid))
            success.append(addonid)
        else:
            logging.log('{0} instalación fallida.'.format(addonid))
            fail.append(addonid)

    if not fail:
        dialog.ok(
            CONFIG.ADDONTITLE,
            'Todos los  addons seleccionados se instalaron correctamente.')
        os.remove(binarytxt)
        return True
    else:
        dialog.ok(
            CONFIG.ADDONTITLE,
            'Los siguientes addons no se pudieron instalar:\n{0}'.format(
                ', '.join(fail)))
        return False
Esempio n. 15
0
def binaries():
    from resources.libs import install

    dialog = xbmcgui.Dialog()

    binarytxt = os.path.join(CONFIG.USERDATA, 'build_binaries.txt')

    if os.path.exists(binarytxt):
        binaryids = tools.read_from_file(binarytxt).split(',')

        logging.log("[Binary Detection] Reinstalling Eligible Binary Addons")
        dialog.ok(
            CONFIG.ADDONTITLE,
            '[COLOR {0}]The restored build contains platform-specific addons, which will now be '
            'automatically installed. A number of dialogs may pop up during this process. Cancelling them '
            'may cause the restored build to function incorrectly.[/COLOR]'.
            format(CONFIG.COLOR2))
    else:
        logging.log(
            "[Binary Detection] No Eligible Binary Addons to Reinstall")
        return True

    success = []
    fail = []

    if len(binaryids) == 0:
        logging.log('No addons selected for installation.')
        return

    # finally, reinstall addons
    for addonid in binaryids:
        if install.install_from_kodi(addonid):
            logging.log('{0} install succeeded.'.format(addonid))
            success.append(addonid)
        else:
            logging.log('{0} install failed.'.format(addonid))
            fail.append(addonid)

    if not fail:
        dialog.ok(CONFIG.ADDONTITLE,
                  'The selected addons were all installed successfully.')
        os.remove(binarytxt)
        return True
    else:
        dialog.ok(
            CONFIG.ADDONTITLE,
            'The following addons failed to install:\n{0}'.format(
                ', '.join(fail)))
        return False
Esempio n. 16
0
    def install_dependency(self, plugin):
        from resources.libs import db

        dep = os.path.join(CONFIG.ADDONS, plugin, 'addon.xml')
        if os.path.exists(dep):
            match = tools.parse_dom(tools.read_from_file(dep), 'import', ret='addon')
            for depends in match:
                if 'xbmc.python' not in depends:
                    self.progress_dialog.update(0, '\n'+'[COLOR {0}]{1}[/COLOR]'.format(CONFIG.COLOR1, depends))

                    try:
                        add = tools.get_addon_by_id(id=depends)
                        name2 = tools.get_addon_info(add, 'name')
                    except:
                        db.create_temp(depends)
                        db.addon_database(depends, 1)
Esempio n. 17
0
def toggle_dependency(name, dp=None):
    from resources.libs.common import tools

    dep = os.path.join(CONFIG.ADDONS, name, 'addon.xml')
    if os.path.exists(dep):
        match = tools.parse_dom(tools.read_from_file(dep), 'import', ret='addon')
        for depends in match:
            if 'xbmc.python' not in depends:
                dependspath = os.path.join(CONFIG.ADDONS, depends)
                if dp is not None:
                    dp.update("",
                              "Checking Dependency [COLOR yellow]{0}[/COLOR] for [COLOR yellow]{1}[/COLOR]".format(depends, name),
                              "")
                if os.path.exists(dependspath):
                    toggle_addon(name, 'true')
            xbmc.sleep(100)
Esempio n. 18
0
def binaries():
    dialog = xbmcgui.Dialog()

    binarytxt = os.path.join(CONFIG.USERDATA, 'build_binaries.txt')

    if os.path.exists(binarytxt):
        binaryids = tools.read_from_file(binarytxt).split(',')

        logging.log("[Detecção binária] Reinstalando complementos binários qualificados")
        dialog.ok(CONFIG.ADDONTITLE,
                  '[COLOR {0}]A compilação restaurada contém complementos específicos da plataforma, que agora serão '
                  'instalado automaticamente. Vários diálogos podem aparecer durante este processo. Cancelando-os '
                  'pode fazer com que a compilação restaurada funcione incorretamente.[/COLOR]'.format(
                      CONFIG.COLOR2))
    else:
        logging.log("[Detecção binária] Nenhum complemento binário elegível para reinstalar")
        return True

    success = []
    fail = []

    if len(binaryids) == 0:
        logging.log('Nenhum complemento selecionado para instalação.')
        return

    from resources.libs.gui import addon_menu

    # finally, reinstall addons
    for addonid in binaryids:
        if addon_menu.install_from_kodi(addonid):
            logging.log('{0} instalação bem-sucedida.'.format(addonid))
            success.append(addonid)
        else:
            logging.log('{0} a instalação falhou.'.format(addonid))
            fail.append(addonid)

    if not fail:
        dialog.ok(CONFIG.ADDONTITLE, 'Os addons selecionados foram todos instalados com sucesso.')
        os.remove(binarytxt)
        return True
    else:
        dialog.ok(CONFIG.ADDONTITLE, 'Os seguintes complementos não foram instalados:\n{0}'.format(', '.join(fail)))
        return False
Esempio n. 19
0
def IiiIII111iI(addon):
    IiII = os.path.join(CONFIG.ADDONS, addon, 'addon.xml')
    if os.path.exists(IiII):
        try:
            iI1Ii11111iIi = tools.parse_dom(tools.read_from_file(IiII),
                                            'addon',
                                            ret='name',
                                            attrs={'id': addon})
            i1i1II = os.path.join(CONFIG.ADDONS, addon, 'icon.png')
            logging.log_notify(
                '[COLOR {0}]{1}[/COLOR]'.format(CONFIG.COLOR1,
                                                iI1Ii11111iIi[0]),
                '[COLOR {0}]Add-on ativado[/COLOR]'.format(CONFIG.COLOR2),
                '2000', i1i1II)
        except:
            pass
            if 96 - 96:
                o0OO0 - Oo0ooO0oo0oO.I1i1iI1i - o00ooo0 / Oo0ooO0oo0oO * Oo0Ooo
            if 16 - 16:
                oO0o % OOooOOo * o0OO0.OOooOOo / iIii1I11I1II1 * iIii1I11I1II1
Esempio n. 20
0
 def install_dependency(self, plugin):
     from resources.libs import db
     if 31 - 31: I11i - i1IIi * OOooOOo / OoooooooOO
     iI = os.path.join(CONFIG.ADDONS, plugin, 'addon.xml')
     if os.path.exists(iI):
         o00O = tools.parse_dom(tools.read_from_file(iI),
                                'import',
                                ret='addon')
         for OOO0OOO00oo in o00O:
             if 'xbmc.python' not in OOO0OOO00oo:
                 self.progress_dialog.update(
                     0, '\n' + '[COLOR {0}]{1}[/COLOR]'.format(
                         CONFIG.COLOR1, OOO0OOO00oo))
                 if 31 - 31: II111iiii - OOooOOo.I1i1iI1i % OoOoOO00 - O0
                 try:
                     i1 = tools.get_addon_by_id(id=OOO0OOO00oo)
                     iii11 = tools.get_addon_info(i1, 'name')
                 except:
                     db.create_temp(OOO0OOO00oo)
                     db.addon_database(OOO0OOO00oo, 1)
                     if 58 - 58:
                         OOooOOo * i11iIiiIii / OoOoOO00 % I1i1iI1i - I1ii11iIi11i / oO0o
Esempio n. 21
0
def view_current():
    window.show_text_box(
        CONFIG.ADDONTITLE,
        tools.read_from_file(CONFIG.ADVANCED).replace('\t', '    '))
Esempio n. 22
0
    def show_menu(self, url=None):
        response = tools.open_url(CONFIG.ADDONFILE)
        url_response = tools.open_url(url)
        local_file = os.path.join(CONFIG.ADDON_PATH, 'resources', 'text', 'addons.json')

        if url_response:
            TEMPADDONFILE = url_response.text
        elif response:
            TEMPADDONFILE = response.text
        elif os.path.exists(local_file):
            TEMPADDONFILE = tools.read_from_file(local_file)
        else:
            TEMPADDONFILE = None
            logging.log("[Addon Menu] No Addon list added.")

        if TEMPADDONFILE:
            import json

            try:
                addons_json = json.loads(TEMPADDONFILE)
            except:
                addons_json = None
                logging.log("[Advanced Settings] ERROR: Invalid Format for {0}.".format(TEMPADDONFILE))

            if addons_json:
                addons = addons_json['addons']

                if addons and len(addons) > 0:
                    for addon in addons:
                        addonname = addon.get('name', '')
                        type = addon.get('type', 'addon')
                        section = addon.get('section', False)
                        plugin = addon.get('plugin', '')
                        addonurl = addon.get('url', '')
                        repository = addon.get('repository', '')
                        repositoryxml = addon.get('repositoryxml', '')
                        repositoryurl = addon.get('repositoryurl', '')
                        icon = addon.get('icon', CONFIG.ADDON_ICON)
                        fanart = addon.get('fanart', CONFIG.ADDON_FANART)
                        adult = addon.get('adult', False)
                        description = addon.get('description', '')

                        if not addonname:
                            logging.log('[Advanced Settings] Missing tag \'name\'', level=xbmc.LOGDEBUG)
                            continue

                        if not addonurl:
                            logging.log('[Advanced Settings] Missing tag \'url\'', level=xbmc.LOGDEBUG)
                            continue
                        else:
                            if '.zip' in addonurl:
                                pass
                            elif not section:
                                broken = False
                                if not repository:
                                    logging.log('[Advanced Settings] Missing tag \'repository\'', level=xbmc.LOGDEBUG)
                                    broken = True
                                if not repositoryxml:
                                    logging.log('[Advanced Settings] Missing tag \'repositoryxml\'',
                                                level=xbmc.LOGDEBUG)
                                    broken = True
                                if not repositoryurl:
                                    logging.log('[Advanced Settings] Missing tag \'repositoryurl\'',
                                                level=xbmc.LOGDEBUG)
                                    broken = True
                                if broken:
                                    continue

                        if section:
                            directory.add_dir(addonname, {'mode': 'addons', 'url': addonurl}, description=description,
                                              icon=icon, fanart=fanart, themeit=CONFIG.THEME3)
                        else:
                            if not CONFIG.SHOWADULT == 'true' and adult:
                                continue

                            if type.lower() == 'skin':
                                directory.add_file(addonname,
                                                   {'mode': 'addons', 'action': 'skin', 'name': addonname,
                                                    'url': addonurl}, description=description, icon=icon, fanart=fanart,
                                                   themeit=CONFIG.THEME2)
                            elif type.lower() == 'addonpack':
                                directory.add_file(addonname, {'mode': 'addons', 'action': 'addonpack',
                                                               'name': addonname, 'url': addonurl},
                                                   description=description, icon=icon, fanart=fanart,
                                                   themeit=CONFIG.THEME2)
                            else:
                                try:
                                    add = tools.get_addon_info(plugin, 'path')
                                    if os.path.exists(add):
                                        addonname = "[COLOR springgreen][Installed][/COLOR] {0}".format(addonname)
                                except:
                                    pass

                                directory.add_file(addonname, {'mode': 'addons', 'action': 'addon', 'name': plugin,
                                                               'addonurl': addonurl, 'repository': repository, 'repositoryxml': repositoryxml,
                                                                        'repositoryurl': repositoryurl}, description=description,
                                                   icon=icon, fanart=fanart, themeit=CONFIG.THEME2)
                else:
                    if not addons:
                        directory.add_file('Text File not formatted correctly!', themeit=CONFIG.THEME3)
                        logging.log("[Addon Menu] ERROR: Invalid Format.")
                    elif len(addons) == 0:
                        directory.add_file("No addons added to this menu yet!", themeit=CONFIG.THEME2)
        else:
            logging.log("[Addon Menu] ERROR: URL for Addon list not working.")
            directory.add_file('Url for txt file not valid', themeit=CONFIG.THEME3)
            directory.add_file('{0}'.format(CONFIG.ADDONFILE), themeit=CONFIG.THEME3)
Esempio n. 23
0
def check_sources():
    from resources.libs.common import logging
    from resources.libs.common import tools

    dialog = xbmcgui.Dialog()
    progress_dialog = xbmcgui.DialogProgress()

    if not os.path.exists(CONFIG.SOURCES):
        logging.log_notify(
            CONFIG.ADDONTITLE,
            "[COLOR {0}]No sources.xml File Found![/COLOR]".format(
                CONFIG.COLOR2))
        return False
    x = 0
    bad = []
    remove = []
    a = tools.read_from_file(CONFIG.SOURCES)
    temp = a.replace('\r', '').replace('\n', '').replace('\t', '')
    match = re.compile('<files>.+?</files>').findall(temp)

    if len(match) > 0:
        match2 = re.compile(
            '<source>.+?<name>(.+?)</name>.+?<path pathversion="1">(.+?)</path>.+?<allowsharing>(.+?)</allowsharing>.+?</source>'
        ).findall(match[0])
        progress_dialog.create(
            CONFIG.ADDONTITLE,
            "[COLOR {0}]Scanning Sources for Broken links[/COLOR]".format(
                CONFIG.COLOR2))
        for name, path, sharing in match2:
            x += 1
            perc = int(tools.percentage(x, len(match2)))
            progress_dialog.update(
                perc, '',
                "[COLOR {0}]Checking [COLOR {1}]{2}[/COLOR]:[/COLOR]".format(
                    CONFIG.COLOR2, CONFIG.COLOR1, name),
                "[COLOR {0}]{1}[/COLOR]".format(CONFIG.COLOR1, path))

            working = tools.open_url(path, check=True)
            if not working:
                bad.append([name, path, sharing, working])

        logging.log("Bad Sources: {0}".format(len(bad)))
        if len(bad) > 0:
            choice = dialog.yesno(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]{1}[/COLOR][COLOR {2}] Source(s) have been found Broken"
                .format(CONFIG.COLOR1, len(bad), CONFIG.COLOR2),
                "Would you like to Remove all or choose one by one?[/COLOR]",
                yeslabel="[B][COLOR springgreen]Remove All[/COLOR][/B]",
                nolabel="[B][COLOR red]Choose to Delete[/COLOR][/B]")
            if choice == 1:
                remove = bad
            else:
                for name, path, sharing, working in bad:
                    logging.log("{0} sources: {1}, {2}".format(
                        name, path, working))
                    if dialog.yesno(
                            CONFIG.ADDONTITLE,
                            "[COLOR {0}]{1}[/COLOR][COLOR {2}] was reported as non working"
                            .format(CONFIG.COLOR1, name, CONFIG.COLOR2),
                            "[COLOR {0}]{1}[/COLOR]".format(
                                CONFIG.COLOR1, path),
                            "[COLOR {0}]{1}[/COLOR]".format(
                                CONFIG.COLOR1, working),
                            yeslabel=
                            "[B][COLOR springgreen]Remove Source[/COLOR][/B]",
                            nolabel="[B][COLOR red]Keep Source[/COLOR][/B]"):
                        remove.append([name, path, sharing, working])
                        logging.log("Removing Source {0}".format(name))
                    else:
                        logging.log("Source {0} was not removed".format(name))
            if len(remove) > 0:
                for name, path, sharing, working in remove:
                    a = a.replace(
                        '\n<source>\n<name>{0}</name>\n<path pathversion="1">{1}</path>\n<allowsharing>{2}</allowsharing>\n</source>'
                        .format(name, path, sharing), '')
                    logging.log("Removing Source {0}".format(name))

                tools.write_to_file(CONFIG.SOURCES, str(a))
                alive = len(match) - len(bad)
                kept = len(bad) - len(remove)
                removed = len(remove)
                dialog.ok(
                    CONFIG.ADDONTITLE,
                    "[COLOR {0}]Checking sources for broken paths has been completed"
                    .format(CONFIG.COLOR2),
                    "Working: [COLOR {0}]{1}[/COLOR] | Kept: [COLOR {2}]{3}[/COLOR] | Removed: [COLOR {4}]{5}[/COLOR][/COLOR]"
                    .format(CONFIG.COLOR2, CONFIG.COLOR1, alive, CONFIG.COLOR1,
                            kept, CONFIG.COLOR1, removed))
            else:
                logging.log("No Bad Sources to be removed.")
        else:
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]All Sources Are Working[/COLOR]".format(
                    CONFIG.COLOR2))
    else:
        logging.log("No Sources Found")
Esempio n. 24
0
def check_skin():
    from resources.libs.common import logging
    from resources.libs.common import tools

    dialog = xbmcgui.Dialog()

    logging.log("[Build Check] Invalid Skin Check Start")

    gotoskin = False
    if not CONFIG.DEFAULTSKIN == '':
        if os.path.exists(os.path.join(CONFIG.ADDONS, CONFIG.DEFAULTSKIN)):
            if dialog.yesno(
                    CONFIG.ADDONTITLE,
                    "[COLOR {0}]It seems that the skin has been set back to [COLOR {1}]{2}[/COLOR]"
                    .format(CONFIG.COLOR2, CONFIG.COLOR1,
                            CONFIG.SKIN[5:].title()),
                    "Would you like to set the skin back to:[/COLOR]",
                    '[COLOR {0}]{1}[/COLOR]'.format(CONFIG.COLOR1,
                                                    CONFIG.DEFAULTNAME)):
                gotoskin = CONFIG.DEFAULTSKIN
                gotoname = CONFIG.DEFAULTNAME
            else:
                logging.log("Skin was not reset")
                CONFIG.set_setting('defaultskinignore', 'true')
                gotoskin = False
        else:
            CONFIG.set_setting('defaultskin', '')
            CONFIG.set_setting('defaultskinname', '')
            CONFIG.DEFAULTSKIN = ''
            CONFIG.DEFAULTNAME = ''
    if CONFIG.DEFAULTSKIN == '':
        skinname = []
        skinlist = []
        for folder in glob.glob(os.path.join(CONFIG.ADDONS, 'skin.*/')):
            xml = "{0}/addon.xml".format(folder)
            if os.path.exists(xml):
                g = tools.read_from_file(xml).replace('\n', '').replace(
                    '\r', '').replace('\t', '')
                match = tools.parse_dom(g, 'addon', ret='id')
                match2 = tools.parse_dom(g, 'addon', ret='name')
                logging.log("{0}: {1}".format(folder, str(match[0])))
                if len(match) > 0:
                    skinlist.append(str(match[0]))
                    skinname.append(str(match2[0]))
                else:
                    logging.log("ID not found for {0}".format(folder))
            else:
                logging.log("ID not found for {0}".format(folder))
        if len(skinlist) > 0:
            if len(skinlist) > 1:
                if dialog.yesno(
                        CONFIG.ADDONTITLE,
                        "[COLOR {0}]It seems that the skin has been set back to [COLOR {1}]{2}[/COLOR]"
                        .format(CONFIG.COLOR2, CONFIG.COLOR1,
                                CONFIG.SKIN[5:].title()),
                        "Would you like to view a list of avaliable skins?[/COLOR]"
                ):
                    choice = dialog.select("Select skin to switch to!",
                                           skinname)
                    if choice == -1:
                        logging.log("Skin was not reset")
                        CONFIG.set_setting('defaultskinignore', 'true')
                    else:
                        gotoskin = skinlist[choice]
                        gotoname = skinname[choice]
                else:
                    logging.log("Skin was not reset")
                    CONFIG.set_setting('defaultskinignore', 'true')
            else:
                if dialog.yesno(
                        CONFIG.ADDONTITLE,
                        "[COLOR {0}]It seems that the skin has been set back to [COLOR {1}]{2}[/COLOR]"
                        .format(CONFIG.COLOR2, CONFIG.COLOR1,
                                CONFIG.SKIN[5:].title()),
                        "Would you like to set the skin back to:[/COLOR]",
                        '[COLOR {0}]{1}[/COLOR]'.format(
                            CONFIG.COLOR1, skinname[0])):
                    gotoskin = skinlist[0]
                    gotoname = skinname[0]
                else:
                    logging.log("Skin was not reset")
                    CONFIG.set_setting('defaultskinignore', 'true')
        else:
            logging.log("No skins found in addons folder.")
            CONFIG.set_setting('defaultskinignore', 'true')
            gotoskin = False
    if gotoskin:
        from resources.libs import skin

        if skin.switch_to_skin(gotoskin):
            skin.look_and_feel_data('restore')
    logging.log("[Build Check] Invalid Skin Check End")
Esempio n. 25
0
def whitelist(do):
    addonnames = []
    addonids = []
    addonfolds = []

    dialog = xbmcgui.Dialog()

    if do == 'edit':
        fold = glob.glob(os.path.join(CONFIG.ADDONS, '*/'))
        for folder in sorted(fold, key=lambda x: x):
            foldername = os.path.split(folder[:-1])[1]
            if foldername in CONFIG.EXCLUDES:
                continue
            elif foldername in CONFIG.DEFAULTPLUGINS:
                continue
            elif foldername == 'packages':
                continue
            xml = os.path.join(folder, 'addon.xml')
            if os.path.exists(xml):
                a = tools.read_from_file(xml)
                temp, addid = parse(a, foldername)
                addonnames.append(temp)
                addonids.append(addid)
                addonfolds.append(foldername)
        fold2 = glob.glob(os.path.join(CONFIG.ADDON_DATA, '*/'))
        for folder in sorted(fold2, key=lambda x: x):
            foldername = os.path.split(folder[:-1])[1]
            if foldername in addonfolds:
                continue
            if foldername in CONFIG.EXCLUDES:
                continue
            xml = os.path.join(CONFIG.ADDONS, foldername, 'addon.xml')
            xml2 = os.path.join(CONFIG.XBMC, 'addons', foldername, 'addon.xml')
            if os.path.exists(xml):
                a = tools.read_from_file(xml)
            elif os.path.exists(xml2):
                a = tools.read_from_file(xml2)
            else:
                continue
            temp, addid = parse(a, foldername)
            addonnames.append(temp)
            addonids.append(addid)
            addonfolds.append(foldername)
        selected = []
        tempaddonnames = ["-- Clic aquí para Continuar --"] + addonnames
        currentWhite = whitelist(do='read')
        for item in currentWhite:
            logging.log(str(item))
            try:
                name, id, fold = item
            except Exception as e:
                logging.log(str(e))
            if id in addonids:
                pos = addonids.index(id) + 1
                selected.append(pos - 1)
                tempaddonnames[pos] = "[B][COLOR {0}]{1}[/COLOR][/B]".format(
                    CONFIG.COLOR1, name)
            else:
                addonids.append(id)
                addonnames.append(name)
                tempaddonnames.append("[B][COLOR {0}]{1}[/COLOR][/B]".format(
                    CONFIG.COLOR1, name))
        choice = 1
        while choice not in [-1, 0]:
            choice = dialog.select(
                "{0}: Seleccione los add-ons que desea incluir en la Lista Blanca."
                .format(CONFIG.ADDONTITLE), tempaddonnames)
            if choice == -1:
                break
            elif choice == 0:
                break
            else:
                choice2 = (choice - 1)
                if choice2 in selected:
                    selected.remove(choice2)
                    tempaddonnames[choice] = addonnames[choice2]
                else:
                    selected.append(choice2)
                    tempaddonnames[
                        choice] = "[B][COLOR {0}]{1}[/COLOR][/B]".format(
                            CONFIG.COLOR1, addonnames[choice2])
        white_list = []
        if len(selected) > 0:
            for addon in selected:
                white_list.append(
                    "['%s', '%s', '%s']" %
                    (addonnames[addon], addonids[addon], addonfolds[addon]))
            writing = '\n'.join(white_list)
            tools.write_to_file(CONFIG.WHITELIST, writing)
        else:
            try:
                os.remove(CONFIG.WHITELIST)
            except:
                pass
        logging.log_notify(
            CONFIG.ADDONTITLE,
            "[COLOR {0}]{1} Add-ons en la Lista Blanca[/COLOR]".format(
                CONFIG.COLOR2, len(selected)))
    elif do == 'read':
        white_list = []
        if os.path.exists(CONFIG.WHITELIST):
            lines = tools.read_from_file(CONFIG.WHITELIST).split('\n')
            for item in lines:
                try:
                    name, id, fold = eval(item)
                    white_list.append(eval(item))
                except:
                    pass
        return white_list
    elif do == 'view':
        list = whitelist(do='read')
        if len(list) > 0:
            msg = "Aquí hay una lista de los add-ons de su Lista Blanca, estos add-ons (junto con las dependencias) no se eliminarán cuando se realice un nuevo comienzo o los datos de usuario se sobrescriban en la instalación de una nueva Build.[CR][CR]"
            for item in list:
                try:
                    name, id, fold = item
                except Exception as e:
                    logging.log(str(e))
                msg += "[COLOR {0}]{1}[/COLOR] [COLOR {2}]\"{3}\"[/COLOR][CR]".format(
                    CONFIG.COLOR1, name, CONFIG.COLOR2, id)
            window.show_text_box("Visualización de add-ons de la Lista Blanca",
                                 msg)
        else:
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]No hay add-ons en la Lista Blanca[/COLOR]".format(
                    CONFIG.COLOR2))
    elif do == 'import':
        source = dialog.browse(
            1,
            '[COLOR {0}]Seleccione el archivo de la Lista Blanca para importar[/COLOR]'
            .format(CONFIG.COLOR2), 'files', '.txt', False, False, CONFIG.HOME)
        logging.log(str(source))
        if not source.endswith('.txt'):
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]Importación Cancelada![/COLOR]".format(
                    CONFIG.COLOR2))
            return
        current = whitelist(do='read')
        idList = []
        count = 0
        for item in current:
            name, id, fold = item
            idList.append(id)
        lines = tools.read_from_file(xbmcvfs.File(source)).split('\n')
        with open(CONFIG.WHITELIST, 'a') as f:
            for item in lines:
                try:
                    name, id, folder = eval(item)
                except Exception as e:
                    logging.log("Error al Agregar: '{0}' / {1}".format(
                        item, str(e)),
                                level=xbmc.LOGERROR)
                    continue
                logging.log("{0} / {1} / {2}".format(name, id, folder))
                if id not in idList:
                    count += 1
                    writing = "['{0}', '{1}', '{2}']".format(name, id, folder)
                    if len(idList) + count > 1:
                        writing = "\n%s" % writing
                    f.write(writing)
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]{1} Elemento(s) Agregado[/COLOR]".format(
                    CONFIG.COLOR2, count))
    elif do == 'export':
        source = dialog.browse(
            3,
            '[COLOR {0}]Seleccione donde desea exportar el archivo de la Lista Blanca[/COLOR]'
            .format(CONFIG.COLOR2), 'files', '.txt', False, False, CONFIG.HOME)
        logging.log(str(source))
        try:
            xbmcvfs.copy(CONFIG.WHITELIST,
                         os.path.join(source, 'whitelist.txt'))
            dialog.ok(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]La Lista Blanca ha sido exportada a:[/COLOR]".
                format(CONFIG.COLOR2) + '\n' + "[COLOR {0}]{1}[/COLOR]".format(
                    CONFIG.COLOR1, os.path.join(source, 'whitelist.txt')))
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]Lista Blanca Exportada[/COLOR]".format(
                    CONFIG.COLOR2))
        except Exception as e:
            logging.log("Error de Exportación: {0}".format(str(e)),
                        level=xbmc.LOGERROR)
            if not dialog.yesno(
                    CONFIG.ADDONTITLE,
                    "[COLOR {0}]La ubicación que seleccionó no se puede escribir. Le gustaría seleccionar otra?[/COLOR]"
                    .format(CONFIG.COLOR2),
                    yeslabel="[B][COLOR cyan]Cambiar Ubicación[/COLOR][/B]",
                    nolabel="[B][COLOR red]No, Cancelar[/COLOR][/B]"):
                logging.log_notify(
                    CONFIG.ADDONTITLE,
                    "[COLOR {0}]Cancelada la Exportación de la Lista Blanca  [/COLOR]"
                    .format(CONFIG.COLOR2, e))
            else:
                whitelist(do='export')
    elif do == 'clear':
        if not dialog.yesno(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]Estás seguro de que quieres vaciar tu whitelist?".
                format(CONFIG.COLOR2) + '\n' +
                "Este proceso no se puede deshacer.[/COLOR]",
                yeslabel="[B][COLOR springgreen]Si, Eliminar[/COLOR][/B]",
                nolabel="[B][COLOR red]No, Cancelar[/COLOR][/B]"):
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]Cancelado el borrado de la Lista Blanca[/COLOR]".
                format(CONFIG.COLOR2))
            return
        try:
            os.remove(CONFIG.WHITELIST)
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]Lista Blanca Vaciada[/COLOR]".format(
                    CONFIG.COLOR2))
        except:
            logging.log_notify(
                CONFIG.ADDONTITLE,
                "[COLOR {0}]Error Vaciando Lista Blanca![/COLOR]".format(
                    CONFIG.COLOR2))
Esempio n. 26
0
    def show_menu(self, url=None):
        directory.add_dir('Configuração rápida advancedsettings.xml',
                               {'mode': 'advanced_settings', 'action': 'quick_configure'}, icon=CONFIG.ICONMAINT,
                               themeit=CONFIG.THEME3)

        if os.path.exists(CONFIG.ADVANCED):
            directory.add_file('Ver atual advancedsettings.xml',
                               {'mode': 'advanced_settings', 'action': 'view_current'}, icon=CONFIG.ICONMAINT,
                               themeit=CONFIG.THEME3)
            directory.add_file('Remover atual advancedsettings.xml',
                               {'mode': 'advanced_settings', 'action': 'remove_current'}, icon=CONFIG.ICONMAINT,
                               themeit=CONFIG.THEME3)
        
        response = tools.open_url(CONFIG.ADVANCEDFILE)
        url_response = tools.open_url(url)
        local_file = os.path.join(CONFIG.ADDON_PATH, 'resources', 'text', 'advanced.json')

        if url_response:
            TEMPADVANCEDFILE = url_response.text
        elif response:
            TEMPADVANCEDFILE = response.text
        elif os.path.exists(local_file):
            TEMPADVANCEDFILE = tools.read_from_file(local_file)
        else:
            TEMPADVANCEDFILE = None
            logging.log("[Configurações avançadas] Sem predefinições disponíveis")
        
        if TEMPADVANCEDFILE:
            import json

            directory.add_separator(icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME3)
            
            try:
                advanced_json = json.loads(TEMPADVANCEDFILE)
            except:
                advanced_json = None
                logging.log("[Configurações avançadas] ERRO: Formato inválido for {0}.".format(TEMPADVANCEDFILE))
                
            if advanced_json:
                presets = advanced_json['presets']
                if presets and len(presets) > 0:
                    for preset in presets:
                        name = preset.get('name', '')
                        section = preset.get('section', False)
                        preseturl = preset.get('url', '')
                        icon = preset.get('icon', CONFIG.ADDON_ICON)
                        fanart = preset.get('fanart', CONFIG.ADDON_FANART)
                        description = preset.get('description', '')

                        if not name:
                            logging.log('[Configurações avançadas] Tag ausente \'name\'', level=xbmc.LOGDEBUG)
                            continue
                        if not preseturl:
                            logging.log('[Configurações avançadas] Tag ausente \'url\'', level=xbmc.LOGDEBUG)
                            continue
                        
                        if section:
                            directory.add_dir(name, {'mode': 'advanced_settings', 'url': preseturl},
                                              description=description, icon=icon, fanart=fanart, themeit=CONFIG.THEME3)
                        else:
                            directory.add_file(name,
                                               {'mode': 'advanced_settings', 'action': 'write_advanced', 'name': name,
                                                'url': preseturl},
                                               description=description, icon=icon, fanart=fanart, themeit=CONFIG.THEME2)
        else:
            logging.log("[Configurações avançadas] URL não funciona: {0}".format(CONFIG.ADVANCEDFILE))
Esempio n. 27
0
def system_info():
    from resources.libs.common import logging
    from resources.libs.common import tools
    from resources.libs import speedtest

    infoLabel = ['System.FriendlyName', 'System.BuildVersion', 'System.CpuUsage', 'System.ScreenMode',
                 'Network.IPAddress', 'Network.MacAddress', 'System.Uptime', 'System.TotalUptime', 'System.FreeSpace',
                 'System.UsedSpace', 'System.TotalSpace', 'System.Memory(free)', 'System.Memory(used)',
                 'System.Memory(total)']
    data = []
    x = 0
    for info in infoLabel:
        temp = tools.get_info_label(info)
        y = 0
        while temp == "Busy" and y < 10:
            temp = tools.get_info_label(info)
            y += 1
            logging.log("{0} sleep {1}".format(info, str(y)))
            xbmc.sleep(200)
        data.append(temp)
        x += 1
    storage_free = data[8] if 'Una' in data[8] else tools.convert_size(int(float(data[8][:-8])) * 1024 * 1024)
    storage_used = data[9] if 'Una' in data[9] else tools.convert_size(int(float(data[9][:-8])) * 1024 * 1024)
    storage_total = data[10] if 'Una' in data[10] else tools.convert_size(int(float(data[10][:-8])) * 1024 * 1024)
    ram_free = tools.convert_size(int(float(data[11][:-2])) * 1024 * 1024)
    ram_used = tools.convert_size(int(float(data[12][:-2])) * 1024 * 1024)
    ram_total = tools.convert_size(int(float(data[13][:-2])) * 1024 * 1024)

    picture = []
    music = []
    video = []
    programs = []
    repos = []
    scripts = []
    skins = []

    fold = glob.glob(os.path.join(CONFIG.ADDONS, '*/'))
    for folder in sorted(fold, key = lambda x: x):
        foldername = os.path.split(folder[:-1])[1]
        if foldername == 'packages': continue
        xml = os.path.join(folder, 'addon.xml')
        if os.path.exists(xml):
            prov = re.compile("<provides>(.+?)</provides>").findall(tools.read_from_file(xml))
            if len(prov) == 0:
                if foldername.startswith('skin'):
                    skins.append(foldername)
                elif foldername.startswith('repo'):
                    repos.append(foldername)
                else:
                    scripts.append(foldername)
            elif not (prov[0]).find('executable') == -1:
                programs.append(foldername)
            elif not (prov[0]).find('video') == -1:
                video.append(foldername)
            elif not (prov[0]).find('audio') == -1:
                music.append(foldername)
            elif not (prov[0]).find('image') == -1:
                picture.append(foldername)

    directory.add_file('[B]Media Center Info:[/B]', icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Name:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, data[0]), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME3)
    directory.add_file('[COLOR {0}]Version:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, data[1]), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME3)
    directory.add_file('[COLOR {0}]Platform:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, tools.platform().title()), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME3)
    directory.add_file('[COLOR {0}]CPU Usage:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, data[2]), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME3)
    directory.add_file('[COLOR {0}]Screen Mode:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, data[3]), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME3)

    directory.add_file('[B]Uptime:[/B]', icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Current Uptime:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, data[6]), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Total Uptime:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, data[7]), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)

    directory.add_file('[B]Local Storage:[/B]', icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Used Storage:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, storage_used), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Free Storage:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, storage_free), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Total Storage:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, storage_total), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)

    directory.add_file('[B]Ram Usage:[/B]', icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Used Memory:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, ram_free), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Free Memory:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, ram_used), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Total Memory:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, ram_total), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)

    mac, inter_ip, ip, city, state, country, isp = speedtest.net_info()
    directory.add_file('[B]Network:[/B]', icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Mac:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, mac), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Internal IP: [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, inter_ip), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]External IP:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, ip), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]City:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, city), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]State:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, state), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Country:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, country), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]ISP:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, isp), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)

    totalcount = len(picture) + len(music) + len(video) + len(programs) + len(scripts) + len(skins) + len(repos)
    directory.add_file('[B]Addons([COLOR {0}]{1}[/COLOR]):[/B]'.format(CONFIG.COLOR1, totalcount), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Video Addons:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, str(len(video))), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Program Addons:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, str(len(programs))), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Music Addons:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, str(len(music))), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Picture Addons:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, str(len(picture))), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Repositories:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, str(len(repos))), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Skins:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, str(len(skins))), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
    directory.add_file('[COLOR {0}]Scripts/Modules:[/COLOR] [COLOR {1}]{2}[/COLOR]'.format(CONFIG.COLOR1, CONFIG.COLOR2, str(len(scripts))), icon=CONFIG.ICONMAINT, themeit=CONFIG.THEME2)
def whitelist(do):
    addonnames = []
    addonids = []
    addonfolds = []

    dialog = xbmcgui.Dialog()
    
    if do == 'edit':
        fold = glob.glob(os.path.join(CONFIG.ADDONS, '*/'))
        for folder in sorted(fold, key=lambda x: x):
            foldername = os.path.split(folder[:-1])[1]
            if foldername in CONFIG.EXCLUDES:
                continue
            elif foldername in CONFIG.DEFAULTPLUGINS:
                continue
            elif foldername == 'packages':
                continue
            xml = os.path.join(folder, 'addon.xml')
            if os.path.exists(xml):
                a = tools.read_from_file(xml)
                temp, addid = parse(a, foldername)
                addonnames.append(temp)
                addonids.append(addid)
                addonfolds.append(foldername)
        fold2 = glob.glob(os.path.join(CONFIG.ADDON_DATA, '*/'))
        for folder in sorted(fold2, key=lambda x: x):
            foldername = os.path.split(folder[:-1])[1]
            if foldername in addonfolds:
                continue
            if foldername in CONFIG.EXCLUDES:
                continue
            xml = os.path.join(CONFIG.ADDONS, foldername, 'addon.xml')
            xml2 = os.path.join(CONFIG.XBMC, 'addons', foldername, 'addon.xml')
            if os.path.exists(xml):
                a = tools.read_from_file(xml)
            elif os.path.exists(xml2):
                a = tools.read_from_file(xml2)
            else:
                continue
            temp, addid = parse(a, foldername)
            addonnames.append(temp)
            addonids.append(addid)
            addonfolds.append(foldername)
        selected = []
        tempaddonnames = ["-- Click here to Continue --"] + addonnames
        currentWhite = whitelist(do='read')
        for item in currentWhite:
            logging.log(str(item))
            try:
                name, id, fold = item
            except Exception as e:
                logging.log(str(e))
            if id in addonids:
                pos = addonids.index(id)+1
                selected.append(pos-1)
                tempaddonnames[pos] = "[B][COLOR {0}]{1}[/COLOR][/B]".format(CONFIG.COLOR1, name)
            else:
                addonids.append(id)
                addonnames.append(name)
                tempaddonnames.append("[B][COLOR {0}]{1}[/COLOR][/B]".format(CONFIG.COLOR1, name))
        choice = 1
        while choice not in [-1, 0]:
            choice = dialog.select("{0}: Select the add-ons you wish to the whitelist.".format(CONFIG.ADDONTITLE), tempaddonnames)
            if choice == -1:
                break
            elif choice == 0:
                break
            else:
                choice2 = (choice-1)
                if choice2 in selected:
                    selected.remove(choice2)
                    tempaddonnames[choice] = addonnames[choice2]
                else:
                    selected.append(choice2)
                    tempaddonnames[choice] = "[B][COLOR {0}]{1}[/COLOR][/B]".format(CONFIG.COLOR1, addonnames[choice2])
        white_list = []
        if len(selected) > 0:
            for addon in selected:
                white_list.append("['%s', '%s', '%s']" % (addonnames[addon], addonids[addon], addonfolds[addon]))
            writing = '\n'.join(white_list)
            tools.write_to_file(CONFIG.WHITELIST, writing)
        else:
            try:
                os.remove(CONFIG.WHITELIST)
            except:
                pass
        logging.log_notify(CONFIG.ADDONTITLE,
                           "[COLOR {0}]{1} Add-ons in whitelist[/COLOR]".format(CONFIG.COLOR2, len(selected)))
    elif do == 'read':
        white_list = []
        if os.path.exists(CONFIG.WHITELIST):
            lines = tools.read_from_file(CONFIG.WHITELIST).split('\n')
            for item in lines:
                try:
                    name, id, fold = eval(item)
                    white_list.append(eval(item))
                except:
                    pass
        return white_list
    elif do == 'view':
        list = whitelist(do='read')
        if len(list) > 0:
            msg = "Here is a list of your whitelist items, these items(along with dependencies) will not be removed when preforming a fresh start or the userdata overwritten in a build install.[CR][CR]"
            for item in list:
                try:
                    name, id, fold = item
                except Exception as e:
                    logging.log(str(e))
                msg += "[COLOR {0}]{1}[/COLOR] [COLOR {2}]\"{3}\"[/COLOR][CR]".format(CONFIG.COLOR1, name, CONFIG.COLOR2, id)
            window.show_text_box("Viewing Whitelisted Items", msg)
        else:
            logging.log_notify(CONFIG.ADDONTITLE,
                               "[COLOR {0}]No items in whitelist[/COLOR]".format(CONFIG.COLOR2))
    elif do == 'import':
        source = dialog.browse(1, '[COLOR {0}]Select the whitelist file to import[/COLOR]'.format(CONFIG.COLOR2),
                                   'files', '.txt', False, False, CONFIG.HOME)
        logging.log(str(source))
        if not source.endswith('.txt'):
            logging.log_notify(CONFIG.ADDONTITLE,
                               "[COLOR {0}]Import Cancelled![/COLOR]".format(CONFIG.COLOR2))
            return
        current = whitelist(do='read')
        idList = []
        count = 0
        for item in current:
            name, id, fold = item
            idList.append(id)
        lines = tools.read_from_file(xbmcvfs.File(source)).split('\n')
        with open(CONFIG.WHITELIST, 'a') as f:
            for item in lines:
                try:
                    name, id, folder = eval(item)
                except Exception as e:
                    logging.log("Error Adding: '{0}' / {1}".format(item, str(e)), level=xbmc.LOGERROR)
                    continue
                logging.log("{0} / {1} / {2}".format(name, id, folder))
                if id not in idList:
                    count += 1
                    writing = "['{0}', '{1}', '{2}']".format(name, id, folder)
                    if len(idList) + count > 1:
                        writing = "\n%s" % writing
                    f.write(writing)
            logging.log_notify(CONFIG.ADDONTITLE,
                               "[COLOR {0}]{1} Item(s) Added[/COLOR]".format(CONFIG.COLOR2, count))
    elif do == 'export':
        source = dialog.browse(3,
                                   '[COLOR {0}]Select where you wish to export the whitelist file[/COLOR]'.format(CONFIG.COLOR2),
                                   'files', '.txt', False, False, CONFIG.HOME)
        logging.log(str(source))
        try:
            xbmcvfs.copy(CONFIG.WHITELIST, os.path.join(source, 'whitelist.txt'))
            dialog.ok(CONFIG.ADDONTITLE,
                          "[COLOR {0}]Whitelist has been exported to:[/COLOR]".format(CONFIG.COLOR2)
                          +'\n'+"[COLOR {0}]{1}[/COLOR]".format(CONFIG.COLOR1, os.path.join(source, 'whitelist.txt')))
            logging.log_notify(CONFIG.ADDONTITLE,
                               "[COLOR {0}]Whitelist Exported[/COLOR]".format(CONFIG.COLOR2))
        except Exception as e:
            logging.log("Export Error: {0}".format(str(e)), level=xbmc.LOGERROR)
            if not dialog.yesno(CONFIG.ADDONTITLE,
                                    "[COLOR {0}]The location you selected isn\'t writable would you like to select another one?[/COLOR]".format(CONFIG.COLOR2),
                                    yeslabel="[B][COLOR springgreen]Change Location[/COLOR][/B]",
                                    nolabel="[B][COLOR red]No Cancel[/COLOR][/B]"):
                logging.log_notify(CONFIG.ADDONTITLE,
                                   "[COLOR {0}]Whitelist Export Cancelled[/COLOR]".format(CONFIG.COLOR2, e))
            else:
                whitelist(do='export')
    elif do == 'clear':
        if not dialog.yesno(CONFIG.ADDONTITLE,
                                "[COLOR {0}]Are you sure you want to clear your whitelist?".format(CONFIG.COLOR2)
                                +'\n'+"This process can't be undone.[/COLOR]",
                                yeslabel="[B][COLOR springgreen]Yes Remove[/COLOR][/B]",
                                nolabel="[B][COLOR red]No Cancel[/COLOR][/B]"):
            logging.log_notify(CONFIG.ADDONTITLE,
                               "[COLOR {0}]Clear Whitelist Cancelled[/COLOR]".format(CONFIG.COLOR2))
            return
        try:
            os.remove(CONFIG.WHITELIST)
            logging.log_notify(CONFIG.ADDONTITLE,
                               "[COLOR {0}]Whitelist Cleared[/COLOR]".format(CONFIG.COLOR2))
        except:
            logging.log_notify(CONFIG.ADDONTITLE,
                               "[COLOR {0}]Error Clearing Whitelist![/COLOR]".format(CONFIG.COLOR2))
Esempio n. 29
0
    def show_menu(self, url=None):
        directory.add_dir(
            '[COLOR azure]Configuración Rápida advancedsettings.xml[/COLOR]', {
                'mode': 'advanced_settings',
                'action': 'quick_configure'
            },
            icon=CONFIG.ICONMAINT,
            themeit=CONFIG.THEME3)

        if os.path.exists(CONFIG.ADVANCED):
            directory.add_file('Ver Actual advancedsettings.xml', {
                'mode': 'advanced_settings',
                'action': 'view_current'
            },
                               icon=CONFIG.ICONMAINT,
                               themeit=CONFIG.THEME3)
            directory.add_file('Eliminar Actual advancedsettings.xml', {
                'mode': 'advanced_settings',
                'action': 'remove_current'
            },
                               icon=CONFIG.ICONMAINT,
                               themeit=CONFIG.THEME3)

        response = tools.open_url(CONFIG.ADVANCEDFILE)
        url_response = tools.open_url(url)
        local_file = os.path.join(CONFIG.ADDON_PATH, 'resources', 'text',
                                  'advanced.json')

        if url_response:
            TEMPADVANCEDFILE = url_response.text
        elif response:
            TEMPADVANCEDFILE = response.text
        elif os.path.exists(local_file):
            TEMPADVANCEDFILE = tools.read_from_file(local_file)
        else:
            TEMPADVANCEDFILE = None
            logging.log(
                "[Advanced Settings] No hay Ajustes Preestablecidos Disponibles"
            )

        if TEMPADVANCEDFILE:
            import json

            directory.add_separator(icon=CONFIG.ICONMAINT,
                                    themeit=CONFIG.THEME3)

            try:
                advanced_json = json.loads(TEMPADVANCEDFILE)
            except:
                advanced_json = None
                logging.log(
                    "[Advanced Settings] ERROR: Formato no válido para {0}.".
                    format(TEMPADVANCEDFILE))

            if advanced_json:
                presets = advanced_json['presets']
                if presets and len(presets) > 0:
                    for preset in presets:
                        name = preset.get('name', '')
                        section = preset.get('section', False)
                        preseturl = preset.get('url', '')
                        icon = preset.get('icon', CONFIG.ADDON_ICON)
                        fanart = preset.get('fanart', CONFIG.ADDON_FANART)
                        description = preset.get('description', '')

                        if not name:
                            logging.log(
                                '[Advanced Settings] Missing tag \'name\'',
                                level=xbmc.LOGDEBUG)
                            continue
                        if not preseturl:
                            logging.log(
                                '[Advanced Settings] Missing tag \'url\'',
                                level=xbmc.LOGDEBUG)
                            continue

                        if section:
                            directory.add_dir(name, {
                                'mode': 'advanced_settings',
                                'url': preseturl
                            },
                                              description=description,
                                              icon=icon,
                                              fanart=fanart,
                                              themeit=CONFIG.THEME3)
                        else:
                            directory.add_file(name, {
                                'mode': 'advanced_settings',
                                'action': 'write_advanced',
                                'name': name,
                                'url': preseturl
                            },
                                               description=description,
                                               icon=icon,
                                               fanart=fanart,
                                               themeit=CONFIG.THEME2)
        else:
            logging.log("[Advanced Settings] URL no funciona: {0}".format(
                CONFIG.ADVANCEDFILE))
    def show_menu(self, url=None):
        directory.add_dir('Quick Configure advancedsettings.xml', {
            'mode': 'advanced_settings',
            'action': 'quick_configure'
        },
                          icon=CONFIG.ICONMAINT,
                          themeit=CONFIG.THEME3)

        if os.path.exists(CONFIG.ADVANCED):
            directory.add_file('View Current advancedsettings.xml', {
                'mode': 'advanced_settings',
                'action': 'view_current'
            },
                               icon=CONFIG.ICONMAINT,
                               themeit=CONFIG.THEME3)
            directory.add_file('Remove Current advancedsettings.xml', {
                'mode': 'advanced_settings',
                'action': 'remove_current'
            },
                               icon=CONFIG.ICONMAINT,
                               themeit=CONFIG.THEME3)

        response = tools.open_url(CONFIG.ADVANCEDFILE)
        url_response = tools.open_url(url)
        local_file = os.path.join(CONFIG.ADDON_PATH, 'resources', 'text',
                                  'advanced.json')

        if url_response:
            TEMPADVANCEDFILE = url_response.text
        elif response:
            TEMPADVANCEDFILE = response.text
        elif os.path.exists(local_file):
            TEMPADVANCEDFILE = tools.read_from_file(local_file)
        else:
            TEMPADVANCEDFILE = None
            logging.log("[Advanced Settings] No Presets Available")

        if TEMPADVANCEDFILE:
            import json

            directory.add_separator(icon=CONFIG.ICONMAINT,
                                    themeit=CONFIG.THEME3)

            try:
                advanced_json = json.loads(TEMPADVANCEDFILE)
            except:
                advanced_json = None
                logging.log(
                    "[Advanced Settings] ERROR: Invalid Format for {0}.".
                    format(CONFIG.ADVANCEDFILE))

            if advanced_json:
                presets = advanced_json['presets']
                if presets and len(presets) > 0:
                    for preset in presets:
                        name = preset.get('name', '')
                        section = preset.get('section', '')
                        preseturl = preset.get('url', '')
                        icon = preset.get('icon', '')
                        fanart = preset.get('fanart', '')
                        description = preset.get('description', '')

                        if not name:
                            logging.log(
                                '[Advanced Settings] Missing tag \'name\'',
                                level=xbmc.LOGDEBUG)
                            continue
                        if not preseturl:
                            logging.log(
                                '[Advanced Settings] Missing tag \'url\'',
                                level=xbmc.LOGDEBUG)
                            continue

                        if section:
                            directory.add_dir(name, {
                                'mode': 'advanced_settings',
                                'url': preseturl
                            },
                                              description=description,
                                              icon=icon,
                                              fanart=fanart,
                                              themeit=CONFIG.THEME3)
                        else:
                            directory.add_file(name, {
                                'mode': 'advanced_settings',
                                'action': 'write_advanced',
                                'name': name,
                                'url': preseturl
                            },
                                               description=description,
                                               icon=icon,
                                               fanart=fanart,
                                               themeit=CONFIG.THEME2)
        else:
            logging.log("[Advanced Settings] URL not working: {0}".format(
                CONFIG.ADVANCEDFILE))