fix: fix webinterface broken when manual scan
Local Docker Build (Dev) / build-dev (push) Successful in 4s
Local Docker Build (Dev) / build-dev (push) Successful in 4s
This commit is contained in:
@@ -4,6 +4,7 @@ FastAPI routes for NFOGuard - extracted from main nfoguard.py for modular archit
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from fastapi import HTTPException, BackgroundTasks, Request
|
from fastapi import HTTPException, BackgroundTasks, Request
|
||||||
@@ -584,16 +585,23 @@ async def manual_scan(background_tasks: BackgroundTasks, path: Optional[str] = N
|
|||||||
else:
|
else:
|
||||||
# Full series processing - scan subdirectories
|
# Full series processing - scan subdirectories
|
||||||
import re
|
import re
|
||||||
|
tv_count = 0
|
||||||
for item in scan_path.iterdir():
|
for item in scan_path.iterdir():
|
||||||
if (item.is_dir() and
|
if (item.is_dir() and
|
||||||
not item.name.lower().startswith('season') and
|
not item.name.lower().startswith('season') and
|
||||||
not re.match(r'^season\s+\d+$', item.name, re.IGNORECASE) and
|
not re.match(r'^season\s+\d+$', item.name, re.IGNORECASE) and
|
||||||
nfo_manager.parse_imdb_from_path(item)):
|
nfo_manager.parse_imdb_from_path(item)):
|
||||||
|
tv_count += 1
|
||||||
try:
|
try:
|
||||||
tv_processor.process_series(item)
|
tv_processor.process_series(item)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"ERROR: Failed processing TV series {item}: {e}")
|
print(f"ERROR: Failed processing TV series {item}: {e}")
|
||||||
|
|
||||||
|
# Yield control every 5 TV series to allow other requests
|
||||||
|
if tv_count % 5 == 0:
|
||||||
|
await asyncio.sleep(0.1) # 100ms yield to process other requests
|
||||||
|
print(f"INFO: Processed {tv_count} TV series, yielding to other requests...")
|
||||||
|
|
||||||
if scan_type in ["both", "movies"] and scan_path in config.movie_paths:
|
if scan_type in ["both", "movies"] and scan_path in config.movie_paths:
|
||||||
print(f"INFO: Scanning movies in: {scan_path}")
|
print(f"INFO: Scanning movies in: {scan_path}")
|
||||||
movie_count = 0
|
movie_count = 0
|
||||||
@@ -605,6 +613,12 @@ async def manual_scan(background_tasks: BackgroundTasks, path: Optional[str] = N
|
|||||||
movie_processor.process_movie(item)
|
movie_processor.process_movie(item)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"ERROR: Failed processing movie {item}: {e}")
|
print(f"ERROR: Failed processing movie {item}: {e}")
|
||||||
|
|
||||||
|
# Yield control every 10 movies to allow other requests (webhooks, web interface)
|
||||||
|
if movie_count % 10 == 0:
|
||||||
|
await asyncio.sleep(0.1) # 100ms yield to process other requests
|
||||||
|
print(f"INFO: Processed {movie_count} movies, yielding to other requests...")
|
||||||
|
|
||||||
print(f"INFO: Completed movie scan: {movie_count} movies processed in {scan_path}")
|
print(f"INFO: Completed movie scan: {movie_count} movies processed in {scan_path}")
|
||||||
|
|
||||||
background_tasks.add_task(run_scan)
|
background_tasks.add_task(run_scan)
|
||||||
|
|||||||
Reference in New Issue
Block a user