Deligate processing extra chat data to Block class
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
from . import parser
|
||||||
class Block:
|
class Block:
|
||||||
"""Block object represents virtual chunk of chatdata.
|
"""Block object represents virtual chunk of chatdata.
|
||||||
|
|
||||||
@@ -33,4 +34,23 @@ class Block:
|
|||||||
self.last = last
|
self.last = last
|
||||||
self.temp_last = 0
|
self.temp_last = 0
|
||||||
self.continuation = continuation
|
self.continuation = continuation
|
||||||
self.chat_data = chat_data
|
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
|
||||||
|
|||||||
@@ -15,27 +15,13 @@ class DownloadWorker:
|
|||||||
def __init__(self, fetch, block):
|
def __init__(self, fetch, block):
|
||||||
self.block = block
|
self.block = block
|
||||||
self.fetch = fetch
|
self.fetch = fetch
|
||||||
|
|
||||||
async def run(self, session):
|
async def run(self, session):
|
||||||
"""Remove extra chats just after ready_blocks(). """
|
"""Remove extra chats just after ready_blocks(). """
|
||||||
temp_last = self.block.temp_last
|
continuation = self.block.start()
|
||||||
self.block.chat_data, continuation = self.cut(
|
|
||||||
self.block.chat_data,
|
|
||||||
self.block.continuation,
|
|
||||||
self.block.last,
|
|
||||||
temp_last )
|
|
||||||
"""download loop """
|
"""download loop """
|
||||||
while continuation:
|
while continuation:
|
||||||
data, cont, fetched_last = await self.fetch(continuation, session)
|
chats, new_cont, fetched_last = await self.fetch(continuation, session)
|
||||||
data, continuation = self.cut(data, cont, fetched_last, temp_last)
|
continuation = self.block.fill(chats, new_cont, fetched_last )
|
||||||
self.block.chat_data.extend(data)
|
|
||||||
|
|
||||||
def cut(self, data, cont, fetched_last, temp_last):
|
|
||||||
"""Remove extra chats."""
|
|
||||||
if fetched_last < temp_last or temp_last == -1:
|
|
||||||
return data, cont
|
|
||||||
for i, line in enumerate(data):
|
|
||||||
line_offset = parser.get_offset(line)
|
|
||||||
if line_offset >= temp_last:
|
|
||||||
self.block.last = line_offset
|
|
||||||
return data[:i], None
|
|
||||||
Reference in New Issue
Block a user