Ejemplo n.º 1
0
class GUI( xbmcgui.WindowXML ):
    def __init__(self,strXMLname, strFallbackPath,strDefaultName,bforeFallback=0,minimode=False, minibox = False, lang=False):
        self.srcpath = strFallbackPath
        self.lang = lang
        self.loadsettings()
        self.minibox = minibox
        self.minimode = minimode
        self.init = 0
        print self.srcpath
        if exists(self.srcpath + "\\lib\\firstrun.xib"):
            UpdateSettings().loadsettings(self.lang,self.settings)
            os.remove(self.srcpath + "\\lib\\firstrun.xib")

    def loadsettings(self):
        self.settings = Settings("XinBox_Settings.xml",TITLE,defSettings)     

    def buildaccounts(self):
        accounts = []
        for set in self.settings.getSetting("Accounts")[1]:
            accounts.append(set[0])
        if len(accounts) == 0:
            self.noaccounts = True
        else:self.noaccounts = False
        return accounts

    def onInit(self):
        xbmcgui.lock()
        self.accounts = self.buildaccounts()
        self.setupvars()
        if self.init == 0:
            self.init = 1
            self.checkdefault()
        self.setupcontrols()
        xbmcgui.unlock()

    def checkdefault(self):
        if self.settings.getSetting("Default Account") != "-" or self.minimode != False:
            xbmcgui.unlock()
            if self.minimode != False:
                account = self.minimode
            else:account = self.settings.getSetting("Default Account")
            self.accountsettings = self.getaccountsettings(account)
            accountpass = self.accountsettings.getSetting("Account Password")
            if accountpass != "-":
                value = self.showKeyboard(self.lang(31),"",1)
                if value != "":
                    if value == accountpass.decode("hex"):
                        self.defaultlogin(account)
                    else:self.launchinfo("","",self.lang(93),self.lang(32))
            else:self.defaultlogin(account)

    def defaultlogin(self, account):
        if self.minibox != False:w = XinBox_MyAccountMenu.GUI("XinBox_AccountMenu.xml",self.srcpath,"DefaultSkin",lang=self.lang,theaccount=account,title=TITLE,minibox=self.minibox)
        else:w = XinBox_MyAccountMenu.GUI("XinBox_AccountMenu.xml",self.srcpath,"DefaultSkin",lang=self.lang,theaccount=account,title=TITLE)
        w.doModal()
        exitflag = w.exitflag
        self.mmenabled = w.mmenabled
        del w
        if self.mmenabled != 0:
            xbmc.executebuiltin('XBMC.RunScript(' + self.srcpath+ "\\lib\\XinBox_MiniMode.py" + "," + self.mmenabled + "," + self.srcpath + ')')
            self.close()
        elif exitflag == 1:
            self.close()
        
    def getaccountsettings(self,account):
        return self.settings.getSettingInListbyname("Accounts",account)
    
    def getinboxsettings(self,inbox,settings):
        return settings.getSettingInListbyname("Inboxes",inbox)
    
    def setupcontrols(self):
        self.clearList()
        self.getControl(80).setLabel(self.lang(10))
        self.getControl(81).setLabel("V." + VERSION)
        MenuItems = [xbmcgui.ListItem(self.lang(11),self.lang(16),"XBlogin.png","XBlogin.png"),
                     xbmcgui.ListItem(self.lang(12),self.lang(17),"XBcreatenew.png","XBcreatenew.png"),
                     xbmcgui.ListItem(self.lang(13),self.lang(19),"XBupdate.png","XBupdate.png"),
                     xbmcgui.ListItem(self.lang(14),self.lang(19),"XBabouticon.png","XBabouticon.png"),
                     xbmcgui.ListItem(self.lang(15),self.lang(19),"XBquiticon.png","XBquiticon.png")]
        for item in MenuItems:
            self.addItem(item)

    def setupvars(self):
        self.mmenabled = 0
        self.control_action = XinBox_Util.setControllerAction()
        
    def onFocus(self, controlID):
        pass
    
    def onClick(self, controlID):
        if ( controlID == 50):
            if self.getCurrentListPosition() == 0:
                if self.noaccounts:
                    self.launchinfo(22,"",self.lang(93))
                else:self.launchloginmenu()
            elif self.getCurrentListPosition() == 1:
                self.launchcreatemenu()
            elif self.getCurrentListPosition() == 2:
                self.update()
            elif self.getCurrentListPosition() == 3:
                self.launchabout()
            elif self.getCurrentListPosition() == 4:
                self.close()      

    def update(self):
        w = XinBox_Update.Update("XinBox_Update.xml",self.srcpath,"DefaultSkin",lang=self.lang)
        w.doModal()
        returnval = w.returnval
        del w
        if returnval == 1:
            xbmc.executescript("X:\\XinBox_Update.py")
            self.close()
            
    def launchabout(self):
        w = XinBox_About.GUI("XinBox_About.xml",self.srcpath,"DefaultSkin",lang=self.lang)
        w.doModal()
        del w
                    
    def onAction( self, action ):
        button_key = self.control_action.get( action.getButtonCode(), 'n/a' )
        actionID   =  action.getId()
        try:focusid = self.getFocusId()
        except:focusid = 0
        if ( button_key == 'Keyboard ESC Button' or button_key == 'Back Button' or button_key == 'Remote Menu' ):
            self.close()
        elif ( button_key == 'Keyboard Menu Button' or button_key == 'Y Button' or button_key == 'Remote Info' ):
            self.launchinfo(100 + self.getCurrentListPosition(),self.getListItem(self.getCurrentListPosition()).getLabel())

    def launchinfo(self, focusid, label,heading=False,text=False):
        dialog = XinBox_InfoDialog.GUI("XinBox_InfoDialog.xml",self.srcpath,"DefaultSkin",thefocid=focusid,thelabel=label,language=self.lang,theheading=heading,thetext=text)
        dialog.doModal()
        value = dialog.value
        del dialog
        return value
    
    def launchcreatemenu(self):
        winSettings = Account_Settings("XinBox_EditAccountMenu.xml",self.srcpath,"DefaultSkin",0,scriptSettings=self.settings,language=self.lang, title=TITLE,account="")
        winSettings.doModal()
        self.loadsettings()
        del winSettings

    def launchloginmenu(self):
        self.accounts = self.buildaccounts()
        w = XinBox_LoginMenu.GUI("XinBox_LoginMenu.xml",self.srcpath,"DefaultSkin",lang=self.lang,title=TITLE)
        w.doModal()
        self.mmenabled = w.mmenabled
        exitflag = w.exitflag
        del w
        if self.mmenabled != 0:
            xbmc.executebuiltin('XBMC.RunScript(' + self.srcpath + "\\lib\\XinBox_MiniMode.py" + "," + self.mmenabled + "," + self.srcpath + ')')
            self.close()
        elif exitflag == 1:
            self.close()
            
    def showKeyboard(self, heading,default="",hidden=0):
        keyboard = xbmc.Keyboard(default,heading)
        if hidden == 1:keyboard.setHiddenInput(True)
        keyboard.doModal()
        if hidden == 1:keyboard.setHiddenInput(False)
        if (keyboard.isConfirmed()):
            return keyboard.getText()
        else:return default
