fix: reset queue progress flag after queue completes
- Reset _queue_progress_initialized after each queue run so the next run re-creates the 'download_queue' progress entry - Handle 'already exists' ProgressServiceError in _init_queue_progress as a no-op success to cover concurrent-start edge cases - Guard stop_downloads() progress update to avoid crashing when the entry was never created
This commit is contained in:
@@ -395,7 +395,16 @@ class DownloadService:
|
||||
)
|
||||
self._queue_progress_initialized = True
|
||||
except Exception as e:
|
||||
logger.error("Failed to initialize queue progress: %s", e)
|
||||
# If the entry already exists (e.g. from a concurrent task),
|
||||
# treat that as success — the progress is usable.
|
||||
from src.server.services.progress_service import ProgressServiceError
|
||||
if isinstance(e, ProgressServiceError) and "already exists" in str(e):
|
||||
logger.debug(
|
||||
"Queue progress already initialized by concurrent task"
|
||||
)
|
||||
self._queue_progress_initialized = True
|
||||
else:
|
||||
logger.error("Failed to initialize queue progress: %s", e)
|
||||
|
||||
def _add_to_pending_queue(
|
||||
self, item: DownloadItem, front: bool = False
|
||||
@@ -759,8 +768,12 @@ class DownloadService:
|
||||
"queue_status": queue_status.model_dump(mode="json")
|
||||
},
|
||||
)
|
||||
# Reset flag so next queue run re-creates the progress entry
|
||||
self._queue_progress_initialized = False
|
||||
else:
|
||||
logger.info("Queue processing stopped by user")
|
||||
# Reset flag so next queue run re-creates the progress entry
|
||||
self._queue_progress_initialized = False
|
||||
|
||||
async def start_next_download(self) -> Optional[str]:
|
||||
"""Legacy method - redirects to start_queue_processing.
|
||||
@@ -781,18 +794,21 @@ class DownloadService:
|
||||
self._is_stopped = True
|
||||
logger.info("Download processing stopped")
|
||||
|
||||
# Notify via progress service
|
||||
queue_status = await self.get_queue_status()
|
||||
await self._progress_service.update_progress(
|
||||
progress_id="download_queue",
|
||||
message="Queue processing stopped",
|
||||
metadata={
|
||||
"action": "queue_stopped",
|
||||
"is_stopped": True,
|
||||
"queue_status": queue_status.model_dump(mode="json"),
|
||||
},
|
||||
force_broadcast=True,
|
||||
)
|
||||
# Notify via progress service (guard against entry not existing)
|
||||
try:
|
||||
queue_status = await self.get_queue_status()
|
||||
await self._progress_service.update_progress(
|
||||
progress_id="download_queue",
|
||||
message="Queue processing stopped",
|
||||
metadata={
|
||||
"action": "queue_stopped",
|
||||
"is_stopped": True,
|
||||
"queue_status": queue_status.model_dump(mode="json"),
|
||||
},
|
||||
force_broadcast=True,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.warning("Could not update queue progress on stop: %s", e)
|
||||
|
||||
async def get_queue_status(self) -> QueueStatus:
|
||||
"""Get current status of all queues.
|
||||
|
||||
Reference in New Issue
Block a user