All pastes #420581 Raw Edit

Untitled

public text v1 · immutable
·published 2007-04-02 07:47 UTC
rendered paste body
      ##########################
      #                        #                      
      #   XinBox (V.0.9)       #         
      #     By Stanley87       #         
      #                        #
#######                        #######             
#                                    #
#                                    #
#   A pop3 email client for XBMC     #
#                                    #
######################################

def createProgressDialog( __line3__ ):
    global dialog, pct
    pct = 0
    dialog = xbmcgui.DialogProgress()
    dialog.create( lang( 0 ) )
    updateProgressDialog( __line3__ )

def updateProgressDialog( __line3__ ):
    global dialog, pct
    pct += 5
    dialog.update( pct, __line1__, __line2__, __line3__ )

def closeProgessDialog():
    global dialog
    dialog.close()
    
import xbmcgui, language, time
lang = language.Language().string

__line1__ = lang(60)
__line2__ = lang(61)

createProgressDialog( '%s xbmc' % ( lang( 62 ), ))
import xbmc
updateProgressDialog( '%s sys' % ( lang( 62 ), ))
import sys
updateProgressDialog( '%s os' % ( lang( 62 ), ))
import os
updateProgressDialog( '%s threading' % ( lang( 62 ), ))
import threading
updateProgressDialog( '%s guibuilder' % ( lang( 62 ), ))
import guibuilder
updateProgressDialog( '%s xib_util' % ( lang( 62 ), ))
import xib_util
updateProgressDialog( '%s shutil' % ( lang( 62 ), ))
import shutil
updateProgressDialog( '%s default' % ( lang( 62 ), ))
import default
updateProgressDialog( '%s traceback' % ( lang( 62 ), ))
import traceback
updateProgressDialog( '%s mailchecker' % ( lang( 62 ), ))
import mailchecker
updateProgressDialog( '%s email' % ( lang( 62 ), ))
import email
updateProgressDialog( '%s poplib' % ( lang( 62 ), ))
import poplib, mimetypes
closeProgessDialog()

SETTINGDIR = default.__scriptsettings__
SCRIPTSETDIR = SETTINGDIR + default.__scriptname__ + "\\"
DATADIR = SCRIPTSETDIR + "data\\"
DELETEFOLDER = "deleted\\"
IDFOLDER = "ids\\"
NEWFOLDER = "new\\"
CORFOLDER = "cor\\"
MAILFOLDER = "mail\\"
SCRITPFOLDER = default.__scriptpath__
MEDIAFOLDER = SCRITPFOLDER + "src//media//"