class GUI( xbmcgui.WindowXML ):
    def __init__(self,strXMLname, strFallbackPath,strDefaultName,lang=False,theaccount = False, title = False, minibox=False):
        self.minibox = minibox
        self.init = 0
        self.srcpath = strFallbackPath
        self.language = lang
        self.account = theaccount
        self.title = title

    def loadsettings(self):
        self.settings = Settings("XinBox_Settings.xml",self.title,"")
        self.accountsettings = self.settings.getSettingInListbyname("Accounts",self.account)
        
    def onInit(self):
        xbmcgui.lock()
        if self.init == 0:
            self.init = 1
            self.loadsettings()
            self.setupvars()
            self.checkdefault()
            self.setupcontrols()
        xbmcgui.unlock()

    def checkdefault(self):
        if self.accountsettings.getSetting("Default Inbox") != "-" or self.minibox != False:
            xbmcgui.unlock()
            if self.minibox != False:self.launchinbox(self.minibox,1)
            else:self.launchinbox(self.accountsettings.getSetting("Default Inbox"))
        
    def setupvars(self):
        self.exitflag = 0
        self.mmenabled = 0
        self.control_action = XinBox_Util.setControllerAction()
        
    def onFocus(self, controlID):
        pass
    
    def onClick(self, controlID):
        if ( controlID == 51):
            inboxname = self.getListItem(self.getCurrentListPosition()).getLabel()
            self.launchinbox(inboxname)
        elif ( controlID == 61):
            self.launchaccountmenu(self.account)
        elif ( controlID == 62):
            dialog = xbmcgui.Dialog()
            if dialog.yesno(self.language(77), self.language(201), self.language(202)):
                self.deleteaccount()
        elif ( controlID == 63):
            self.launchmm()

    def launchmm(self):
        self.mmenabled = self.account
        self.close()

    def deleteaccount(self):
        self.settings.removeinbox("Accounts",self.account)
        if self.settings.getSetting("Default Account") == self.account:
            self.settings.setSetting("Default Account", "-")
        self.settings.saveXMLfromArray()
        self.removedir(ACCOUNTSDIR + str(hash(self.account)))
        self.close()
        

    def removedir(self,mydir):
        for root, dirs, files in os.walk(mydir, topdown=False):
            for name in files:
                os.remove(os.path.join(root, name))
            for name in dirs:
                os.rmdir(os.path.join(root, name))
        os.rmdir(mydir)
     
    def onAction( self, action ):
        button_key = self.control_action.get( action.getButtonCode(), 'n/a' )
        actionID   =  action.getId()
        try:focusid = self.getFocusId()
        except:focusid = 0
        try:control = self.getFocus()
        except: control = 0
        if ( button_key == 'Keyboard ESC Button' or button_key == 'Back Button' or button_key == 'Remote Menu' ):
            self.close()
        elif ( button_key == 'Keyboard Menu Button' or button_key == 'Y Button' or button_key == 'Remote Info' ):
            if focusid == 51:
                self.launchinfo(125,self.getListItem(self.getCurrentListPosition()).getLabel())
            elif focusid == 61:
                self.launchinfo(126,self.language(62))
            elif focusid == 62:
                self.launchinfo(127,self.language(63))
            elif focusid == 63:
                self.launchinfo(135,self.language(252))


    def setupcontrols(self):
        self.clearList()
        self.getControl(80).setLabel(self.language(200))
        self.getControl(81).setLabel(self.account)
        self.getControl(61).setLabel(self.language(62))
        self.getControl(62).setLabel(self.language(63))
        self.getControl(63).setLabel(self.language(252))
        self.buildinboxes()

    def buildinboxes(self):
        self.getControl(51).setEnabled(True)
        for set in self.accountsettings.getSetting("Inboxes")[1]:
            self.addItem(set[0])
        if self.getListSize() == 0:
            self.addItem(self.language(75))
            self.setFocusId(61)
            self.getControl(51).setEnabled(False)
            
    def launchaccountmenu(self,theaccount):
        winSettings = Account_Settings("XinBox_EditAccountMenu.xml",self.srcpath,"DefaultSkin",0,scriptSettings=self.settings,language=self.language, title=self.title,account=theaccount)
        winSettings.doModal()
        account = winSettings.savedaccountname
        if account != "-":
            self.account = account
        del winSettings
        self.loadsettings()
        self.setupvars()
        self.setupcontrols()

    def launchinbox(self, inbox,mm=0):
        w = XinBox_Inbox.GUI("XinBox_Inbox.xml",self.srcpath,"DefaultSkin",lang=self.language,theinbox=inbox,account=self.account,title=self.title,mmflag=mm)
        w.doModal()
        self.exitflag = w.exitflag
        mmflag = w.mmflag
        del w
        if mmflag == 1: self.launchmm()
        if self.exitflag == 1:self.close()

    def launchinfo(self, focusid, label,heading=False):
        dialog = XinBox_InfoDialog.GUI("XinBox_InfoDialog.xml",self.srcpath,"DefaultSkin",thefocid=focusid,thelabel=label,language=self.language,theheading=heading)
        dialog.doModal()
        value = dialog.value
        del dialog
        return value