fix: download status

This commit is contained in:
Lukas 2025-11-20 19:02:04 +01:00
parent cf503c8d77
commit 57da1f1272
4 changed files with 23 additions and 30 deletions

View File

@ -1,25 +1,5 @@
{ {
"pending": [ "pending": [
{
"id": "c1e7e4d3-fabd-4436-86de-89a612562ec7",
"serie_id": "highschool-dxd",
"serie_folder": "Highschool DxD",
"serie_name": "Highschool DxD",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-20T17:12:34.485109Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{ {
"id": "1c4ade94-0a9f-4b75-8ed7-ceb8995c6865", "id": "1c4ade94-0a9f-4b75-8ed7-ceb8995c6865",
"serie_id": "highschool-dxd", "serie_id": "highschool-dxd",
@ -983,5 +963,5 @@
], ],
"active": [], "active": [],
"failed": [], "failed": [],
"timestamp": "2025-11-20T17:12:34.486863+00:00" "timestamp": "2025-11-20T17:54:12.722000+00:00"
} }

View File

@ -33,6 +33,7 @@ class DownloadStatusEventArgs:
error: Optional[Exception] = None, error: Optional[Exception] = None,
eta: Optional[int] = None, eta: Optional[int] = None,
mbper_sec: Optional[float] = None, mbper_sec: Optional[float] = None,
item_id: Optional[str] = None,
): ):
""" """
Initialize download status event arguments. Initialize download status event arguments.
@ -47,6 +48,7 @@ class DownloadStatusEventArgs:
error: Optional error if status is "failed" error: Optional error if status is "failed"
eta: Estimated time remaining in seconds eta: Estimated time remaining in seconds
mbper_sec: Download speed in MB/s mbper_sec: Download speed in MB/s
item_id: Optional download queue item ID for tracking
""" """
self.serie_folder = serie_folder self.serie_folder = serie_folder
self.season = season self.season = season
@ -57,6 +59,7 @@ class DownloadStatusEventArgs:
self.error = error self.error = error
self.eta = eta self.eta = eta
self.mbper_sec = mbper_sec self.mbper_sec = mbper_sec
self.item_id = item_id
class ScanStatusEventArgs: class ScanStatusEventArgs:
"""Event arguments for scan status events.""" """Event arguments for scan status events."""
@ -203,6 +206,7 @@ class SeriesApp:
episode: int, episode: int,
key: str, key: str,
language: str = "German Dub", language: str = "German Dub",
item_id: Optional[str] = None,
) -> bool: ) -> bool:
""" """
Download an episode (async). Download an episode (async).
@ -213,6 +217,7 @@ class SeriesApp:
episode: Episode number episode: Episode number
key: Serie key key: Serie key
language: Language preference language: Language preference
item_id: Optional download queue item ID for progress tracking
Returns: Returns:
True if download succeeded, False otherwise True if download succeeded, False otherwise
@ -227,6 +232,7 @@ class SeriesApp:
episode=episode, episode=episode,
status="started", status="started",
message="Download started", message="Download started",
item_id=item_id,
) )
) )
@ -282,6 +288,7 @@ class SeriesApp:
status="completed", status="completed",
progress=1.0, progress=1.0,
message="Download completed successfully", message="Download completed successfully",
item_id=item_id,
) )
) )
else: else:
@ -297,6 +304,7 @@ class SeriesApp:
episode=episode, episode=episode,
status="failed", status="failed",
message="Download failed", message="Download failed",
item_id=item_id,
) )
) )
@ -321,6 +329,7 @@ class SeriesApp:
status="failed", status="failed",
error=e, error=e,
message=f"Download error: {str(e)}", message=f"Download error: {str(e)}",
item_id=item_id,
) )
) )

View File

@ -65,36 +65,45 @@ class AnimeService:
) )
return return
# Use item_id if available, otherwise fallback to constructing ID
progress_id = (
args.item_id
if args.item_id
else f"download_{args.serie_folder}_{args.season}_{args.episode}"
)
# Map SeriesApp download events to progress service # Map SeriesApp download events to progress service
if args.status == "started": if args.status == "started":
loop.create_task( loop.create_task(
self._progress_service.start_progress( self._progress_service.start_progress(
progress_id=f"download_{args.serie_folder}_{args.season}_{args.episode}", # noqa: E501 progress_id=progress_id,
progress_type=ProgressType.DOWNLOAD, progress_type=ProgressType.DOWNLOAD,
title=f"Downloading {args.serie_folder}", title=f"Downloading {args.serie_folder}",
message=f"S{args.season:02d}E{args.episode:02d}", message=f"S{args.season:02d}E{args.episode:02d}",
metadata={"item_id": args.item_id} if args.item_id else None,
) )
) )
elif args.status == "progress": elif args.status == "progress":
loop.create_task( loop.create_task(
self._progress_service.update_progress( self._progress_service.update_progress(
progress_id=f"download_{args.serie_folder}_{args.season}_{args.episode}", # noqa: E501 progress_id=progress_id,
current=int(args.progress), current=int(args.progress),
total=100, total=100,
message=args.message or "Downloading...", message=args.message or "Downloading...",
metadata={"item_id": args.item_id} if args.item_id else None,
) )
) )
elif args.status == "completed": elif args.status == "completed":
loop.create_task( loop.create_task(
self._progress_service.complete_progress( self._progress_service.complete_progress(
progress_id=f"download_{args.serie_folder}_{args.season}_{args.episode}", # noqa: E501 progress_id=progress_id,
message="Download completed", message="Download completed",
) )
) )
elif args.status == "failed": elif args.status == "failed":
loop.create_task( loop.create_task(
self._progress_service.fail_progress( self._progress_service.fail_progress(
progress_id=f"download_{args.serie_folder}_{args.season}_{args.episode}", # noqa: E501 progress_id=progress_id,
error_message=args.message or str(args.error), error_message=args.message or str(args.error),
) )
) )

View File

@ -236,12 +236,10 @@ class QueueManager {
try { try {
const response = await this.makeAuthenticatedRequest('/api/queue/status'); const response = await this.makeAuthenticatedRequest('/api/queue/status');
if (!response) { if (!response) {
console.warn('No response from queue status API');
return; return;
} }
const data = await response.json(); const data = await response.json();
console.log('Raw API response:', data);
// API returns nested structure with 'status' and 'statistics' // API returns nested structure with 'status' and 'statistics'
// Transform it to the expected flat structure // Transform it to the expected flat structure
@ -250,9 +248,6 @@ class QueueManager {
statistics: data.statistics statistics: data.statistics
}; };
console.log('Transformed queue data:', queueData);
console.log('Pending queue length:', queueData.pending_queue?.length);
this.updateQueueDisplay(queueData); this.updateQueueDisplay(queueData);
// Process any pending progress updates after queue is loaded // Process any pending progress updates after queue is loaded