This commit is contained in:
+73
-1
@@ -1573,7 +1573,79 @@ def register_web_routes(app, dependencies):
|
||||
@app.post("/api/bulk/update-source")
|
||||
async def api_bulk_update_source(media_type: str, old_source: str, new_source: str):
|
||||
return {"error": "Bulk operations not available in web container. Use core container on port 8085."}
|
||||
|
||||
|
||||
@app.post("/api/episodes/bulk-update-dates")
|
||||
async def api_bulk_update_episode_dates(request: Request):
|
||||
"""Bulk update episode dates"""
|
||||
try:
|
||||
data = await request.json()
|
||||
episodes = data.get('episodes', [])
|
||||
date_source = data.get('date_source', 'airdate')
|
||||
custom_date = data.get('custom_date')
|
||||
|
||||
if not episodes:
|
||||
return {"success": False, "message": "No episodes provided"}
|
||||
|
||||
db = dependencies["db"]
|
||||
sonarr = dependencies.get("sonarr_client")
|
||||
|
||||
updated_count = 0
|
||||
failed_count = 0
|
||||
|
||||
for ep in episodes:
|
||||
imdb_id = ep.get('imdb_id')
|
||||
season = ep.get('season')
|
||||
episode = ep.get('episode')
|
||||
|
||||
if not all([imdb_id, season is not None, episode is not None]):
|
||||
failed_count += 1
|
||||
continue
|
||||
|
||||
try:
|
||||
dateadded = None
|
||||
source = "manual"
|
||||
|
||||
if date_source == 'airdate':
|
||||
# Get airdate from Sonarr
|
||||
if sonarr:
|
||||
episode_data = sonarr.get_episode(imdb_id, season, episode)
|
||||
if episode_data and episode_data.get('airDateUtc'):
|
||||
dateadded = episode_data['airDateUtc']
|
||||
source = "sonarr:airdate"
|
||||
elif date_source == 'import':
|
||||
# Get import date from Sonarr history
|
||||
if sonarr:
|
||||
import_date = sonarr.get_episode_import_date(imdb_id, season, episode)
|
||||
if import_date:
|
||||
dateadded = import_date
|
||||
source = "sonarr:import"
|
||||
elif date_source == 'custom':
|
||||
# Use custom date
|
||||
if custom_date:
|
||||
dateadded = custom_date
|
||||
source = "manual:custom"
|
||||
|
||||
if dateadded:
|
||||
db.upsert_episode_dates(imdb_id, season, episode, dateadded, source)
|
||||
updated_count += 1
|
||||
else:
|
||||
failed_count += 1
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error updating episode {imdb_id} S{season:02d}E{episode:02d}: {e}")
|
||||
failed_count += 1
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"updated": updated_count,
|
||||
"failed": failed_count,
|
||||
"message": f"Updated {updated_count} episode(s), {failed_count} failed"
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Bulk update error: {e}")
|
||||
return {"success": False, "message": str(e)}
|
||||
|
||||
# Reports
|
||||
@app.get("/api/reports/missing-dates")
|
||||
async def api_missing_dates_report():
|
||||
|
||||
Reference in New Issue
Block a user