import xml.dom.minidom import urllib, urllib2, re, os, sys, nt import cachedhttp import xbmc, xbmcgui from string import split, replace, find from ConfigParser import ConfigParser, SafeConfigParser from StringIO import StringIO import ftplib try: Emulating = xbmcgui.Emulating except: Emulating = False ACTION_PREVIOUS_MENU = 10 Title = "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 case global httpFetcher global curPage global cat curPage = 0 cat = 38 # NZBsRus.com Login Information NZB_User = "" NZB_Pass = "" Login = "\"Log in!\"" # FTP Server Login Information FTP_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_ID global NZB_Title global NZB_Size global NZB_Added NZB_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=font def 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 c class 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 unps class 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 default class 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 default class 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() # 2006-04-14
14:43:22
nzb_re1 = re.compile('id=(.*)&hit=1">(.*)') nzb_re2 = re.compile('(.*)
(.*)') nzb_re3 = re.compile('(.*)
(.*)
') 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 to retain 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 mainwin if __name__ == "__main__": main()