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

📄 scheduler.py

📁 BitTorrentABC-Linux-V.2.4.3源码
💻 PY
📖 第 1 页 / 共 4 页
字号:
        
    def changeABCParams(self, abcparams):
        self.abcparams = abcparams
        self.maxnumsim = self.abcparams['numsimdownload']
        for i in range(0, self.maxtorrent):
            if self.proctab[i][self.LISTINDEX] == -1:
                break
            self.proctab[i][self.MAXUPLOAD]     = self.abcparams['maxupload']
            self.proctab[i][self.MAXUPLOADRATE] = self.abcparams['maxuploadrate']

            if self.proctab[i][self.LISTINDEX] == -2 or self.proctab[i][self.STATUS] != "completed" :    
                self.proctab[i][self.UPLOADOPT]     = self.abcparams['uploadoption']
            self.proctab[i][self.UPLOADTIMEH]   = self.abcparams['uploadtimeh']
            self.proctab[i][self.UPLOADTIMEM]   = self.abcparams['uploadtimem']
            self.proctab[i][self.UPLOADRATIO]   = self.abcparams['uploadratio']

            if self.proctab[i][self.LISTINDEX] != -2:
                if self.proctab[i][self.ABCENGINE_ADR].config is None:
                    self.proctab[i][self.ABCENGINE_ADR].config = self.proctab[i][self.ABCENGINE_ADR].dow.getConfig()
                self.proctab[i][self.ABCENGINE_ADR].config['max_upload_rate'] = int(self.abcparams['maxuploadrate']) * 1000
                self.proctab[i][self.ABCENGINE_ADR].dow.setUploadRate()
                
                nummaxupload = int(self.abcparams['maxupload'])
                self.proctab[i][self.ABCENGINE_ADR].config['max_uploads'] = nummaxupload
                self.proctab[i][self.ABCENGINE_ADR].config['min_uploads'] = nummaxupload

                if nummaxupload < 4:
                    self.proctab[i][self.ABCENGINE_ADR].config['max_initiate'] = min(12, self.abcparams['max_initiate'])
                elif nummaxupload < 30:
                    self.proctab[i][self.ABCENGINE_ADR].config['max_initiate'] = min(40, self.abcparams['max_initiate'])
                else:
                    self.proctab[i][self.ABCENGINE_ADR].config['max_initiate'] = min(nummaxupload+10, self.abcparams['max_initiate'])
                    
                
        self.invokeLater(self.Scheduler)
        
    def hasDetailWin(self, index):
        if self.proctab[index][self.DETAIL_ADR] is None:
            return false
        else:
            return true
    def deleteDetailWin(self, index):
        try:
            self.proctab[index][self.DETAIL_ADR] = None
        except wxPyDeadObjectError, e:
            self.proctab[index][self.DETAIL_ADR] = None
            
    def reannounce(self, index, arg=""):
        # if torrent is not running.. can't reannounce
        if self.proctab[index][self.LISTINDEX] < 0:
            return
        else:
            if (time() - self.proctab[index][self.ABCENGINE_ADR].reannouncelast > 60):
                self.proctab[index][self.ABCENGINE_ADR].reannouncelast = time()
                if arg == "":
                    self.proctab[index][self.ABCENGINE_ADR].dow.reannounce()
                else:
                    self.proctab[index][self.ABCENGINE_ADR].dow.reannounce(arg)

    def getlastexternalannounce(self, index):
        if self.proctab[index][self.LISTINDEX] < 0:
            return ''
        else:
            return self.proctab[index][self.ABCENGINE_ADR].lastexternalannounce

    def setlastexternalannounce(self, index, exannounce):
        if self.proctab[index][self.LISTINDEX] < 0:
            return
        else:
            self.proctab[index][self.ABCENGINE_ADR].lastexternalannounce = exannounce

        
    def bgalloc(self, index):
        if self.proctab[index][self.LISTINDEX] < 0:
            return
        else:
            if self.proctab[index][self.ABCENGINE_ADR].dow.storagewrapper is not None:
                self.proctab[index][self.ABCENGINE_ADR].dow.storagewrapper.bgalloc()

    def getResponse(self, index):
        if self.proctab[index][self.LISTINDEX] == -1:
            return None
        elif self.proctab[index][self.LISTINDEX] == -2:
            #not active process
            metainfo_file = open(self.proctab[index][self.SRC], 'rb')
            metainfo = bdecode(metainfo_file.read())
            metainfo_file.close()
            return metainfo
        else:
            #ative process
            metainfo = self.proctab[index][self.ABCENGINE_ADR].dow.getResponse()
            if metainfo == None:
                metainfo_file = open(self.proctab[index][self.SRC], 'rb')
                metainfo = bdecode(metainfo_file.read())
                metainfo_file.close()
            return metainfo
        
    def SwapListIndex(self, index1, index2):
        tempdata = []
        tempdata.append([-1, None, "", "", "", 2, None, "", "", "", "", "", "", "", None, 0.0, 0.0])

        for i in range(0, self.maxRememberParams):  
            tempdata[0][i] = self.proctab[index1][i]
        
        # Swap all data 
        for i in range(0, self.maxRememberParams): 
            self.proctab[index1][i] = self.proctab[index2][i]
            self.proctab[index2][i] = tempdata[0][i]
        
        # Change ID
        if self.proctab[index1][self.LISTINDEX] >= 0:
            self.proctab[index1][self.LISTINDEX] = index1
        if self.proctab[index2][self.LISTINDEX] >= 0:
            self.proctab[index2][self.LISTINDEX] = index2
            
        # Update Display List
        tempdata = []
        for rank in range(0, self.guiman.getNumCol()):          
            tempdata.append(self.list.GetItem(index1, rank).GetText())
            
        for rank in range(0, self.guiman.getNumCol()):
            self.list.SetStringItem(index1, rank, self.list.GetItem(index2, rank).GetText())
            self.list.SetStringItem(index2, rank, tempdata[rank])

        # Change Index in ABCEngine, ABCDetail_Win,(doneflag, prio)??
        if self.proctab[index1][self.ABCENGINE_ADR] != None:                
            self.proctab[index1][self.ABCENGINE_ADR].changeIndex(self.proctab[index1][self.LISTINDEX])
            self.proctab[index1][self.ABCENGINE_ADR].changeDoneFlag(self.proctab[index1][self.DONEFLAG])
            self.proctab[index1][self.ABCENGINE_ADR].changePrio(self.proctab[index1][self.PRIO])
            if self.proctab[index1][self.DETAIL_ADR] != None:
                    self.proctab[index1][self.DETAIL_ADR].changeIndex(index1)
                    
        if self.proctab[index2][self.ABCENGINE_ADR] != None:                
            self.proctab[index2][self.ABCENGINE_ADR].changeIndex(self.proctab[index2][self.LISTINDEX])
            self.proctab[index2][self.ABCENGINE_ADR].changeDoneFlag(self.proctab[index2][self.DONEFLAG])
            self.proctab[index2][self.ABCENGINE_ADR].changePrio(self.proctab[index2][self.PRIO])
            if self.proctab[index2][self.DETAIL_ADR] != None:
                    self.proctab[index2][self.DETAIL_ADR].changeIndex(index2)

        self.updateTorrentList()            
        self.invokeLater(self.Scheduler)


    def MoveItemUp(self, index):
        if index == 0:       # First Item can't move up anymore
            return False
        if self.proctab[index - 1][self.LISTINDEX] == -1: #just protect
            return False
        self.SwapListIndex(index, index -1)
        return True
        
    def MoveItemDown(self, index):
        if self.proctab[index + 1][self.LISTINDEX] == -1 : #Last Item can't move down anymore
            return false
        self.SwapListIndex(index, index+1)
        return true
        
    def clearAllCompleted(self):
        index = 0
        while True:
            if self.proctab[index][self.LISTINDEX] == -1:
                break
            if self.proctab[index][self.LISTINDEX] == -2 and self.proctab[index][self.STATUS] == "completed":
                self.list.DeleteItem(index)
                self.procREMOVE(index)
            else:
                index += 1
                
    def updateInactiveCol(self):
        for i in range(0, self.maxtorrent):
            if self.proctab[i][self.LISTINDEX] == -1:
                break
            if self.proctab[i][self.LISTINDEX] == -2:   #Inactive torrent
                # Display only title, BT status, Priority, %U/D SIZE, down,upsize
                #####################################################
                for rank in range(0, self.parent.guiman.getNumCol()):
                    ID = self.parent.guiman.getIDfromRank(rank)
                    if ID == 4:     # Title
                        self.list.SetStringItem(i, rank, self.proctab[i][self.FILENAME])
                    elif ID == 6:   #BT status
                        self.list.SetStringItem(i, rank, self.proctab[i][self.STATUS])
                    elif ID == 7:   #Priority
                        self.list.SetStringItem(i, rank, self.priotext[self.proctab[i][self.PRIO]])
                    elif ID == 12:  # %U/D Size
                        if int(self.proctab[i][self.DOWNSIZE]) == 0 :
                            self.list.SetStringItem(i, rank, 'oo %')
                        else:
                            self.list.SetStringItem(i, rank, '%.1f'%((self.proctab[i][self.UPSIZE]/self.proctab[i][self.DOWNSIZE])*100) + "%")
                    elif ID == 18:
                        self.list.SetStringItem(i, rank, ('%.2f MB' % (self.proctab[i][self.DOWNSIZE] / (1 << 20))))
                    elif ID == 19:
                        self.list.SetStringItem(i, rank, ('%.2f MB' % (self.proctab[i][self.UPSIZE] / (1 << 20))))                        
                    else:
                        self.list.SetStringItem(i, rank, '')
            else: # only BT status
                for rank in range(0, self.parent.guiman.getNumCol()):
                    ID = self.parent.guiman.getIDfromRank(rank)
                    if ID == 6:   #BT status
                        self.list.SetStringItem(i, rank, "Waiting..")
        
    def SetDetailWinSize(self, whsize):
        for i in range(0, self.maxtorrent):
            if self.proctab[i][self.LISTINDEX] == -1:
                break
            if self.proctab[i][self.DETAIL_ADR] is not None:
                self.proctab[i][self.DETAIL_ADR].SetSize(whsize)
            
    def clearScheduler(self):
        for i in range(0, self.maxtorrent):
            if self.proctab[i][self.LISTINDEX] == -1:
                break
            
            self.proctab[i][self.DONEFLAG] = None
            if self.proctab[i][self.ABCENGINE_ADR] is not None:
                self.proctab[i][self.DOWNSIZE], self.proctab[i][self.UPSIZE] = self.proctab[i][self.ABCENGINE_ADR].getDownUpSize()
                self.proctab[i][self.ABCENGINE_ADR].fin = true
                self.proctab[i][self.ABCENGINE_ADR].done(None)                        
                self.proctab[i][self.ABCENGINE_ADR] = None
            if self.proctab[i][self.DETAIL_ADR] is not None:
                self.proctab[i][self.DETAIL_ADR].killAdv()                

        self.updateTorrentList()

    def isProcActive(self, index):
        if(self.proctab[index][self.LISTINDEX] >= 0):
            return True
        else:
            return False
    def isProcComplete(self, index):
        if(self.proctab[index][self.STATUS] == "completed"):
            return True
        else:
            return False
    def getProcDest(self, index):
        torrentfile, name = self.isFile(index)
        if torrentfile:
            return self.proctab[index][self.DEST]
        else:
            return (self.proctab[index][self.DEST]+name)

    def isFile(self, index):
        metainfo_file = open(self.proctab[index][self.SRC], 'rb')
        metainfo = bdecode(metainfo_file.read())
        metainfo_file.close()
        info = metainfo['info']
        if info.has_key('length'):
            return True, info['name']
        else:
            return False, info['name']
        
    def changeProcDest(self, index, dest):
        self.proctab[index][self.DEST] = dest
        self.updateTorrentList()
        
    def getLastScrape(self, index):
        return self.proctab[index][self.ABCENGINE_ADR].lastgetscrape
    
    def updateScrapeData(self, index, newpeer, newseed):
        self.proctab[index][self.ABCENGINE_ADR].lastgetscrape = time()
        self.proctab[index][self.ABCENGINE_ADR].currentpeer = newpeer
        self.proctab[index][self.ABCENGINE_ADR].currentseed = newseed

⌨️ 快捷键说明

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