Example #1
0
    def run(self):
        self.state = 'reading'
        self.emit('reading')
        self.on_open.set(True)

        last_progress = None

        for chunk in self.response.iter_content(self.chunk_size):
            self.buffer.extend(chunk)
            self.emit('received', len(chunk), __suppress=True)

            log.log(logging.TRACE, '[%s] [%s] Received chunk - len(chunk): %s',
                    self.track.uri, self.stream_num, len(chunk))

            last_progress = log_progress(self,
                                         '[%s]     Reading' % self.stream_num,
                                         len(self.buffer), last_progress)

            self.on_reading.wait()

        self.state = 'buffered'
        self.emit('buffered')
Example #2
0
    def run(self):
        self.state = 'reading'
        self.emit('reading')
        self.on_open.set(True)

        last_progress = None

        for chunk in self.response.iter_content(self.chunk_size):
            self.buffer.extend(chunk)
            self.emit('received', len(chunk), __suppress=True)

            log.log(
                logging.TRACE,
                '[%s] [%s] Received chunk - len(chunk): %s',
                self.track.uri, self.stream_num, len(chunk)
            )

            last_progress = log_progress(self, '[%s]     Reading' % self.stream_num, len(self.buffer), last_progress)

            self.on_reading.wait()

        self.state = 'buffered'
        self.emit('buffered')
Example #3
0
    def iter(self, c_range):
        """
        :type c_range: plugin.range.ContentRange
        """
        with self.request_lock:
            num = self.request_seq
            self.request_seq += 1

        position = 0
        end = self.content_range.end + 1

        last_progress = None
        ev_received = Event()

        @self.on(['received', 'buffered'])
        def on_received(*args):
            ev_received.set()

        if c_range:
            position = c_range.start - self.content_range.start
            end = (c_range.end - self.content_range.start) + 1

            log.info(
                '[%s] [%s:%s] Streaming - c_range: %s, position: %s, end: %s',
                self.track.uri, self.stream_num, num, c_range, position, end)

        while position < self.content_length:
            chunk_size = end - position

            # Clamp to maximum `chunk_size`
            if chunk_size > self.chunk_size:
                chunk_size = self.chunk_size

            # Check if range has reached the end
            if not chunk_size:
                log.debug('[%s] [%s:%s] Range complete', self.track.uri,
                          self.stream_num, num)
                break

            chunk = self.buffer[position:position + chunk_size]

            if chunk:
                log.log(logging.TRACE,
                        '[%s] [%s:%s] Sending chunk - len(buffer[%s:%s]): %s',
                        self.track.uri, self.stream_num, num, position,
                        position + chunk_size, len(chunk))

                last_progress = log_progress(self,
                                             '[%s:%s] Streaming' %
                                             (self.stream_num, num),
                                             position,
                                             last_progress,
                                             length=end)
                position += len(chunk)
                yield str(chunk)
            elif self.state != 'buffered':
                log.log(logging.TRACE, '[%s] [%s:%s] Waiting for buffer',
                        self.track.uri, self.stream_num, num)

                ev_received.clear()
                ev_received.wait()
            else:
                log.debug('[%s] [%s:%s] Buffer doesn\'t contain range [%s:%s]',
                          self.track.uri, self.stream_num, num, position,
                          position + chunk_size)
                break

        self.off('received', on_received)\
            .off('buffered', on_received)

        log.info('[%s] [%s:%s] Complete', self.track.uri, self.stream_num, num)
Example #4
0
    def iter(self, c_range):
        """
        :type c_range: plugin.range.ContentRange
        """
        with self.request_lock:
            num = self.request_seq
            self.request_seq += 1

        position = 0
        end = self.content_range.end + 1

        last_progress = None
        ev_received = Event()

        @self.on(['received', 'buffered'])
        def on_received(*args):
            ev_received.set()

        if c_range:
            position = c_range.start - self.content_range.start
            end = (c_range.end - self.content_range.start) + 1

            log.info(
                '[%s] [%s:%s] Streaming - c_range: %s, position: %s, end: %s',
                self.track.uri, self.stream_num,
                num, c_range, position, end
            )

        while position < self.content_length:
            chunk_size = end - position

            # Clamp to maximum `chunk_size`
            if chunk_size > self.chunk_size:
                chunk_size = self.chunk_size

            # Check if range has reached the end
            if not chunk_size:
                log.debug(
                    '[%s] [%s:%s] Range complete',
                    self.track.uri, self.stream_num, num
                )
                break

            chunk = self.buffer[position:position + chunk_size]

            if chunk:
                log.log(
                    logging.TRACE,
                    '[%s] [%s:%s] Sending chunk - len(buffer[%s:%s]): %s',
                    self.track.uri, self.stream_num, num,
                    position, position + chunk_size,
                    len(chunk)
                )

                last_progress = log_progress(
                    self, '[%s:%s] Streaming' % (self.stream_num, num),
                    position, last_progress, length=end
                )
                position += len(chunk)
                yield str(chunk)
            elif self.state != 'buffered':
                log.log(
                    logging.TRACE,
                    '[%s] [%s:%s] Waiting for buffer',
                    self.track.uri, self.stream_num, num
                )

                ev_received.clear()
                ev_received.wait()
            else:
                log.debug(
                    '[%s] [%s:%s] Buffer doesn\'t contain range [%s:%s]',
                    self.track.uri, self.stream_num, num,
                    position, position + chunk_size
                )
                break

        self.off('received', on_received)\
            .off('buffered', on_received)

        log.info(
            '[%s] [%s:%s] Complete',
            self.track.uri, self.stream_num,
            num
        )