Deligate processing extra chat data to Block class

This commit is contained in:
taizan-hokuto
2020-02-03 22:01:54 +09:00
parent 4a8e353098
commit eaa7bdc8b6
2 changed files with 26 additions and 20 deletions

View File

@@ -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

View File

@@ -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