57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from . import parser
|
|
class Block:
|
|
"""Block object represents virtual chunk of chatdata.
|
|
|
|
Parameter:
|
|
---------
|
|
pos : int :
|
|
index of this block on block list.
|
|
|
|
first : int :
|
|
videoOffsetTimeMs of the first chat_data
|
|
(chat_data[0])
|
|
|
|
last : int :
|
|
videoOffsetTimeMs of the last chat_data.
|
|
(chat_data[-1])
|
|
|
|
this value increases as fetching chatdata progresses.
|
|
|
|
temp_last : int :
|
|
target videoOffsetTimeMs of last chat data for download,
|
|
equals to first videoOffsetTimeMs of next block.
|
|
when download worker reaches this offset, stop downloading.
|
|
|
|
continuation : str :
|
|
continuation param of last chat data.
|
|
|
|
chat_data : List
|
|
"""
|
|
def __init__(self, pos=0, first=0, last=0,
|
|
continuation='', chat_data=[]):
|
|
self.pos = pos
|
|
self.first = first
|
|
self.last = last
|
|
self.temp_last = 0
|
|
self.continuation = continuation
|
|
self.chat_data = chat_data
|
|
|
|
def start(self):
|
|
chats, cont = self._cut(self.chat_data, self.continuation, self.last)
|
|
self.chat_data = chats
|
|
return cont
|
|
|
|
def fill(self, chats, cont, fetched_last):
|
|
chats, cont = self._cut(chats, cont, fetched_last)
|
|
self.chat_data.extend(chats)
|
|
return cont
|
|
|
|
def _cut(self, chats, cont, fetched_last):
|
|
if fetched_last < self.temp_last or self.temp_last == -1:
|
|
return chats, cont
|
|
for i, line in enumerate(chats):
|
|
line_offset = parser.get_offset(line)
|
|
if line_offset >= self.temp_last:
|
|
self.last = line_offset
|
|
return chats[:i], None
|