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

📄 status.py

📁 ABC-win32-v3.1 一个P2P软源代码
💻 PY
字号:
import sys

from Utility.constants import * #IGNORE:W0611


################################################################
#
# Class: TorrentStatus
#
# Keep track of the status of a torrent
#
################################################################        
class TorrentStatus:
    def __init__(self, torrent):
        self.torrent = torrent
        self.utility = torrent.utility
        
        # set queue status
        self.value = STATUS_QUEUE
        self.completed = False
        self.dontupdate = True # Don't update until the list item is created

    def getStatusText(self):
        value = self.value
        
        if self.isActive():
            if value == STATUS_PAUSE:
                status = self.utility.lang.get('pause')
            elif value == STATUS_SUPERSEED:
                status = self.utility.lang.get('superseeding')
            elif self.torrent.connection.engine is not None:
                status = self.torrent.connection.engine.btstatus
            else:
                status = self.utility.lang.get('stopping')
        elif value == STATUS_FINISHED:
            status = self.utility.lang.get('completed')
        elif value == STATUS_STOP:
            status = self.utility.lang.get('stop')
        elif value == STATUS_QUEUE:
            status = self.utility.lang.get('queue')
        else:
            # Most likely just not quite started yet
            status = self.utility.lang.get('waiting')
        
        return status
        
    # Is the torrent active?
    def isActive(self, working = True, checking = True, pause = True):
        engine = self.torrent.connection.engine
        if engine is not None:
            if not pause and self.value == STATUS_PAUSE:
                return False
            if working and engine.working:
                return True
            elif checking and (engine.checking or engine.waiting):
                return True
                
    # See if the torrent is checking existing data or allocating
    def isCheckingOrAllocating(self):
        # If the torrent is in its initialization stage, the progress value
        # we get from ABCEngine won't reflect the download progress
        # 
        # Note: "moving data" is a third initialization status that is listed
        #       in the BitTornado source
        ######################################################################
        if not self.utility.abcquitting and self.torrent.connection.engine is not None:
            status = self.getStatusText()
            statuslist = [ self.utility.lang.get('waiting'), 
                           self.utility.lang.get('checkingdata'), 
                           self.utility.lang.get('allocatingspace'), 
                           self.utility.lang.get('movingdata') ]
            if (status in statuslist):
                return True
        return False
        
    def isDoneUploading(self):
        finished = False
        
        uploadoption = self.torrent.connection.getSeedOption('uploadoption')
        
        # If the file isn't finished, or it's set to unlimited upload
        if self.torrent.files.progress != 100.0:
            pass

        elif (uploadoption == "1"):
            uploadtimes = self.torrent.connection.getTargetSeedingTime()
            
            if uploadtimes < 1800: #Cheat people edit config file..unlimited upload!
                pass
            elif self.torrent.connection.seedingtime >= uploadtimes:
                finished = True
        
        elif (uploadoption == "2"
            and self.torrent.getColumnValue(12) >= float(self.torrent.connection.getSeedOption('uploadratio'))):
            finished = True
            
        # Also mark as completed in case it wasn't for some reason
        if finished:
            self.value = STATUS_FINISHED
            self.completed = True
            
        elif self.value == STATUS_FINISHED:
            # Was finished before, but isn't now
            self.value = STATUS_QUEUE
            
        self.torrent.updateColumns([COL_BTSTATUS])
        
        return finished
        
    def updateStatus(self, value, update = True):
        if value != self.value:
            self.value = value
            if update:
                self.torrent.torrentconfig.writeStatus()
        

⌨️ 快捷键说明

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