(file) Return to btdownloadheadless.py CVS log (file) (dir) Up to [Development] / shadowsclient

  1 theshadow 1.1 #!/usr/bin/env python
  2               
  3               # Written by Bram Cohen
  4               # see LICENSE.txt for license information
  5               
  6               from BitTorrent.download import download
  7               from threading import Event
  8               from os.path import abspath
  9               from sys import argv, version, stdout
 10               assert version >= '2', "Install Python 2.0 or greater"
 11               true = 1
 12               false = 0
 13               
 14               def hours(n):
 15                   if n == -1:
 16                       return '<unknown>'
 17                   if n == 0:
 18                       return 'complete!'
 19                   n = int(n)
 20                   h, r = divmod(n, 60 * 60)
 21                   m, sec = divmod(r, 60)
 22 theshadow 1.1     if h > 1000000:
 23                       return '<unknown>'
 24                   if h > 0:
 25                       return '%d hour %02d min %02d sec' % (h, m, sec)
 26                   else:
 27                       return '%d min %02d sec' % (m, sec)
 28               
 29               class HeadlessDisplayer:
 30                   def __init__(self):
 31                       self.done = false
 32                       self.file = ''
 33                       self.percentDone = ''
 34                       self.timeEst = ''
 35                       self.downloadTo = ''
 36                       self.downRate = ''
 37                       self.upRate = ''
 38                       self.errors = []
 39               
 40                   def finished(self):
 41                       self.done = true
 42                       self.percentDone = '100'
 43 theshadow 1.1         self.timeEst = 'Download Succeeded!'
 44                       self.downRate = ''
 45                       self.display()
 46               
 47                   def failed(self):
 48                       self.done = true
 49                       self.percentDone = '0'
 50                       self.timeEst = 'Download Failed!'
 51                       self.downRate = ''
 52                       self.display()
 53               
 54                   def error(self, errormsg):
 55                       self.errors.append(errormsg)
 56                       self.display()
 57               
 58                   def display(self, fractionDone = None, timeEst = None, 
 59                           downRate = None, upRate = None, activity = None):
 60                       if fractionDone is not None:
 61                           self.percentDone = str(float(int(fractionDone * 1000)) / 10)
 62                       if timeEst is not None:
 63                           self.timeEst = hours(timeEst)
 64 theshadow 1.1         if activity is not None and not self.done:
 65                           self.timeEst = activity
 66                       if downRate is not None:
 67                           self.downRate = '%.0f kB/s' % (float(downRate) / (1 << 10))
 68                       if upRate is not None:
 69                           self.upRate = '%.0f kB/s' % (float(upRate) / (1 << 10))
 70                       print '\n\n\n\n'
 71                       for err in self.errors:
 72                           print 'ERROR:\n' + err + '\n'
 73                       print 'saving:        ', self.file
 74                       print 'percent done:  ', self.percentDone
 75                       print 'time left:     ', self.timeEst
 76                       print 'download to:   ', self.downloadTo
 77                       print 'download rate: ', self.downRate
 78                       print 'upload rate:   ', self.upRate
 79                       stdout.flush()
 80               
 81                   def chooseFile(self, default, size, saveas, dir):
 82                       self.file = '%s (%.1f MB)' % (default, float(size) / (1 << 20))
 83                       if saveas != '':
 84                           default = saveas
 85 theshadow 1.1         self.downloadTo = abspath(default)
 86                       return default
 87               
 88                   def newpath(self, path):
 89                       self.downloadTo = path
 90               
 91               def run(params):
 92                   try:
 93                       import curses
 94                       curses.initscr()
 95                       cols = curses.COLS
 96                       curses.endwin()
 97                   except:
 98                       cols = 80
 99               
100                   h = HeadlessDisplayer()
101                   download(params, h.chooseFile, h.display, h.finished, h.error, Event(), cols, h.newpath)
102                   if not h.done:
103                       h.failed()
104               
105               if __name__ == '__main__':
106 theshadow 1.1     run(argv[1:])

No CVS admin address has been configured
Powered by
ViewCVS 0.9.3