All pastes #51411 Raw Edit

Unnamed

public python v1 · immutable
#51411 ·published 2006-04-26 05:53 UTC
rendered paste body
import xml.dom.minidomimport urllib, urllib2, re, os, sys, ntimport cachedhttpimport xbmc, xbmcguifrom string import split, replace, findfrom ConfigParser import ConfigParser, SafeConfigParserfrom StringIO import StringIOimport ftplibtry: Emulating = xbmcgui.Emulatingexcept: Emulating = FalseACTION_PREVIOUS_MENU = 10Title = "NZBsRus.com"""" To Do:    (Items with a * are only thoughts atm ;-)    - Correct All Names    - Add Site Login Error Msg    - Add FTP On/Off Checkbox    - Add Keep Local NZB's Checkbox    - Add Delete Cache Button    - Add Delete Settings.ini Button    - Find/Fix Starting Load Error    - Document Script / Credits    - * Load Music While Browsing    - * SMB Support    - * Catagory Icons"""# leave these just in caseglobal httpFetcherglobal curPageglobal catcurPage = 0cat = 38# NZBsRus.com Login InformationNZB_User = ""NZB_Pass = ""Login = "\"Log in!\""# FTP Server Login InformationFTP_YN = ""FTP_Host = ''FTP_Port = ""FTP_User = ""FTP_Pass = ""FTP_Path = """"" The Website's main browsing url. In most cases this link should end with page= """nzbURL = "http://www.nzbsrus.com/browse.php?cat="""" Set your scripts root directory, and other required variables, below: """# If you are running this script on your Xbox, use:NZB_Path = sys.path[0]+'\\'#Downloads = sys.path[0]+'\\' + "Downloads\\"# If you are Emulating this script on your PC, Use:# Root = "/Images"# Downloads = "/Downloads"""" Pre-define your global Variables """global NZB_IDglobal NZB_Titleglobal NZB_Sizeglobal NZB_AddedNZB_ID = []NZB_Title = []NZB_Size = []NZB_Added = []button_normal="button-nofocus.png"button_hl="button-focus.png"lcf="iconlist-nofocus.png"lcnf="iconlist-focus.png"fc = "0xFFFFFFFF"cat_tiles = {}cat_id = {}cat_tiles['Consoles'] = ['Xbox','Xbox 360','PlayStation 2','PlayStation 3','Psp','Misc Console']cat_id['Consoles'] = [38,11,37,12,10,46]cat_tiles['Movies'] = ['DVDR','VCD/SVCD','XViD','HDTV']cat_id['Movies'] = [22,47,40,7]cat_tiles['TV'] = ['DVDR','VCD/SVCD','XViD']cat_id['TV'] = [8,9,43]cat_tiles['Music'] = ['Albums','Singles','Videos']cat_id['Music'] = [5,41,6]cat_tiles['PC'] = ['Apps - 0-Day','Apps - ISO','Apps - Other','Games - PC','Games - DOX']cat_id['PC'] = [1,23,33,35,3]cat_tiles['Other'] = ['Macintosh','Handhelds','Emulators']cat_id['Other'] = [48,21,2]cat_tiles['Misc'] = ['Books','Anime','Miscellaneous']cat_id['Misc'] = [50,32,45]cat_tiles['Settings'] = ['Default','FTP','SMB','Misc']cat_id['Settings'] = ['','','','']def SetupButtons(self,x,y,w,h,a="Vert",f="button-focus.png",nf="button-nofocus.png",gap=0,txtOffSet=0,font='font13'):    self.numbut  = 0    self.butx = x    self.buty = y    self.butwidth = w    self.butheight = h    self.butalign = a    self.butfocus_img = f    self.butnofocus_img = nf    self.gap = gap    self.txtOffSet = txtOffSet    self.font=fontdef AddButton(self,text):    if self.butalign == "Hori":        c = xbmcgui.ControlButton(self.butx + (self.numbut * self.butwidth + self.gap * self.numbut),self.buty,self.butwidth,self.butheight,text,self.butfocus_img,self.butnofocus_img,textColor=fc)        self.addControl(c)    elif self.butalign == "Vert":        c = xbmcgui.ControlButton(self.butx ,self.buty + (self.numbut * self.butheight + self.gap* self.numbut) ,self.butwidth,self.butheight,text,self.butfocus_img,self.butnofocus_img,textColor=fc)        self.addControl(c)    self.numbut += 1    return cclass Settings_Main(xbmcgui.Window):    def __init__(self):        if Emulating: xbmcgui.Window.__init__(self)                """ Define your sript's Window size here: """        self.scaleX = ( float(self.getWidth())  / float(720) )        self.scaleY = ( float(self.getHeight()) / float(576) )        """ Add your GUI images to your script here: """        self.addControl(xbmcgui.ControlImage(0,0,720,480,"Background.png"))        """ Create your Menu buttons here: """        SetupButtons(self, int(50 * self.scaleX),int(120 * self.scaleY), int(150 * self.scaleX), int(33 * self.scaleY), "Vert", button_hl,button_normal, 2,37)        self.Defaultbtn = AddButton(self,'Default')        self.FTPbtn = AddButton(self,'FTP')        self.SMBbtn = AddButton(self,'SMB')        self.Miscbtn = AddButton(self,'Misc.')        """ Create a Status Label for use in your script: """        self.lblStatus = xbmcgui.ControlFadeLabel(int(215 * self.scaleX),int(128 * self.scaleY), int(500 * self.scaleX), int(90 * self.scaleY), "font12", "0xFFFFFFFF")        self.addControl(self.lblStatus)        """ Add your GUI items """        """ Setup your GUI Navigation """        self.Defaultbtn.controlUp(self.Miscbtn)        self.Defaultbtn.controlDown(self.FTPbtn)        self.FTPbtn.controlUp(self.Defaultbtn)        self.FTPbtn.controlDown(self.SMBbtn)        self.SMBbtn.controlUp(self.FTPbtn)        self.SMBbtn.controlDown(self.Miscbtn)        self.Miscbtn.controlUp(self.SMBbtn)        self.Miscbtn.controlDown(self.Defaultbtn)        self.setFocus(self.Defaultbtn)    """ The below section is where you define your GUI items' Actions when executed """    def onAction(self, action):        if action == ACTION_PREVIOUS_MENU:            self.close()    def onControl(self, control):        global curPage        global cater        if control == self.Defaultbtn:            cater = "Default"            unps = Settings_Default()            unps .doModal()            del unps        if control == self.FTPbtn:            cater = "FTP"            unps = Settings_FTP()            unps .doModal()            del unps        if control == self.SMBbtn:            cater = "SMB"            unps = Settings_Default()            unps .doModal()            del unps        if control == self.Miscbtn:            cater = "Misc"            unps = Settings_Default()            unps .doModal()            del unpsclass Settings_Default(xbmcgui.WindowDialog):    def __init__(self):        if Emulating: xbmcgui.WindowDialog.__init__(self)        sw =  int(self.getWidth())        sh =  int(self.getHeight())        posleft_bg = (sw /2 - 512 / 2) + 60        posttop = (sh /2 - 300 / 2) + 25        self.addControl(xbmcgui.ControlLabel(posleft_bg + 55 , posttop + 15 + 10, 400, 30, 'NZBsRus.com - Login Settings', "special13"))        self.addControl(xbmcgui.ControlLabel(posleft_bg + 55 , posttop + 50 + 10, 400, 30, 'Enter Username & Password', "font12"))        self.nzbUserlbl = xbmcgui.ControlLabel(posleft_bg + 170 , posttop + 93 + 10, 400, 30, NZB_User)        self.nzbPasslbl = xbmcgui.ControlLabel(posleft_bg + 170 , posttop + 128 + 10, 400, 30, NZB_Pass)        self.nzbUserbtn = xbmcgui.ControlButton(posleft_bg + 55 , posttop + 90 + 10, 100, 30, "Username: ")        self.nzbPassbtn = xbmcgui.ControlButton(posleft_bg + 55 , posttop + 125 + 10, 100, 30, "Password: ")        self.nzbSavebtn= xbmcgui.ControlButton(sw/2 - 50 / 2 , posttop + 190, 60, 30, "Save")        #Add controls        self.addControl(self.nzbPasslbl)        self.addControl(self.nzbUserlbl)        self.addControl(self.nzbUserbtn)        self.addControl(self.nzbPassbtn)        self.addControl(self.nzbSavebtn)        #Setting Navigation up :P        self.nzbUserbtn.controlDown(self.nzbPassbtn)        self.nzbPassbtn.controlDown(self.nzbSavebtn)        self.nzbSavebtn.controlDown(self.nzbUserbtn)        self.nzbUserbtn.controlUp(self.nzbSavebtn)        self.nzbPassbtn.controlUp(self.nzbUserbtn)        self.nzbSavebtn.controlUp(self.nzbPassbtn)        self.setFocus(self.nzbUserbtn)    def onAction(self, action):        if action == ACTION_PREVIOUS_MENU:            self.close()    def onControl(self, control):        global NZB_User, NZB_Pass        if control == self.nzbSavebtn:            self.nzbSaveInfo()        if control == self.nzbUserbtn:            temp = self.unikeyboard(NZB_User)            if temp != "":                NZB_User = temp                self.nzbUserlbl.setLabel(NZB_User)            else:                dialog = xbmcgui.Dialog().ok(Title,"Username was not changed, you left it blank")        if control == self.nzbPassbtn:            temp  = self.unikeyboard(NZB_Pass)            if temp != "":                NZB_Pass = temp                self.nzbPasslbl.setLabel(NZB_Pass)            else:                dialog = xbmcgui.Dialog().ok(Title,"Password was not changed, you left it blank")    def nzbSaveInfo(self):        global FTP_YN, FTP_Host, FTP_Port, FTP_User, FTP_Pass, FTP_Path	Brk = os.linesep        curfile=file(sys.path[0]+'\\' + "Cache\\Settings.ini",'wb')        curfile.write("[NZB]" + Brk + "Username=" + NZB_User + Brk + "Password=" + NZB_Pass)        curfile.close()        curfile=file(sys.path[0]+'\\' + "Cache\\Settings.ini",'ab')        curfile.write(Brk + "[FTP]" + Brk + "Active=" + FTP_YN + Brk + "Host=" + FTP_Host + Brk + "Port=" + FTP_Port + Brk + "Username=" + FTP_User + Brk + "Password=" + FTP_Pass + Brk + "Path=" + FTP_Path)        curfile.close()        dialog = xbmcgui.Dialog().ok(Title,"Settings Saved")        self.close()    def unikeyboard(self, default):        keyboard = xbmc.Keyboard(default)        keyboard.doModal()        if (keyboard.isConfirmed()):            return keyboard.getText()        else:            return defaultclass Settings_FTP(xbmcgui.WindowDialog):    """        Set your Username and Passowrd here    """    def __init__(self):        if Emulating: xbmcgui.WindowDialog.__init__(self)        sw =  int(self.getWidth())        sh =  int(self.getHeight())        posleft_bg = (sw /2 - 512 / 2) + 60        posttop = (sh /2 - 300 / 2) + 25        self.addControl(xbmcgui.ControlLabel(posleft_bg + 55 , posttop + 15 + 10, 400, 30, 'NZBsRus.com - Login Settings', "special13"))        self.addControl(xbmcgui.ControlLabel(posleft_bg + 55 , posttop + 50 + 10, 400, 30, 'Enter Username & Password', "font12"))        self.FTPHostlbl = xbmcgui.ControlLabel(posleft_bg + 170 , posttop + 93 + 10, 400, 30, FTP_Host)	self.FTPPortlbl = xbmcgui.ControlLabel(posleft_bg + 170 , posttop + 128 + 10, 400, 30, FTP_Port)        self.FTPUserlbl = xbmcgui.ControlLabel(posleft_bg + 170 , posttop + 163 + 10, 400, 30, FTP_User)        self.FTPPasslbl = xbmcgui.ControlLabel(posleft_bg + 170 , posttop + 198 + 10, 400, 30, FTP_Pass)        self.FTPPathlbl = xbmcgui.ControlLabel(posleft_bg + 170 , posttop + 233 + 10, 400, 30, FTP_Path)        self.FTPHostbtn = xbmcgui.ControlButton(posleft_bg + 55 , posttop + 90 + 10, 100, 30, "Host: ")        self.FTPPortbtn = xbmcgui.ControlButton(posleft_bg + 55 , posttop + 125 + 10, 100, 30, "Port: ")        self.FTPUserbtn = xbmcgui.ControlButton(posleft_bg + 55 , posttop + 160 + 10, 100, 30, "Username: ")        self.FTPPassbtn = xbmcgui.ControlButton(posleft_bg + 55 , posttop + 195 + 10, 100, 30, "Password: ")        self.FTPPathbtn = xbmcgui.ControlButton(posleft_bg + 55 , posttop + 230 + 10, 100, 30, "Path: ")                self.FTPSavebtn= xbmcgui.ControlButton(sw/2 - 50 / 2 , posttop + 190, 60, 30, "Save")        self.FTPYNChk = xbmcgui.ControlCheckMark(155, 155, 200, 20,"TestCheckmark")        #Add controls        self.addControl(self.FTPYNChk)        self.addControl(self.FTPHostlbl)        self.addControl(self.FTPPortlbl)        self.addControl(self.FTPUserlbl)        self.addControl(self.FTPPasslbl)        self.addControl(self.FTPPathlbl)                self.addControl(self.FTPHostbtn)        self.addControl(self.FTPPortbtn)        self.addControl(self.FTPUserbtn)        self.addControl(self.FTPPassbtn)        self.addControl(self.FTPPathbtn)        self.addControl(self.FTPSavebtn)        #Setting Navigation up :P        self.FTPYNChk.controlDown(self.FTPHostbtn)        self.FTPHostbtn.controlDown(self.FTPPortbtn)        self.FTPPortbtn.controlDown(self.FTPUserbtn)        self.FTPUserbtn.controlDown(self.FTPPassbtn)        self.FTPPassbtn.controlDown(self.FTPPathbtn)        self.FTPPathbtn.controlDown(self.FTPSavebtn)        self.FTPSavebtn.controlDown(self.FTPYNChk)        self.FTPYNChk.controlUp(self.FTPSavebtn)        self.FTPHostbtn.controlUp(self.FTPYNChk)        self.FTPPortbtn.controlUp(self.FTPHostbtn)        self.FTPUserbtn.controlUp(self.FTPPortbtn)        self.FTPPassbtn.controlUp(self.FTPUserbtn)        self.FTPPathbtn.controlUp(self.FTPPassbtn)        self.FTPSavebtn.controlUp(self.FTPPathbtn)        self.setFocus(self.FTPHostbtn)        global FTP_YN        if FTP_YN == "Yes":            self.FTPYNChk.setSelected(1)                    def onAction(self, action):        if action == ACTION_PREVIOUS_MENU:            self.close()    def onControl(self, control):        global NZB_User, NZB_Pass        global FTP_YN, FTP_Host, FTP_Port, FTP_User, FTP_Pass, FTP_Path        if self.FTPYNChk.getSelected() == 1:            FTP_YN = "Yes"        elif self.FTPYNChk.getSelected() == 0:            FTP_YN = "No"        if control == self.FTPSavebtn:            self.FTPSaveInfo()        if control == self.FTPHostbtn:            temp = self.unikeyboard(FTP_Host)            if temp != "":                FTP_Host = temp                self.FTPHostlbl.setLabel(FTP_Host)            else:                dialog = xbmcgui.Dialog().ok(Title,"Host IP Address was not changed, you left it blank")        if control == self.FTPPortbtn:            temp = self.unikeyboard(FTP_Port)            if temp != "":                FTP_Port = temp                self.FTPPortlbl.setLabel(FTP_Port)            else:                dialog = xbmcgui.Dialog().ok(Title,"Host Port was not changed, you left it blank")        if control == self.FTPUserbtn:            temp = self.unikeyboard(FTP_User)            if temp != "":                FTP_User = temp                self.FTPUserlbl.setLabel(FTP_User)            else:                dialog = xbmcgui.Dialog().ok(Title,"Username was not changed, you left it blank")        if control == self.FTPPassbtn:            temp  = self.unikeyboard(FTP_Pass)            if temp != "":                FTP_Pass = temp                self.FTPPasslbl.setLabel(FTP_Pass)            else:                dialog = xbmcgui.Dialog().ok(Title,"Password was not changed, you left it blank")        if control == self.FTPPathbtn:            temp = self.unikeyboard(FTP_Path)            if temp != "":                FTP_Path = temp                self.FTPPathlbl.setLabel(FTP_Path)            else:                dialog = xbmcgui.Dialog().ok(Title,"Remote Path was left blank")    def FTPSaveInfo(self):        global FTP_YN, NZB_User, NZB_Pass	Brk = os.linesep        curfile=file(sys.path[0]+'\\' + "Cache\\Settings.ini",'wb')        curfile.write("[NZB]" + Brk + "Username=" + NZB_User + Brk + "Password=" + NZB_Pass)        curfile.close()        curfile=file(sys.path[0]+'\\' + "Cache\\Settings.ini",'ab')        curfile.write(Brk + "[FTP]" + Brk + "Active=" + FTP_YN + Brk + "Host=" + FTP_Host + Brk + "Port=" + FTP_Port + Brk + "Username=" + FTP_User + Brk + "Password=" + FTP_Pass + Brk + "Path=" + FTP_Path)        curfile.close()        dialog = xbmcgui.Dialog().ok(Title,"FTP Settings Saved")        self.close()        def unikeyboard(self, default):    # Open the Virutal Keyboard.        keyboard = xbmc.Keyboard(default)        keyboard.doModal()        if (keyboard.isConfirmed()):            return keyboard.getText()        else:            return defaultclass NZB_Sub(xbmcgui.Window):    def __init__(self):        if Emulating: xbmcgui.Window.__init__(self)        #cater = "console"        """ Define your sript's Window size here: """        self.scaleX = ( float(self.getWidth())  / float(720) )        self.scaleY = ( float(self.getHeight()) / float(576) )        """ Add your GUI images to your script here: """        self.addControl(xbmcgui.ControlImage(0,0,720,480,"Background.png"))        """ Create your "Page Toggle" buttons here: """        self.refreshbtn = xbmcgui.ControlButton(int(580 * self.scaleX),int(20 * self.scaleY), int(100 * self.scaleX), int(40 * self.scaleY), "Refresh")        self.ffbtn = xbmcgui.ControlButton(int(580 * self.scaleX),int(62 * self.scaleY), int(100 * self.scaleX), int(40 * self.scaleY), "Next Page")        self.rewbtn = xbmcgui.ControlButton(int(580 * self.scaleX),int(104 * self.scaleY), int(100 * self.scaleX), int(40 * self.scaleY), "Prev Page")        self.nzbList = xbmcgui.ControlList(int(210 * self.scaleX),int(160 * self.scaleY), int(350 * self.scaleX), int(355 * self.scaleY),itemTextXOffset=-5)        self.sizeBox = xbmcgui.ControlLabel(int(580 * self.scaleX),int(160 * self.scaleY), int(120 * self.scaleX), int(40 * self.scaleY),"", "font14")        self.addedBox = xbmcgui.ControlLabel(int(580 * self.scaleX),int(200 * self.scaleY), int(120 * self.scaleX), int(40 * self.scaleY),"", "font14")        """ Create your Menu buttons here: """        SetupButtons(self, int(50 * self.scaleX),int(120 * self.scaleY), int(150 * self.scaleX), int(33 * self.scaleY), "Vert", button_hl,button_normal, 2,37)        self.subcat = cat_tiles[cater]        self.subcatid = cat_id[cater]        self.btns = []        for x in range(0,len(self.subcat)):            self.btns.append (AddButton(self,self.subcat[x]))            self.btns[x].controlRight(self.nzbList)            if x == 0:                pass            elif x == len(self.subcat):                pass            else:                self.btns[x].controlUp(self.btns[x-1])                self.btns[x-1].controlDown(self.btns[x])        """ Create a Status Label for use in your script: """        self.lblStatus = xbmcgui.ControlFadeLabel(int(215 * self.scaleX),int(128 * self.scaleY), int(500 * self.scaleX), int(90 * self.scaleY), "font12", "0xFFFFFFFF")        self.addControl(self.lblStatus)        self.lblStatus.addLabel("NZBsRus.com - Page " + str(curPage))        """ Add your GUI items """        self.addControl(self.sizeBox)        self.addControl(self.addedBox)        self.addControl(self.nzbList)        self.addControl(self.refreshbtn)        self.addControl(self.ffbtn)        self.addControl(self.rewbtn)        """ Setup your GUI other Navigation """        self.setFocus(self.btns[0])        self.nzbList.controlLeft(self.btns[0])        self.nzbList.controlRight(self.refreshbtn)        self.refreshbtn.controlDown(self.ffbtn)        self.refreshbtn.controlRight(self.nzbList)        self.refreshbtn.controlUp(self.rewbtn)        self.ffbtn.controlDown(self.rewbtn)        self.ffbtn.controlRight(self.nzbList)        self.ffbtn.controlUp(self.refreshbtn)        self.rewbtn.controlRight(self.nzbList)        self.rewbtn.controlDown(self.refreshbtn)        self.rewbtn.controlUp(self.ffbtn)    """ The below section is where you define your GUI items' Actions when executed """    def onAction(self, action):        global curPage, cat        if action == ACTION_PREVIOUS_MENU:            self.close()        if action == 3 or action == 4:           if self.getFocus() == self.nzbList:               self.sizeBox.setLabel(NZB_Size[self.nzbList.getSelectedPosition()])               self.addedBox.setLabel(NZB_Added[self.nzbList.getSelectedPosition()])#        if action == 117:#            curPage = int(curPage) - 1#            self.getnzbList(cat)#        if action == 0:#            curPage = int(curPage) + 1#            self.getnzbList(cat)                def onControl(self, control):        global curPage, cat        global NZB_User, NZB_Pass        global FTP_YN, FTP_Host, FTP_Port, FTP_User, FTP_Pass, FTP_Path        for x in range(0,len(self.btns)):            if self.btns[x] == control:                cat = str(self.subcatid[x])                self.getnzbList(cat)        if control == self.refreshbtn:            curPage = 0            self.getnzbList(cat)        if control == self.ffbtn:            curPage = int(curPage) + 1            self.getnzbList(cat)        if control == self.rewbtn:            curPage = int(curPage) - 1            self.getnzbList(cat)        if control == self.nzbList:            CurrentNZBItem = self.nzbList.getSelectedPosition()            httpFetcher=cachedhttp.CachedHTTPWithProgress()            txdata = urllib.urlencode({"submit":Login, "username":NZB_User, "password":NZB_Pass})            html = httpFetcher.urlopen('http://www.nzbsrus.com/takelogin.php',txdata)            httpFetcher.urlretrieve("http://www.nzbsrus.com/download.php/" + str(NZB_ID[CurrentNZBItem]) + "/" + str(NZB_ID[CurrentNZBItem]) + ".nzb",None,sys.path[0]+'\\Downloads\\' + str(NZB_Title[CurrentNZBItem])[0:37],"nzb")            httpFetcher.saveCookies()            del httpFetcher                        curfile = SafeConfigParser()            curfile.read(NZB_Path + 'Cache\\Settings.ini')            if curfile.has_section('FTP') == True:                FTP_YN = str(curfile.get('FTP', 'Active'))            if FTP_YN == "Yes":                print "FTP Is Enabled"                try:                    ftp = ftplib.FTP()                    ftp.connect(FTP_Host,FTP_Port)                    ftp.login(FTP_User, FTP_Pass)                    ftp.storbinary("STOR " + FTP_Path + str(NZB_Title[CurrentNZBItem])[0:37] + ".nzb", open(sys.path[0]+'\\Downloads\\' + str(NZB_Title[CurrentNZBItem])[0:37] + ".nzb", "rb"), 1024)                    ftp.close()                except ftplib.all_errors:                    dialog = xbmcgui.Dialog()                    dialog.ok("FTP Server Error", "Possible Causes:\n  - FTP Server errors (Server is Off, Port Forwards, Accounts)\n  - Script errors (improper login information was provided)")            elif FTP_YN == "No":                print "FTP Is Disabled"            # self.nzbList.reset()            # self.getnzbList(cat)    def getnzbList(self,cat=""):        """ This will create a Progress dialog when retrieving the list of files """        dialog = xbmcgui.Dialog()        progress = xbmcgui.DialogProgress()        progress.create("NZBsRus.com", "Downloading the NZB file list...")        self.lblStatus.reset()        self.lblStatus.addLabel("NZBsRus.com - Page " + str(curPage))        progress.update(10)        try:            nzb_Sock = urllib.urlopen(nzbURL + cat + "&page=" + str(curPage))            progress.update(30)            nzb_HTML = nzb_Sock.read()            progress.update(60)            nzb_Sock.close()            # <td align=center><nobr>2006-04-14<br />14:43:22</nobr></td>            nzb_re1 = re.compile('id=(.*)&amp;hit=1"><b>(.*)</b></a>')            nzb_re2 = re.compile('<td align=center>(.*)<br>(.*)</td>')            nzb_re3 = re.compile('<td align=center><nobr>(.*)<br />(.*)</nobr></td>')            progress.update(90)            nzb_List1 = nzb_re1.findall(nzb_HTML)            nzb_List2 = nzb_re2.findall(nzb_HTML)            nzb_List3 = nzb_re3.findall(nzb_HTML)            progress.close()            NZB_ID[0:50] = ""            NZB_Title[0:50] = ""            NZB_Size[0:50] = ""            NZB_Added[0:50] = ""            self.nzbList.reset()            for a,b,c in zip(nzb_List1,nzb_List2,nzb_List3):                # self.sizeBox.setText(a[1])    |     Size: %s%s                Size = 'Size: %s%s' % (b[0], b[1])                Added = 'Added: %s' % (c[0])                self.nzbList.addItem(a[1])                NZB_ID.append(a[0])                NZB_Title.append(a[1])                NZB_Size.append(Size)                NZB_Added.append(Added)            self.setFocus(self.nzbList)        except:            progress.close()            dialog.ok("NZBsRus.com","Could not retrieve page: " + curPage)""" Create your script's Main Window """class NZB_Main(xbmcgui.Window):    def __init__(self):        if Emulating: xbmcgui.Window.__init__(self)        """ Define your sript's Window size here: """        self.scaleX = ( float(self.getWidth())  / float(720) )        self.scaleY = ( float(self.getHeight()) / float(576) )        """ Add your GUI images to your script here: """        self.addControl(xbmcgui.ControlImage(0,0,720,480,"Background.png"))        self.addControl(xbmcgui.ControlImage(0,0,247,70, sys.path[0]+'\\' + "Logo.png"))        """ Create your Menu buttons here: """        SetupButtons(self, int(50 * self.scaleX),int(120 * self.scaleY), int(150 * self.scaleX), int(33 * self.scaleY), "Vert", button_hl,button_normal, 2,37)        self.Consolebtn = AddButton(self,'Consoles')        self.Moviesbtn = AddButton(self,'Movies')        self.TVbtn = AddButton(self,'Television')        self.Musicbtn = AddButton(self,'Music')        self.PCbtn = AddButton(self,'PC')        self.Otherbtn = AddButton(self,'Other Platforms')        self.Miscbtn = AddButton(self,'Miscellaneous')        self.Settingsbtn = AddButton(self,'Settings')        """ Create your "Page Toggle" buttons here: """        self.Homebtn = xbmcgui.ControlButton(int(580 * self.scaleX),int(160 * self.scaleY), int(100 * self.scaleX), int(40 * self.scaleY), "Home")        self.FFbtn = xbmcgui.ControlButton(int(580 * self.scaleX),int(225 * self.scaleY), int(100 * self.scaleX), int(40 * self.scaleY), "Next Page")        self.RWbtn = xbmcgui.ControlButton(int(580 * self.scaleX),int(267 * self.scaleY), int(100 * self.scaleX), int(40 * self.scaleY), "Prev Page")        self.nzbList = xbmcgui.ControlList(int(190 * self.scaleX),int(160 * self.scaleY), int(390 * self.scaleX), int(365 * self.scaleY))        """ Create a Status Label for use in your script: """        self.lblStatus = xbmcgui.ControlFadeLabel(int(215 * self.scaleX),int(128 * self.scaleY), int(500 * self.scaleX), int(90 * self.scaleY), "font12", "0xFFFFFFFF")        self.addControl(self.lblStatus)        self.lblStatus.addLabel("NZBsRus.com - Page " + str(curPage))        """ Add your GUI items """        self.addControl(self.nzbList)        self.addControl(self.Homebtn)        self.addControl(self.FFbtn)        self.addControl(self.RWbtn)        """ Setup your GUI Navigation """        self.Consolebtn.controlUp(self.Settingsbtn)        self.Consolebtn.controlDown(self.Moviesbtn)        self.Consolebtn.controlLeft(self.nzbList)        self.Consolebtn.controlRight(self.nzbList)        self.Moviesbtn.controlUp(self.Consolebtn)        self.Moviesbtn.controlDown(self.TVbtn)        self.Moviesbtn.controlLeft(self.nzbList)        self.Moviesbtn.controlRight(self.nzbList)        self.TVbtn.controlUp(self.Moviesbtn)        self.TVbtn.controlDown(self.Musicbtn)        self.TVbtn.controlLeft(self.nzbList)        self.TVbtn.controlRight(self.nzbList)        self.Musicbtn.controlUp(self.TVbtn)        self.Musicbtn.controlDown(self.PCbtn)        self.Musicbtn.controlLeft(self.nzbList)        self.Musicbtn.controlRight(self.nzbList)        self.PCbtn.controlUp(self.Musicbtn)        self.PCbtn.controlDown(self.Otherbtn)        self.PCbtn.controlLeft(self.nzbList)        self.PCbtn.controlRight(self.nzbList)        self.Otherbtn.controlUp(self.PCbtn)        self.Otherbtn.controlDown(self.Miscbtn)        self.Otherbtn.controlLeft(self.nzbList)        self.Otherbtn.controlRight(self.nzbList)        self.Miscbtn.controlUp(self.Otherbtn)        self.Miscbtn.controlDown(self.Settingsbtn)        self.Miscbtn.controlLeft(self.nzbList)        self.Miscbtn.controlRight(self.nzbList)        self.Settingsbtn.controlUp(self.Miscbtn)        self.Settingsbtn.controlDown(self.Consolebtn)        self.Settingsbtn.controlLeft(self.nzbList)        self.Settingsbtn.controlRight(self.nzbList)        self.nzbList.controlLeft(self.Consolebtn)        self.setFocus(self.Consolebtn)    """ The below section is where you define your GUI items' Actions when executed """    def onAction(self, action):    	print action        if action == ACTION_PREVIOUS_MENU:            self.close()    def onControl(self, control):        global curPage        global cater        if control == self.Consolebtn:            cater = "Consoles"            consoles = NZB_Sub()            consoles .doModal()            del consoles        if control == self.Moviesbtn:            cater = "Movies"            movies = NZB_Sub()            movies .doModal()            del movies        if control == self.TVbtn:            cater = "TV"            tv = NZB_Sub()            tv .doModal()            del tv        if control == self.Musicbtn:            cater = "Music"            music = NZB_Sub()            music .doModal()            del music        if control == self.PCbtn:            cater = "PC"            pc = NZB_Sub()            pc .doModal()            del pc        if control == self.Otherbtn:            cater = "Other"            other = NZB_Sub()            other .doModal()            del other        if control == self.Settingsbtn:            Set = Settings_Main()            Set .doModal()            del Set""" This creates a method to login and stores a cookie toretain your logged in status for the duration of the script. """#def signIN():##    setIN = SafeConfigParser()##    setIN.read(NZB_Path + 'Cache\\Settings.ini')##    NZB_User = str(setIN.get('NZB', 'Username'))##    NZB_Pass = str(setIN.get('NZB', 'Password'))#    httpFetcher=cachedhttp.CachedHTTPWithProgress()#    txdata = urllib.urlencode({"submit":Login, "username":NZB_User, "password":NZB_Pass})#    html = httpFetcher.urlopen('http://www.nzbsrus.com/takelogin.php',txdata)def CheckDir():    if os.path.isdir(NZB_Path + "Cache\\") == False:        print "Ini_Check: " + NZB_Path + "Cache\\ does not exist!\nCreating:" + NZB_Path + "Cache\\ now!"        os.mkdir(NZB_Path + "Cache\\")    elif os.path.isdir(NZB_Path + "Cache\\") == True:        print "Ini_Check: " + NZB_Path + "Cache\\ already exists!"def CheckFile():    """ Here we will read hte settings file to get the Username and password """    # Check if file exists if not show username setting window :P    if os.path.isfile(NZB_Path + 'Cache\\Settings.ini') == False:        Brk = os.linesep        print "Ini_Check: curfile =  " + NZB_Path + "Cache\\Settings.ini  Write"        curfile=file(NZB_Path + "Cache\\Settings.ini",'wb')        print "Ini_Check: curfile Write:\n[NZB]\nUsername=\nPassword="        curfile.write("[NZB]" + Brk + "Username=" + Brk + "Password=")        # curfile.close()        # print "[NZB]" + Brk + "Username=" + Brk + "Password="        print "Ini_Check: curfile =  " + NZB_Path + "Cache\\Settings.ini  Append"        curfile=file(NZB_Path + "Cache\\Settings.ini",'ab')        print "Ini_Check: curfile Write:\n[FTP]\nHost=Loaded!\nPort=Loaded!\nUsername=Loaded!\nPassword=Loaded!\nPath=Loaded!"        curfile.write(Brk + "[FTP]" + Brk + "Active=" + Brk + "Host=" + Brk + "Port=" + Brk + "Username=" + Brk + "Password=" + Brk + "Path=")        curfile.close()    elif os.path.isfile(NZB_Path + 'Cache\\Settings.ini') == True:        print "Ini_Check: " + NZB_Path + "Cache\\Settings.ini already exists!"def GetInfo():    global NZB_User, NZB_Pass    global FTP_YN, FTP_Host, FTP_Port, FTP_User, FTP_Pass, FTP_Path    curfile = SafeConfigParser()    curfile.read(NZB_Path + 'Cache\\Settings.ini')    if curfile.has_section('NZB') == True:        NZB_User = str(curfile.get('NZB', 'Username'))        NZB_Pass = str(curfile.get('NZB', 'Password'))    if curfile.has_section('FTP') == True:        FTP_YN = str(curfile.get('FTP', 'Active'))        FTP_Host = str(curfile.get('FTP', 'Host'))        FTP_Port = str(curfile.get('FTP', 'Port'))        FTP_User = str(curfile.get('FTP', 'Username'))        FTP_Pass = str(curfile.get('FTP', 'Password'))        FTP_Path = str(curfile.get('FTP', 'Path'))        print FTP_YN    else:        print "Section: FTP was not found"def InitialSet():    dialog = xbmcgui.Dialog()    if NZB_User == "":        dialog.ok("NZBsRus.com","Initial Login Settings have not been configured. Please do so now.")        Initial = Settings_Main()        Initial.doModal()        del Initial    else:        print "Setion: NZB was not found"def main():    print "Starting " + Title    CheckDir()    CheckFile()    GetInfo()    InitialSet()#    signIN()    mainwin = NZB_Main()    mainwin.doModal()    del mainwinif __name__ == "__main__":    main()