home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 April / com_0405_1.iso / opensource / BTpp-0.5.4-bin.exe / $INSTDIR / BT++.exe / LoaderManager.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-04-19  |  8.7 KB  |  292 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.2)
  3.  
  4. from os import listdir, path
  5. from ConfigFile import ConfigFile, Config
  6. from Loader import Loader
  7. from BTConstants import *
  8. from core.CurrentRateMeasure import GlobalMeasure
  9. from time import strftime
  10.  
  11. class LoaderManager:
  12.     Loaders = []
  13.     Log = None
  14.     Refresh = None
  15.     Finish = None
  16.     UpMeasure = None
  17.     DirTorrent = ''
  18.     DirTemp = ''
  19.     DirFilFinish = ''
  20.     DirTorFinish = ''
  21.     
  22.     def __init__(self, dirs, refresh = None, log = None, finish = None, upmeasure = None):
  23.         self.Log = log
  24.         self.Refresh = refresh
  25.         self.Finish = finish
  26.         self.DirTorrent = dirs[0]
  27.         self.DirTemp = dirs[1]
  28.         self.DirFilFinish = dirs[2]
  29.         self.DirTorFinish = dirs[3]
  30.         if upmeasure == None:
  31.             self.UpMeasure = GlobalMeasure(20.0, 5.0)
  32.         else:
  33.             self.UpMeasure = upmeasure
  34.  
  35.     
  36.     def CreateNewLoader(self, torrent):
  37.         
  38.         try:
  39.             loader = Loader(torrent, [
  40.                 self.DirTorrent,
  41.                 self.DirTemp,
  42.                 self.DirFilFinish,
  43.                 self.DirTorFinish], self.UpMeasure, self.Refresh, self.Log, self.Finish)
  44.             self.Loaders.append(loader)
  45.             if self.Log != None:
  46.                 self.Log('Added torrent "' + torrent + '"...', loglevel = LOG_INFO)
  47.             
  48.             return loader
  49.         except:
  50.             if self.Log != None:
  51.                 self.Log('Error adding torrent "' + torrent + '"...', loglevel = LOG_ERROR)
  52.             
  53.             return None
  54.  
  55.  
  56.     
  57.     def GetNumLoading(self):
  58.         cnt = 0
  59.         for loader in self.Loaders:
  60.             if loader.IsRunning():
  61.                 cnt = cnt + 1
  62.             
  63.         
  64.         return cnt
  65.  
  66.     
  67.     def GetNumHashing(self):
  68.         cnt = 0
  69.         for loader in self.Loaders:
  70.             if loader.IsHashing():
  71.                 cnt = cnt + 1
  72.             
  73.         
  74.         return cnt
  75.  
  76.     
  77.     def GetUpSpeed(self):
  78.         speed = 0
  79.         for loader in self.Loaders:
  80.             speed += loader.Info['SpeedUp']
  81.         
  82.         return speed
  83.  
  84.     
  85.     def GetDownSpeed(self):
  86.         speed = 0
  87.         for loader in self.Loaders:
  88.             speed += loader.Info['SpeedDown']
  89.         
  90.         return speed
  91.  
  92.     
  93.     def GetNumLoaders(self):
  94.         return len(self.Loaders)
  95.  
  96.     
  97.     def GetNumConnections(self):
  98.         con = 0
  99.         for loader in self.Loaders:
  100.             con = con + loader.GetNumConnections()
  101.         
  102.         return con
  103.  
  104.     
  105.     def GetDownloader(self, num):
  106.         return self.Loaders[num]
  107.  
  108.     
  109.     def SetUpSpeed(self, speed):
  110.         for l in self.Loaders:
  111.             if l.Obj.has_key('Connecter'):
  112.                 con = l.Obj['Connecter']
  113.                 con.max_upload_rate = speed * 1024
  114.             
  115.         
  116.  
  117.     
  118.     def Move(self, frm, to):
  119.         if to < 0 or to > len(self.Loaders) - 1:
  120.             return None
  121.         
  122.         if frm < to:
  123.             to = to + 1
  124.         
  125.         self.Loaders[to:to] = [
  126.             self.Loaders[frm]]
  127.         if frm > to:
  128.             del self.Loaders[frm + 1]
  129.         else:
  130.             del self.Loaders[frm]
  131.         FilesConf = ConfigFile()
  132.         FilesConf.Read('files.ini')
  133.         FilesConf.DelSection('ActiveOrder')
  134.         for num in range(len(self.Loaders)):
  135.             FilesConf.Set('ActiveOrder', '%03d' % num, self.Loaders[num].Config['Tor'])
  136.         
  137.         FilesConf.Save()
  138.  
  139.     
  140.     def GetInfo(self, num, name):
  141.         
  142.         try:
  143.             return self.Loaders[num].Info[name]
  144.         except:
  145.             pass
  146.  
  147.  
  148.     
  149.     def Update(self):
  150.         self.UpdateList()
  151.         self.UpdateDownloads()
  152.         self.UpdateHashing()
  153.  
  154.     
  155.     def UpdateList(self):
  156.         tors = listdir(self.DirTorrent)
  157.         FilesConf = ConfigFile()
  158.         FilesConf.Read('files.ini')
  159.         order = FilesConf.GetOptions('ActiveOrder')
  160.         order.sort()
  161.         new = []
  162.         for key in order:
  163.             value = FilesConf.Get('ActiveOrder', key)
  164.             con = false
  165.             if value == '' or not path.exists(path.join(self.DirTorrent, value)):
  166.                 FilesConf.DelOption('ActiveOrder', key)
  167.                 for l in self.Loaders:
  168.                     if l.Config['Tor'] == value:
  169.                         l.PauseDownload()
  170.                         self.Loaders.remove(l)
  171.                     
  172.                 
  173.                 con = true
  174.                 FilesConf.Save()
  175.             
  176.             for loader in self.Loaders:
  177.                 if loader.Config['Tor'] == value:
  178.                     con = true
  179.                 
  180.             
  181.             if con == true:
  182.                 continue
  183.             
  184.             new.append(key)
  185.         
  186.         if len(tors) == 0:
  187.             return None
  188.         
  189.         for tor in tors:
  190.             con = false
  191.             for loader in self.Loaders:
  192.                 if loader.Config['Tor'] == tor:
  193.                     con = true
  194.                 
  195.             
  196.             for key in new:
  197.                 value = FilesConf.Get('ActiveOrder', key)
  198.                 if value == tor:
  199.                     con = true
  200.                 
  201.             
  202.             if con == true:
  203.                 continue
  204.             
  205.             if order == []:
  206.                 nid = 0
  207.             else:
  208.                 nid = int(order[len(order) - 1]) + 1
  209.             new.append('%03d' % nid)
  210.             FilesConf.Set('ActiveOrder', '%03d' % nid, tor)
  211.             FilesConf.Save()
  212.             order = FilesConf.GetOptions('ActiveOrder')
  213.             order.sort()
  214.         
  215.         for num in new:
  216.             tor = FilesConf.Get('ActiveOrder', num)
  217.             self.CreateNewLoader(tor)
  218.         
  219.  
  220.     
  221.     def UpdateDownloads(self):
  222.         dwcnt = self.GetNumLoading()
  223.         dwsta = Config.Get('Download', 'AutoStart')
  224.         dwmax = Config.Get('Download', 'MaxSimDown')
  225.         hscnt = self.GetNumHashing()
  226.         hsmax = Config.Get('Hash', 'NumSimHash')
  227.         hsstr = Config.Get('Hash', 'Strict')
  228.         if dwsta == 1 and dwcnt < dwmax:
  229.             dwcnt = dwmax - dwcnt
  230.             hscnt = hsmax - hscnt
  231.             for loader in self.Loaders:
  232.                 if dwcnt <= 0:
  233.                     break
  234.                 
  235.                 if not loader.IsRunning() and not loader.IsUserPaused() and not loader.IsFinished() and hsstr == 0 or hscnt > 0:
  236.                     hscnt = hscnt - 1
  237.                     dwcnt = dwcnt - 1
  238.                     loader.StartDownload()
  239.                 
  240.             
  241.         
  242.         dwcnt = self.GetNumLoading()
  243.         dwpau = Config.Get('Download', 'AutoPause')
  244.         if dwpau == 1 and dwcnt > dwmax:
  245.             dwcnt = dwcnt - dwmax
  246.             tmp = self.self.Loaders
  247.             tmp.reverse()
  248.             for loader in tmp:
  249.                 if dwcnt <= 0:
  250.                     break
  251.                 
  252.                 if loader.IsRunning():
  253.                     dwcnt = dwcnt - 1
  254.                     loader.PauseDownload()
  255.                 
  256.             
  257.         
  258.  
  259.     
  260.     def UpdateHashing(self):
  261.         hscnt = self.GetNumHashing()
  262.         hssta = Config.Get('Hash', 'Background')
  263.         hsmax = Config.Get('Hash', 'NumSimHash')
  264.         if hssta == 1 and hscnt < hsmax:
  265.             hscnt = hsmax - hscnt
  266.             for loader in self.Loaders:
  267.                 if hscnt <= 0:
  268.                     break
  269.                 
  270.                 if not loader.IsHashing() and not loader.HasHashed():
  271.                     hscnt = hscnt - 1
  272.                     loader.StartHashing()
  273.                 
  274.             
  275.         
  276.  
  277.     
  278.     def ShutDown(self):
  279.         for loader in self.Loaders:
  280.             if loader.IsRunning():
  281.                 loader.PauseDownload(user = true)
  282.             
  283.         
  284.  
  285.     
  286.     def Destroy(self):
  287.         for loader in self.Loaders:
  288.             loader.Destroy()
  289.         
  290.  
  291.  
  292.