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

📄 scheduler.py

📁 BitTorrentABC-Linux-V.2.4.3源码
💻 PY
📖 第 1 页 / 共 4 页
字号:
                dlg.Destroy()
            else:
                #check if super seed already run 
                if self.proctab[index][self.ABCENGINE_ADR].superseed:
                    dlg = wxMessageDialog(self.parent, "Super-seed mode is already enable"  , "Error!!", wxICON_ERROR)
                    dlg.ShowModal()
                    dlg.Destroy()
                else:
                    #dialogbox warnning after use this mode can't go back
                    dlg = wxMessageDialog(self.parent, """                
    This option greatly reduces the torrent's efficiency. 
The only people who should be using super-seed are those
doing initial seeding or re-seeding.

    Once you enable super-seed mode, you can't turn it off
unless you use "pause", "queue", "remove" operations.
                    """
                    , "Warning!!", wxOK|wxCANCEL)
                    if dlg.ShowModal() != wxID_OK:
                        return
                    else:
                        #Enter super-seed mode
                        self.proctab[index][self.ABCENGINE_ADR].superseed = true
                        if self.proctab[index][self.ABCENGINE_ADR].config is None:
                            self.proctab[index][self.ABCENGINE_ADR].config = self.proctab[index][self.ABCENGINE_ADR].dow.getConfig()
                        self.proctab[index][self.ABCENGINE_ADR].dow.set_super_seed()# one way change, don't go back
                        #change BTstatus to super-seeding
                        rank = self.guiman.getRankfromID(6) #BT status: ID=6
                        if rank != -1:
                            self.list.SetStringItem(index, rank, "super-seeding")        
                        #self.list.SetStringItem(index, 2, "super-seeding")

        else:
            #dialogbox running torrent before using super-seed mode
            dlg = wxMessageDialog(self.parent, "You must running this torrent before using Super-Seed mode"  , "Error!!", wxICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            
        
        
#    def procCANCEL(self, index):    #Call only when cancel from choosing file at first time
#        indexstatus = self.proctab[index][self.LISTINDEX]
#        if self.abcparams['removetorrent'] == "1":
#            try:
#                remove(self.proctab[index][self.SRC])
#            except:
#                pass

#        if self.proctab[index][self.DETAIL_ADR] is not None:
#            self.proctab[index][self.DETAIL_ADR].killAdv()

#        if indexstatus >= 0 :
#            self.parent.list.DeleteItem(index)
#            self.proctab[index][self.DOWNSIZE], self.proctab[index][self.UPSIZE] = self.proctab[index][self.ABCENGINE_ADR].getDownUpSize()
#            self.proctab[index][self.LISTINDEX] = -1
#            self.proctab[index][self.DONEFLAG] = None
#            if self.proctab[index][self.ABCENGINE_ADR].timer != None:
#                self.proctab[index][self.ABCENGINE_ADR].timer.cancel()
#            self.proctab[index][self.ABCENGINE_ADR].fin = true
#            self.proctab[index][self.ABCENGINE_ADR].done(None)                        
#            self.proctab[index][self.ABCENGINE_ADR] = None
            
#        if index != self.maxtorrent - 1:            
#            for i in range(index+1, self.maxtorrent):
#                if self.proctab[i][self.LISTINDEX] == -1:
#                    self.proctab[i - 1][0] = -1
#                    self.proctab[i - 1][1] = None
#                    self.proctab[i - 1][2] = ""
#                    self.proctab[i - 1][3] = ""
#                    self.proctab[i - 1][4] = ""
#                    self.proctab[i - 1][5] = 2
#                    self.proctab[i - 1][6] = None
#                    self.proctab[i - 1][7] = ""                    
#                    self.proctab[i - 1][8] = ""                    
#                    self.proctab[i - 1][9] = ""                    
#                    self.proctab[i - 1][10] = ""                    
#                    self.proctab[i - 1][11] = ""                    
#                    self.proctab[i - 1][12] = ""                    
#                    self.proctab[i - 1][13] = ""                    
#                    self.proctab[i - 1][14] = None
#                    self.proctab[i - 1][15] = 0.0
#                    self.proctab[i - 1][16] = 0.0

#                    break
                
#                if self.proctab[i][0] > 0:
#                    self.proctab[i - 1][0] = i - 1
#                else:
#                    self.proctab[i - 1][0] = self.proctab[i][0] #actually it's -2
#                    
#                self.proctab[i - 1][1] = self.proctab[i][1]
#                self.proctab[i - 1][2] = self.proctab[i][2]
#                self.proctab[i - 1][3] = self.proctab[i][3]
#                self.proctab[i - 1][4] = self.proctab[i][4]
#                self.proctab[i - 1][5] = self.proctab[i][5]
#                self.proctab[i - 1][6] = self.proctab[i][6]
#                self.proctab[i - 1][7] = self.proctab[i][7]
#                self.proctab[i - 1][8] = self.proctab[i][8]
#                self.proctab[i - 1][9] = self.proctab[i][9]
#                self.proctab[i - 1][10] = self.proctab[i][10]
#                self.proctab[i - 1][11] = self.proctab[i][11]
#                self.proctab[i - 1][12] = self.proctab[i][12]
#                self.proctab[i - 1][13] = self.proctab[i][13]
#                self.proctab[i - 1][14] = self.proctab[i][14]
#                self.proctab[i - 1][15] = self.proctab[i][15]
#                self.proctab[i - 1][16] = self.proctab[i][16]

#                if self.proctab[i - 1][self.ABCENGINE_ADR] != None:
#                    self.proctab[i - 1][self.ABCENGINE_ADR].changeIndex(i - 1)
#                    self.proctab[i - 1][self.ABCENGINE_ADR].changeDoneFlag(self.proctab[i][self.DONEFLAG])
#                    self.proctab[i - 1][self.ABCENGINE_ADR].changePrio(self.proctab[i][self.PRIO])
#                            
#        self.proctab[self.maxtorrent - 1][0] = -1
#        self.proctab[self.maxtorrent - 1][1] = None
#        self.proctab[self.maxtorrent - 1][2] = ""
#        self.proctab[self.maxtorrent - 1][3] = ""
#        self.proctab[self.maxtorrent - 1][4] = ""
#        self.proctab[self.maxtorrent - 1][5] = 2
#        self.proctab[self.maxtorrent - 1][6] = None
#        self.proctab[self.maxtorrent - 1][7] = ""
#        self.proctab[self.maxtorrent - 1][8] = ""
#        self.proctab[self.maxtorrent - 1][9] = ""
#        self.proctab[self.maxtorrent - 1][10] = ""
#        self.proctab[self.maxtorrent - 1][11] = ""
#        self.proctab[self.maxtorrent - 1][12] = ""
#        self.proctab[self.maxtorrent - 1][13] = ""
#        self.proctab[self.maxtorrent - 1][14] = None
#        self.proctab[self.maxtorrent - 1][15] = 0.0
#        self.proctab[self.maxtorrent - 1][16] = 0.0

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

        
    def procRESUME(self, index):
        indexstatus = self.proctab[index][self.LISTINDEX]
        if indexstatus != -2:   #ignore resume active process     
            return

        self.proctab[index][self.STATUS] = "queue"
        self.updateTorrentList()        
        self.currentproc += 1
        self.runProc(index, 0) 

        #self.invokeLater(self.Scheduler) don't need scheduler


    def procQUEUE(self, index, firsttime_flag):
        indexstatus = self.proctab[index][self.LISTINDEX]
        if indexstatus == -1:
            return
        if self.proctab[index][self.DETAIL_ADR] is not None:
            self.proctab[index][self.DETAIL_ADR].onPause()

        oldstatus = self.proctab[index][self.STATUS]
        self.proctab[index][self.STATUS] = "queue"

        if indexstatus != -2:
            self.proctab[index][self.DOWNSIZE], self.proctab[index][self.UPSIZE] = self.proctab[index][self.ABCENGINE_ADR].getDownUpSize()
            self.proctab[index][self.LISTINDEX] = -2
            self.proctab[index][self.DONEFLAG] = None
            if self.proctab[index][self.ABCENGINE_ADR].timer != None:
                self.proctab[index][self.ABCENGINE_ADR].timer.cancel()

            self.proctab[index][self.ABCENGINE_ADR].fin = true
            self.proctab[index][self.ABCENGINE_ADR].done(None)                        
            self.proctab[index][self.ABCENGINE_ADR] = None

            if oldstatus != "completed" and firsttime_flag == 0:
                self.currentproc -= 1

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

            
    def addNewProc(self, src, forceasklocation): #from 3 sources, add from file, add from URL, autoadd
                      #from file, URL maybe down torrent.lst from addProc
                      # change at onChooseFile make sure they choose dest
        try:
            metainfo_file = open(src, 'rb')
            metainfo = bdecode(metainfo_file.read())
            metainfo_file.close()
            info = metainfo['info']
        except :
            metainfo_file.close()            
            dlg = wxMessageDialog(self.parent, "Failed : Invalid torrent file." , "Error!!", wxICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            try:
                remove(src)
            except:
                pass
            return

        # No default directory
        if self.abcparams['setdefaultfolder'] == '0' or forceasklocation:
            if info.has_key('length'):   #1 file for this torrent
                dl = wxFileDialog(self.parent, 'Choose file to save as, pick a partial download to resume (%.1f MB)'%(info['length']/(1<<20)), '', info['name'], '*.*', wxSAVE)
            else:   # Directory torrent
                file_length = 0
                for x in info['files']:
                    file_length += x['length']                
                dl = wxDirDialog(self.parent, 'Choose a directory to save to, pick a partial download to resume (%.1f MB)'%(file_length/(1<<20)), path.join(getcwd(), info['name']), style = wxDD_DEFAULT_STYLE | wxDD_NEW_DIR_BUTTON)
            if dl.ShowModal() != wxID_OK:
                if self.abcparams['removetorrent'] == "1":
                    try:
                        remove(src)
                    except:
                        pass
                return
            else:
                getslot = 0        
                for i in range(0, self.maxtorrent):
                    if self.proctab[i][self.LISTINDEX] == -1:
                        self.proctab[i][self.LISTINDEX] = -2   # set queue status
                        self.proctab[i][self.ABCENGINE_ADR] = None       # @ ABCEngine
                        self.proctab[i][self.SRC] = src        # .torrent source file
                
                        self.proctab[i][self.DEST] = dl.GetPath()      # destination download file
                    
                        self.proctab[i][self.STATUS] = "queue"
                        self.proctab[i][self.PRIO] = 2          # Priority "Normal"
                        self.proctab[i][self.DONEFLAG] = None       # Done flag
                        self.proctab[i][self.FILENAME] = info['name']
                        self.proctab[i][self.MAXUPLOAD]     = self.abcparams['maxupload']
                        self.proctab[i][self.MAXUPLOADRATE] = self.abcparams['maxuploadrate']
                        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']
                        self.proctab[i][self.DETAIL_ADR]    = None
                        self.proctab[i][self.DOWNSIZE]      = 0.0
                        self.proctab[i][self.UPSIZE]        = 0.0

                        getslot = 1
                        numslot = i
                        break
                if getslot == 0:
                    return        
                self.parent.list.InsertStringItem(numslot, "")
                #Add Status info in List
                for rank in range(0, self.guiman.getNumCol()):
                    colid = self.guiman.getIDfromRank(rank)
                    if colid == 4:
                        self.parent.list.SetStringItem(numslot, rank, self.proctab[numslot][self.FILENAME])
                    elif colid == 6:
                        self.parent.list.SetStringItem(numslot, rank, "queue")
                    elif colid == 7:
                        self.parent.list.SetStringItem(numslot, rank, self.priotext[self.proctab[numslot][self.PRIO]])
                    else:
                        self.parent.list.SetStringItem(numslot, rank, "")

                self.updateTorrentList()
                self.Scheduler()

        else:
            getslot = 0        
            for i in range(0, self.maxtorrent):
                if self.proctab[i][self.LISTINDEX] == -1:
                    self.proctab[i][self.LISTINDEX] = -2   # set queue status
                    self.proctab[i][self.ABCENGINE_ADR] = None       # @ ABCEngine
                    self.proctab[i][self.SRC] = src        # .torrent source file                

⌨️ 快捷键说明

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