3 from traceback import print_exc
5 from BaseLib.Core.API import *
10 def vod_event_callback(d,event,params):
11 if event == VODEVENT_START:
12 stream = params["stream"]
15 epoch_local = time.time()
16 blocksize = d.get_def().get_piece_length()
18 stream.read(blocksize)
19 last_ts = stream.get_generation_time()
21 if epoch_server is None:
23 print >>sys.stderr, "bitbucket: received first data."
24 epoch_server = last_ts
26 age_server = last_ts - epoch_server
27 age_local = time.time() - epoch_local
29 # if server is younger, wait up to sync
30 waittime = max( 0, age_server - age_local )
32 print >>sys.stderr, "bitbucket: sleeping %.2f seconds. we're at time %.2f, piece has age %.2f" % (waittime,age_local,age_server)
33 time.sleep( waittime )
36 def state_callback(ds):
39 p = "%.0f %%" % (100.0*ds.get_progress())
40 dl = "dl %.0f" % (ds.get_current_speed(DOWNLOAD))
41 ul = "ul %.0f" % (ds.get_current_speed(UPLOAD))
42 print >>sys.stderr,dlstatus_strings[ds.get_status() ],p,dl,ul,"====="
50 scfg = SessionStartupConfig()
51 scfg.set_megacache( False )
52 scfg.set_overlay( False )
55 tdef = TorrentDef.load(sys.argv[1])
56 dscfg = DownloadStartupConfig()
57 dscfg.set_video_event_callback( vod_event_callback )
58 dscfg.set_max_uploads(16)
60 d = s.start_download( tdef, dscfg )
62 d.set_state_callback(state_callback,getpeerlist=False)