def got_have(self, piece, connection=None):
     if DEBUG:
         print >> sys.stderr, 'pps::got_have: piece', piece
     self.maxhave = max(self.maxhave, piece)
     PiecePicker.got_have(self, piece, connection)
     if self.is_interesting(piece):
         self.peer_connections[connection]['interesting'][piece] = 1
 def got_have(self, piece, connection = None):
     if DEBUG:
         print >> sys.stderr, 'pps::got_have: piece', piece
     self.maxhave = max(self.maxhave, piece)
     PiecePicker.got_have(self, piece, connection)
     if self.is_interesting(piece):
         self.peer_connections[connection]['interesting'][piece] = 1
 def __init__(self,
              numpieces,
              rarest_first_cutoff=1,
              rarest_first_priority_cutoff=3,
              priority_step=20,
              helper=None,
              coordinator=None,
              rate_predictor=None,
              piecesize=0):
     PiecePicker.__init__(self, numpieces, rarest_first_cutoff,
                          rarest_first_priority_cutoff, priority_step,
                          helper, coordinator, rate_predictor)
     self.maxhave = 0
     self.stats = {}
     self.stats['high'] = 0
     self.stats['mid'] = 0
     self.stats['low'] = 0
     self.transporter = None
     self.outstanding_requests = {}
     self.playing_delay = (5, 20, -0.5)
     buffering_delay = globalConfig.get_value(
         'piece_picker_buffering_delay', None)
     if buffering_delay is not None:
         self.buffering_delay = buffering_delay
     else:
         self.buffering_delay = (7.5, 30, 10)
     self.is_interesting = self.is_interesting_normal
     self.extra_videostatus = []
 def get_valid_range_iterator(self, skip_filter = False):
     if skip_filter:
         return PiecePicker.get_valid_range_iterator(self)
     if self.videostatus.live_streaming and self.videostatus.get_live_startpos() is None:
         if DEBUG:
             log('pps::get_valid_range_iterator: not hooked in, valid range set to total')
         return PiecePicker.get_valid_range_iterator(self)
     if DEBUG:
         log('pps::get_valid_range_iterator: live hooked in or VOD, valid range set to subset')
     return self.valid_range_generator()
 def get_valid_range_iterator(self, skip_filter=False):
     if skip_filter:
         return PiecePicker.get_valid_range_iterator(self)
     if self.videostatus.live_streaming and self.videostatus.get_live_startpos(
     ) is None:
         if DEBUG:
             log('pps::get_valid_range_iterator: not hooked in, valid range set to total'
                 )
         return PiecePicker.get_valid_range_iterator(self)
     if DEBUG:
         log('pps::get_valid_range_iterator: live hooked in or VOD, valid range set to subset'
             )
     return self.valid_range_generator()
    def next(self,
             haves,
             wantfunc,
             sdownload,
             complete_first=False,
             helper_con=False,
             slowpieces=[],
             willrequest=True,
             connection=None,
             proxyhave=None,
             shuffle=True):
        def newwantfunc(piece):
            return piece not in slowpieces and wantfunc(piece)

        p = PiecePicker.next(self,
                             haves,
                             newwantfunc,
                             sdownload,
                             complete_first,
                             helper_con,
                             slowpieces=slowpieces,
                             willrequest=willrequest,
                             connection=connection,
                             shuffle=shuffle)
        if DEBUGPP and self.videostatus.prebuffering:
            print >> sys.stderr, 'PiecePickerStreaming: original PP.next returns', p
        if p is None and not self.videostatus.live_streaming and self.am_I_complete(
        ) or TEST_VOD_OVERRIDE:
            if self.transporter is not None:
                self.transporter.notify_playable()
        return p
 def __init__(self, numpieces, rarest_first_cutoff = 1, rarest_first_priority_cutoff = 3, priority_step = 20, helper = None, coordinator = None, rate_predictor = None, piecesize = 0):
     PiecePicker.__init__(self, numpieces, rarest_first_cutoff, rarest_first_priority_cutoff, priority_step, helper, coordinator, rate_predictor)
     self.maxhave = 0
     self.stats = {}
     self.stats['high'] = 0
     self.stats['mid'] = 0
     self.stats['low'] = 0
     self.transporter = None
     self.outstanding_requests = {}
     self.playing_delay = (5, 20, -0.5)
     buffering_delay = globalConfig.get_value('piece_picker_buffering_delay', None)
     if buffering_delay is not None:
         self.buffering_delay = buffering_delay
     else:
         self.buffering_delay = (7.5, 30, 10)
     self.is_interesting = self.is_interesting_normal
     self.extra_videostatus = []
    def next(self, haves, wantfunc, sdownload, complete_first = False, helper_con = False, slowpieces = [], willrequest = True, connection = None, proxyhave = None, shuffle = True):

        def newwantfunc(piece):
            return piece not in slowpieces and wantfunc(piece)

        p = PiecePicker.next(self, haves, newwantfunc, sdownload, complete_first, helper_con, slowpieces=slowpieces, willrequest=willrequest, connection=connection, shuffle=shuffle)
        if DEBUGPP and self.videostatus.prebuffering:
            print >> sys.stderr, 'PiecePickerStreaming: original PP.next returns', p
        if p is None and not self.videostatus.live_streaming and self.am_I_complete() or TEST_VOD_OVERRIDE:
            if self.transporter is not None:
                self.transporter.notify_playable()
        return p
    def complete(self, piece):
        if DEBUG:
            log('PiecePickerStreaming: complete:', piece)
        if not PiecePicker.complete(self, piece):
            return False
        if self.transporter:
            self.transporter.complete(piece)
        for request in self.outstanding_requests.keys():
            if request[0] == piece:
                del self.outstanding_requests[request]

        for d in self.peer_connections.itervalues():
            d['interesting'].pop(piece, 0)

        check_interests = False
        for vs in self.extra_videostatus:
            start_new_file = vs.got_piece(piece)
            if start_new_file and not check_interests:
                self.downloader.check_interests()
                check_interests = True

        return True
    def complete(self, piece):
        if DEBUG:
            log('PiecePickerStreaming: complete:', piece)
        if not PiecePicker.complete(self, piece):
            return False
        if self.transporter:
            self.transporter.complete(piece)
        for request in self.outstanding_requests.keys():
            if request[0] == piece:
                del self.outstanding_requests[request]

        for d in self.peer_connections.itervalues():
            d['interesting'].pop(piece, 0)

        check_interests = False
        for vs in self.extra_videostatus:
            start_new_file = vs.got_piece(piece)
            if start_new_file and not check_interests:
                self.downloader.check_interests()
                check_interests = True

        return True
 def requested(self, *request):
     self.outstanding_requests[request] = time.time()
     return PiecePicker.requested(self, *request)
 def lost_peer(self, connection):
     PiecePicker.lost_peer(self, connection)
 def got_peer(self, connection):
     PiecePicker.got_peer(self, connection)
     self.peer_connections[connection]['interesting'] = odict()
 def lost_have(self, piece):
     PiecePicker.lost_have(self, piece)
 def got_peer(self, connection):
     PiecePicker.got_peer(self, connection)
     self.peer_connections[connection]['interesting'] = odict()
 def got_seed(self):
     self.maxhave = self.numpieces
     PiecePicker.got_seed(self)
 def requested(self, *request):
     self.outstanding_requests[request] = time.time()
     return PiecePicker.requested(self, *request)
 def lost_peer(self, connection):
     PiecePicker.lost_peer(self, connection)
 def got_seed(self):
     self.maxhave = self.numpieces
     PiecePicker.got_seed(self)
 def lost_have(self, piece):
     PiecePicker.lost_have(self, piece)