This commit is contained in:
2025-12-10 07:24:25 +00:00
parent ac999dda59
commit 8a1cf6129d
2 changed files with 59 additions and 15 deletions

View File

@@ -71,6 +71,11 @@ class DownloadManager:
def add_to_queue(self, item_type: str, item_id: str):
task_id = f"{item_type}_{item_id}"
# Prevent duplicate tasks
if task_id in self.active_downloads:
return self.active_downloads[task_id]
task = {
"id": task_id,
"type": item_type,
@@ -93,19 +98,28 @@ class DownloadManager:
break
task_id = task["id"]
self.active_downloads[task_id]["status"] = "downloading"
# Ensure task is tracked in active_downloads
if task_id not in self.active_downloads:
self.active_downloads[task_id] = task
task["status"] = "downloading"
try:
self._process_download(task)
self.active_downloads[task_id]["status"] = "completed"
self.active_downloads[task_id]["progress"] = 100
task["status"] = "completed"
task["progress"] = 100
except Exception as e:
logger.error(f"Download failed: {e}")
self.active_downloads[task_id]["status"] = "failed"
self.active_downloads[task_id]["error"] = str(e)
task["status"] = "failed"
task["error"] = str(e)
finally:
# Move to history
self.history.append(self.active_downloads.pop(task_id))
# Only pop if the current task in active_downloads is the one we just processed
if task_id in self.active_downloads and self.active_downloads[task_id] is task:
self.history.append(self.active_downloads.pop(task_id))
else:
self.history.append(task)
self.queue.task_done()
def cancel_task(self, task_id: str):
@@ -158,14 +172,14 @@ class DownloadManager:
if key == "progress":
# For single track, this is the main progress
if task["type"] == "track":
self.active_downloads[task["id"]]["progress"] = value
task["progress"] = value
elif key == "name":
# Update status with current track name
self.active_downloads[task["id"]]["current_item"] = value
task["current_item"] = value
elif key == "list_progress":
# For albums/playlists, this is the main progress
if task["type"] != "track":
self.active_downloads[task["id"]]["progress"] = value
task["progress"] = value
mock_progress = MockProgressBars(update_task)