diff --git a/src/app/services/downloader.py b/src/app/services/downloader.py index 0aed984..b82c482 100644 --- a/src/app/services/downloader.py +++ b/src/app/services/downloader.py @@ -81,7 +81,15 @@ async def download_file_to_file(link: str, output: BytesIO) -> bool: @broker.task() -async def download(task_id: str, book_id: int, file_type: str) -> str | None: +async def download( + task_id: str, book_id: int, file_type: str, prev_task_id: str | None = None +) -> str | None: + if prev_task_id: + prev_task = AsyncTaskiqTask(prev_task_id, result_backend) + + while not (await prev_task.is_ready()): + await asyncio.sleep(0.1) + try: with tempfile.SpooledTemporaryFile() as temp_file: data = await _download_to_tmpfile(book_id, file_type, temp_file) diff --git a/src/app/services/task_creator.py b/src/app/services/task_creator.py index 53b84a5..b237c17 100644 --- a/src/app/services/task_creator.py +++ b/src/app/services/task_creator.py @@ -60,11 +60,16 @@ class TaskCreator: task_ids: list[str] = [] + prev_task_id = None + for book in books: if file_format not in book.available_types: continue - task = await download.kiq(str(task_id), book.id, file_format) + task = await download.kiq( + str(task_id), book.id, file_format, prev_task_id=prev_task_id + ) + prev_task_id = task.task_id task_ids.append(task.task_id) if len(task_ids) == 0: