📄 scheduler.py
字号:
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 + -