⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uriopener.py

📁 XOT: XBMC Online TV Framework
💻 PY
📖 第 1 页 / 共 2 页
字号:
            # Check for posts
            if params=='':
                sourceHandle = self.uriOpener.open(uri)
            else:
                sourceHandle = self.uriOpener.open(uri, params)
            
            logFile.info("Determining which Progessbar to use....")
            data = sourceHandle.info()
            
            if data.get('Content-length'):
                fileSize = int(data.get('Content-length'))
                logFile.info('Using Calculated Progressbar (fileSize=' + str(fileSize) +')')
            else:
                fileSize = -1
                logFile.info('Using Non-Calculated Progressbar')
            
            read = 0
            blocknum = 0
            data = ''
            
            while 1:
                block = sourceHandle.read(self.blockSize)
                if block == "":
                    break
                read += len(block)
                data = data + block
                blocknum += 1
                
                if pbEnabled:
                    cancelled = self.PBHandler(blocknum, self.blockSize, fileSize, uriPB, pbLine1, pbLine2)
                    #check to see if cancelled
                    if cancelled:
                        break

            if pbEnabled:
                uriPB.close()
                try:
                    self.timerUpDown.cancel()
                except:
                    # no timer exists
                    pass
                
            sourceHandle.close()
            
            if cancelled:
                logFile.info("Opening of %s was cancelled", uri)
            else:
                logFile.info("Url %s was opened successfully", uri)
            
            return data
        except:
            logFile.critical("Error Opening url %s", uri, exc_info=True)
            if pbEnabled:
                uriPB.close()
                self.timerUpDown.cancel()
            try:
                sourceHandle.close()
            except UnboundLocalError:
                pass
            
            return ""
        
    #===============================================================================
    def Header(self, uri, params=""):
        logFile.info("Retreiving Header info for %s", uri)
        #uri = uri
        #params = params
                
        try:
            if params == "":
                uriHandle = self.uriOpener.open(uri)
            else:
                uriHandle = self.uriOpener.open(uri, params)
            
            data = uriHandle.info()
            realUrl = uriHandle.geturl()
            #logFile.debug(data)
            data = data.get('Content-Type')
            uriHandle.close()
            logFile.debug("Header info retreived: %s for realUrl %s", data, realUrl)
            return (data, realUrl)
        except:
            logFile.critical("Header info not retreived", exc_info=True)
            return ("","")

    #===============================================================================
    def CookieCheck(self, cookieName):
        retVal = False
        
        for cookie in self.cj:
            if cookie.name == cookieName:
                logFile.debug("Found cookie: %s", cookie.name)
                retVal = True
                break

        return retVal
    
    #===============================================================================
    def CorrectFileName(self, filename):
        filename = re.sub(self.inValidCharacters,"",filename)
        if len(filename)>42:
            (base, ext) = os.path.splitext(filename)
            baseLength = 42 - len(ext)
            regex = "^.{1,%s}" % (baseLength) 
            base = re.compile(regex).findall(base)[-1]
            filename = "%s%s" % (base, ext)
        return filename

    #===============================================================================
    def PBHandler(self, blocknum, blocksize, totalsize, uriPB, pbLine1, pbLine2):
        """
        add information to the Progressbar and returns true if it is canceled
        """
        if uriPB.iscanceled()==False:
            try:
                retrievedsize = blocknum*blocksize
                if totalsize != 0:
                    perc = 100*retrievedsize/totalsize
                else:
                    perc = 0
                
                retrievedsizeMB = 1.0*retrievedsize/self.bytesToMB
                totalsizeMB = 1.0*totalsize/self.bytesToMB
                
                if totalsize > 0:
                    pbLine2 = '%i%% (%.1f of %.1f MB)' % (perc, retrievedsizeMB, totalsizeMB)
                    animation = blocknum % len(self.pbAnimation)
                    uriPB.update(int(perc), pbLine1 + " - " + self.pbAnimation[animation] ,pbLine2)
                return False
            except:
                logFile.critical("PBHandle error", exc_info=True)
                return True
        else:
            return True
    
    #==============================================================================
    def PBEmergencyCanceler(self, *args, **kwargs):
        logFile.debug("Emergency Canceller Check.....")
        uriPB = kwargs["pb"]
        if uriPB.iscanceled():
            uriPB.close()
            logFile.critical("Emerency Canceling of UriOpener")
        else:
            try:
                self.timerUpDown.cancel()
            except:
                logFile.info("Emerengy Cancel timer not active. Activating")
                pass
            self.timerUpDown = threading.Timer(self.timerTimeOut, self.PBEmergencyCanceler, kwargs={'pb':uriPB})
            self.timerUpDown.start()
        return 

#===============================================================================    
class AsyncOpener(threading.Thread):
    def __init__(self, uri, handler, blocksize, action=None, params="", filePath=""):
        """ constructor, setting initial variables 
        
        """
        self.uri = uri
        self.uriHandler = handler
        self.params = params        
        self.blockSize = blocksize        
        self.savePath = filePath
        
        self.isCompleted = False
        self.fileSize = 0
        self.blocksRead = 0
        self.data = ""
        
        if action=='open':     
            threading.Thread.__init__(self, name='UriOpenerThread', target=self.Open)
        else:
            raise Exception()
            return

    #===============================================================================
    def Open(self):
        try:
            # Check for posts
            if self.params=='':
                sourceHandle = self.uriHandler.open(self.uri)
            else:
                sourceHandle = self.uriHandler.open(self.uri, self.params)
            
            logFile.info("Determining which Progessbar to use....")
            data = sourceHandle.info()
            
            if data.get('Content-length'):
                self.fileSize = int(data.get('Content-length'))
                logFile.info('FileSize is known (fileSize=' + str(self.fileSize) +')')
            else:
                self.fileSize = -1
                logFile.info('FileSize is unknown')
            
            data = ""
            
            #time.sleep(2)
            
            self.blocksRead = 0
            while 1:
                block = sourceHandle.read(self.blockSize)
                if block == "":
                    break
                data = data + block
                self.blocksRead += 1
                
                #need a sleep to allow reading of variables
                #time.sleep(0.0005)
                
            sourceHandle.close()
            
            self.data = data
            self.isCompleted = True
        except:
            logFile.critical("Error Opening url %s", self.uri, exc_info=True)
            try:
                sourceHandle.close()
            except UnboundLocalError:
                pass
            
            self.data = ""
            self.isCompleted = True            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -