refactor: refactor danmaku dumpers

This commit is contained in:
acgnhik 2022-07-23 10:18:05 +08:00
parent 442277173f
commit becfd7919f
2 changed files with 12 additions and 4 deletions

View File

@ -93,10 +93,13 @@ class DanmakuDumper(
def _do_enable(self) -> None:
self._stream_recorder.add_listener(self)
self._statistics.reset()
logger.debug('Enabled danmaku dumper')
def _do_disable(self) -> None:
self._stream_recorder.remove_listener(self)
asyncio.create_task(self._stop_dumping())
self._statistics.freeze()
logger.debug('Disabled danmaku dumper')
def set_live_start_time(self, time: int) -> None:
@ -122,6 +125,7 @@ class DanmakuDumper(
self._stream_recording_interrupted: bool = False
self._path = danmaku_path(video_path)
self._files.append(self._path)
await self._stop_dumping()
self._start_dumping()
async def on_video_file_completed(self, video_path: str) -> None:
@ -147,7 +151,9 @@ class DanmakuDumper(
self._create_dump_task()
async def _stop_dumping(self) -> None:
await self._cancel_dump_task()
if hasattr(self, '_dump_task'):
await self._cancel_dump_task()
del self._dump_task # type: ignore
def _create_dump_task(self) -> None:
self._dump_task = asyncio.create_task(self._do_dump())
@ -162,7 +168,6 @@ class DanmakuDumper(
async def _do_dump(self) -> None:
assert self._path is not None
logger.debug('Started dumping danmaku')
self._statistics.reset()
try:
async with DanmakuWriter(self._path) as writer:
@ -184,7 +189,6 @@ class DanmakuDumper(
logger.info(f"Danmaku file completed: '{self._path}'")
await self._emit('danmaku_file_completed', self._path)
logger.debug('Stopped dumping danmaku')
self._statistics.freeze()
async def _dumping_loop(self, writer: DanmakuWriter) -> None:
while True:

View File

@ -54,6 +54,7 @@ class RawDanmakuDumper(
def _do_disable(self) -> None:
self._stream_recorder.remove_listener(self)
asyncio.create_task(self._stop_dumping())
logger.debug('Disabled raw danmaku dumper')
async def on_video_file_created(
@ -61,6 +62,7 @@ class RawDanmakuDumper(
) -> None:
with self._lock:
self._path = raw_danmaku_path(video_path)
await self._stop_dumping()
self._start_dumping()
async def on_video_file_completed(self, video_path: str) -> None:
@ -71,7 +73,9 @@ class RawDanmakuDumper(
self._create_dump_task()
async def _stop_dumping(self) -> None:
await self._cancel_dump_task()
if hasattr(self, '_dump_task'):
await self._cancel_dump_task()
del self._dump_task # type: ignore
def _create_dump_task(self) -> None:
self._dump_task = asyncio.create_task(self._do_dump())