class GUI( xbmcgui.WindowXML ):
    def __init__(self,strXMLname, strFallbackPath,strDefaultName,bforeFallback=0):
        self.url = "http://xboxmediacenter.com"

    def onInit(self):
        self.setupcontrols()
        self.createdirs()
        self.getSettings()
        self.getmmSettings()
        self.adjustcontrols()
        self.setupvars()
        xbmcgui.unlock()

    def setupcontrols ( self ):
        self.list = self.getControl(68)
        self.txtbox = self.getControl(67)
        self.xb1butn = self.getControl(61)
        self.xb2butn = self.getControl(62)
        self.sebutn = self.getControl(63)
        self.mmbutn = self.getControl(64)
        self.title = self.getControl(66)
        self.bkimage = self.getControl(65)
        self.xbempty = self.getControl(70)
        self.fsoverlay = self.getControl(71)
        self.fsmsgbody = self.getControl(72)
        self.emailinfo = self.getControl(73)
        self.emailrec = self.getControl(74)
        self.attbutn = self.getControl(75)
        self.delbutn = self.getControl(76)
        return
        
    def setupvars( self ):
        self.box1 = 0
        self.box2 = 0
        self.Fullscreen = False
        self.notread = MEDIAFOLDER + "emailnotread.png"
        self.read = MEDIAFOLDER + "emailread.png"
        self.control_action = xib_util.setControllerAction()
        xbmc.log ("setup variables OK")
        return
        
    def adjustcontrols ( self ):
        self.delbutn.setVisible( False )
        self.attbutn.setVisible( False )
        self.fsmsgbody.setVisible( False )
        self.emailinfo.setVisible( False )
        self.emailrec.setVisible( False )        
        self.fsoverlay.setVisible( False )
        self.xbempty.setVisible( False )
        self.list.setVisible( False )
        self.mmbutn.setLabel( lang(200) )
        self.sebutn.setLabel( lang(201) )
        if self.mmsettings.disablemmb:
            self.mmbutn.setEnabled( False )
        if self.settings.disablexb1:
            self.xb1butn.setEnabled( False )
        if self.settings.disablexb2:
            self.xb2butn.setEnabled( False )
        xbmc.log ("adjusted controls OK")
        return

    def createdirs( self ):
        self.dirs = xib_util.createdirs()
    
    def getmmSettings( self ):
        self.mmsettings = xib_util.mmSettings()
        
    def getSettings( self ):
        self.settings = xib_util.Settings()

    def gettally(self):
        self.readtally()
        if self.tally == "-":
            self.tally = 1
        self.tally = int(self.tally)
        self.writetally()
        return
    
    def readtally(self):
        try:
            fh = open(self.emfolder + "tally.sss")
            for line in fh.readlines():
                theLine = line.strip()
                if theLine.count("<tally>") > 0:
                    self.tally = theLine[7:-8]    
                    fh.close()
            return
        except IOError:
            self.createtally()
            self.readtally()
            return
    
    def writetally(self):
            f = open(self.emfolder + "tally.sss", "wb")
            f.write("\t<tally>"+ str(self.tally) +"</tally>\n")
            f.close()
            return
    
    def createtally(self):
            f = open(self.emfolder + "tally.sss", "wb")
            f.write("\t<tally>-</tally>\n")
            f.close()
            return

    def disablexinbox (self):
        self.txtbox.reset()
        self.txtbox.setVisible( False )
        self.list.setVisible( False )
        self.xbempty.setVisible( True )
        self.xbempty.setLabel( lang(58) )
        if self.box2 ==1:
            self.setFocus(self.xb2butn)
        else:
            self.setFocus(self.xb1butn)
        return
    
    def openinbox( self , inbox):
        if inbox == 1:
    	    self.box1 = 1
    	    self.box2 = 0
    	    self.title.setLabel( lang(0) + " - " + self.settings.user1)
    	    self.xb1butn.setLabel( lang(65))
    	    self.xb2butn.setLabel("XinBox 2")
    	    self.emfolder = DATADIR + self.settings.user1 + "@" + self.settings.server1 + "\\"
        else:
    	    self.box2 = 1
    	    self.box1 = 0
    	    self.title.setLabel( lang(0) + " - " + self.settings.user2)
    	    self.xb2butn.setLabel( lang(65))
    	    self.xb1butn.setLabel("XinBox 1")
    	    self.emfolder = DATADIR + self.settings.user2 + "@" + self.settings.server2 + "\\"
        if not os.path.exists(self.emfolder):
            self.disablexinbox()
        else:
            self.addme()
            if self.list.size() == 0:
                self.disablexinbox()

    def clearfolder(self, folder):
        for root, dirs, files in os.walk(folder, topdown=False):
            for name in files:
                os.remove(os.path.join(root, name))
                   
    def addme( self ):
        self.xbempty.setVisible( False )
        self.txtbox.reset()
        self.txtbox.setVisible( True )
        self.clearfolder(self.emfolder + CORFOLDER)
        self.list.setVisible( True )
        self.list.reset()
        self.gettally()
        self.count = 0
        self.count2 = 0
        self.count3 = self.tally
        self.emails = []
        for self.count in range(self.tally):
                self.temp2 = self.emfolder + MAILFOLDER + str(self.count3) +".sss"
                if os.path.exists(self.temp2):
                    fh = open(self.temp2)
                    self.tempStr = fh.read()
                    fh.close()
                    self.getstatus()
                    self.emails.append(email.message_from_string(self.emailbody))
                    try:
                        temp = self.emails[self.count2].get('subject')
                        if temp == "":
                            self.myemail = xbmcgui.ListItem(lang(22) +" "+ lang(23) + " "+ self.emails[self.count2].get('from'))
                        else:
                            self.myemail = xbmcgui.ListItem(self.emails[self.count2].get('subject') +" "+ lang(23) + " "+ self.emails[self.count2].get('from'))
                    except:
                        try:
                            self.myemail = xbmcgui.ListItem(lang(22) +" "+ lang(23) + " "+ self.emails[self.count2].get('from'))
                        except:
                            self.myemail = xbmcgui.ListItem("BAD EMAIL")
                    if self.readstatus == "UNREAD":
                        self.myemail.setThumbnailImage(self.notread)
                    else:
                        self.myemail.setThumbnailImage(self.read)
                    self.list.addItem(self.myemail)
                    f = open(self.emfolder + CORFOLDER + str(self.list.size()-1) +".cor", "w")
                    f.write(str(self.count3))
                    f.close()
                    self.count = self.count+1 
                    self.count2 = self.count2+1
                    self.count3 = self.count3-1
                else:
                    self.count = self.count+1
                    self.count3 = self.count3-1
        return

    def processEmail(self, selected):
        self.attachments = []
        if self.emails[selected].is_multipart():
            for part in self.emails[selected].walk():
                if part.get_content_type() != "text/plain" and part.get_content_type() != "text/html" and part.get_content_type() != "multipart/mixed" and part.get_content_type() != "multipart/alternative":
                    filename = part.get_filename()
                    if not filename:
                        ext = mimetypes.guess_extension(part.get_type())
                        if not ext:
                            # Use a generic extension
                            ext = '.bin'
                        filename = 'temp' + ext
                    try:
                        f=open(TEMPFOLDER + filename, "wb")
                        f.write(part.get_payload(decode=1))
                        f.close()
                    except:
                        print "problem saving attachment " + filename
                    self.attachments.append(filename)       
        if len(self.attachments)==0:
            self.attbutn.setEnabled( False )
        else:
            self.attbutn.setEnabled( True )
        self.printEmail(selected)        

    def parse_email(self, email):
        self.parsemail = email
        return str(self.parsemail)


    def printEmail(self, selected):
        self.msgText = ""
        if self.emails[selected].is_multipart():
            for part in self.emails[selected].walk():
                if part.get_content_type() == "text/plain":
                    print part.get_payload()
                    email = self.parse_email(part.get_payload())
                    self.msgText = email
                    break
        else:
            if self.emails[selected].get_content_type() == "text/html":
                # email in html only, so strip html tags
                email2 = self.parse_email(self.emails[selected].get_payload())
                self.msgText = email2
            else:
                email3 = self.parse_email(self.emails[selected].get_payload())
                self.msgText = email3
                print self.msgText
        self.txtbox.setText(self.msgText)
        return

    def getemailinfo(self):
        self.temp = self.list.getSelectedPosition()
        self.temp2 = self.list.getSelectedItem()
        self.temp3 = self.temp2.getLabel()
        fh = open(self.emfolder + CORFOLDER + str(self.temp)+ ".cor")
        self.updateme = fh.read()
        fh.close()
        fh = open(self.emfolder + MAILFOLDER + str(self.updateme) +".sss")
        self.tempStr = fh.read()
        fh.close()
        return

    def delemail (self, inbox, emailid):
        w = mailchecker.Checkemail(inbox, 0, emailid)
        w.deletemail()
        del w
        return
    
    def deletemail(self):
        dialog = xbmcgui.Dialog()
        ret = dialog.select( lang( 66 ), [ lang( 67 ), lang( 68 ), lang( 69 )])
        if ret == 0:
            os.remove(self.emfolder + MAILFOLDER + str(self.updateme)+".sss") 
            self.addme()
            self.undoFullscreen()
            if self.list.size() == 0:
                self.disablexinbox()
            else:
                self.setFocus(self.list)
                try:
                    self.list.selectItem(self.temp)
                except:pass
                self.printEmail(self.list.getSelectedPosition())    
        elif ret == 1:
            if self.box1 == 1:
                self.delemail(1, self.mailid)
            else:
                self.delemail(2, self.mailid)
            self.setFocus(self.delbutn)
            return
        elif ret == 2:
            if self.box1 == 1:
                self.delemail(1, self.mailid)
            else:
                self.delemail(2, self.mailid)
            self.getemailinfo()
            os.remove(self.emfolder + MAILFOLDER + str(self.updateme)+".sss")
            self.addme()
            self.undoFullscreen()
            if self.list.size() == 0:
                self.disablexinbox()
            else:
                self.setFocus(self.list)
                try:
                    self.list.selectItem(self.temp)
                except:pass
                self.printEmail(self.list.getSelectedPosition())
        else:self.setFocus(self.delbutn)
        return
    
    def checkemail ( self, inbox, minimode):
        w = mailchecker.Checkemail(inbox, minimode, 0)
        w.setupemail()
        self.newmails = w.returnvar
        del w
        return
    
    def getstatus( self ):
        s = self.tempStr.split('|')
        self.readstatus = s[0]
        self.time = s[1]
        self.date = s[2]
        self.mailid = s[3]
        self.emailbody = s[4]
        return
    
    def goFullscreen(self):
        self.emailinfo.reset()
        self.emailrec.reset()
        self.fsmsgbody.reset()
        self.getemailinfo()
        self.getstatus()
        self.temp2.setThumbnailImage(self.read)
        self.readstatus = "READ"
        self.writestatus()
        self.processEmail(self.temp)
        self.attbutn.setVisible( True )
        self.delbutn.setVisible( True )
        self.fsoverlay.setVisible(True)
        self.fsmsgbody.setVisible(True)
        self.fsmsgbody.setText(self.msgText)
        self.setFocus(self.fsmsgbody)
        self.emailinfo.addLabel(self.temp3)
        self.emailrec.addLabel( lang( 63 ) + str(self.time) + " - " + str(self.date))
        self.emailinfo.setVisible(True)
        self.emailrec.setVisible(True)
        self.Fullscreen = True

    def writestatus (self):  
        f = open(self.emfolder + MAILFOLDER + str(self.updateme) +".sss", "w")
        f.write(self.readstatus + "|" + self.time + "|" + self.date + "|" + self.mailid + "|" + self.emailbody)
        f.close()
        return
    
    def undoFullscreen(self):
        self.attbutn.setVisible( False )
        self.delbutn.setVisible( False )
        self.fsoverlay.setVisible(False)
        self.emailinfo.setVisible(False)
        self.emailrec.setVisible(False)
        self.fsmsgbody.setVisible(False)
        self.Fullscreen = False
        self.setFocus(self.list)
        return
        
    def onFocus(self, controlID):
        print 'The control with id="5" just got focus'

    def onClick(self, controlID):
        if ( controlID == 61):
            if self.box1 == 1:
                self.checkemail(1,0)
                if self.newmails != 0:
                    self.addme()
            else:
                self.openinbox(1)
        elif ( controlID == 62):
            if self.box2 == 1:
                self.checkemail(2,0)
                if self.newmails != 0:
                    self.addme()
            else:
                self.openinbox(2)
        elif ( controlID == 76):
                self.deletemail()
        elif ( controlID == 63):
                try:
                    self.launchsettings()
                except:traceback.print_exc()        
                
    def onAction( self, action ):
        button_key = self.control_action.get( action.getButtonCode(), 'n/a' )
        actionID   =  action.getId()
        try: control = self.getFocus()
        except: control = 0
        if ( button_key == 'Keyboard ESC Button' or button_key == 'Back Button' or button_key == 'Remote Menu Button' ):
            if self.Fullscreen == True:
                self.undoFullscreen()
            else:
                self.close()
        elif ( button_key == 'A Button' or button_key == 'Keyboard Menu Button'):
            if control == self.list:
                self.goFullscreen()                
        else:
            if control == self.list:
                self.printEmail(self.list.getSelectedPosition())

    def launchsettings( self ):
        ws = Settings("settingss.xml",SCRITPFOLDER + "src","DefaultSkin")
        ws.doModal()
        del ws
        
class Settings( xbmcgui.WindowXML ):
    def __init__(self,strXMLname, strFallbackPath,strDefaultName,bforeFallback=0):
        print "Hi"
        
    def onInit(self):
        self.xb1butn = self.getControl(61)

    def onClick(self, controlID):
        if ( controlID == 61):
            self.close()
                
    def onAction( self, action ):
        print "hi"