Fix rename webhook targeting using episodeId lookup
Found that rename events contain episodeId field which can be used to fetch specific episode details. Replaced complex episode data extraction with direct API call to /api/v3/episode/{episodeId} to get season/episode numbers for targeted processing.
This should resolve rename webhooks processing entire series instead of single episodes.
This commit is contained in:
+30
-45
@@ -152,54 +152,39 @@ async def sonarr_webhook(request: Request, background_tasks: BackgroundTasks, de
|
|||||||
if recent_renames:
|
if recent_renames:
|
||||||
# Take the most recent rename event
|
# Take the most recent rename event
|
||||||
latest_rename = recent_renames[0]
|
latest_rename = recent_renames[0]
|
||||||
print(f"DEBUG: Latest rename event keys: {list(latest_rename.keys())}")
|
print(f"DEBUG: Processing latest rename event")
|
||||||
print(f"DEBUG: Latest rename event full structure: {latest_rename}")
|
|
||||||
|
|
||||||
# Try different possible episode data locations
|
# Extract episodeId directly from the rename event
|
||||||
episode_info = latest_rename.get("episode", {})
|
episode_id = latest_rename.get("episodeId")
|
||||||
episode_file_info = latest_rename.get("episodeFile", {})
|
print(f"DEBUG: Found episodeId {episode_id} in rename event")
|
||||||
data_info = latest_rename.get("data", {})
|
|
||||||
|
|
||||||
print(f"DEBUG: Episode info: {episode_info}")
|
if episode_id:
|
||||||
print(f"DEBUG: EpisodeFile info: {episode_file_info}")
|
# Fetch episode details using the episodeId
|
||||||
print(f"DEBUG: Data info: {data_info}")
|
episode_detail_url = f"{config.sonarr_url}/api/v3/episode/{episode_id}"
|
||||||
|
episode_response = requests.get(episode_detail_url, headers={"X-Api-Key": os.environ.get("SONARR_API_KEY", "")}, timeout=10)
|
||||||
# Try to extract episode info from any available source
|
|
||||||
season_num = None
|
if episode_response.status_code == 200:
|
||||||
episode_num = None
|
episode_detail = episode_response.json()
|
||||||
episode_id = None
|
season_num = episode_detail.get("seasonNumber")
|
||||||
episode_title = None
|
episode_num = episode_detail.get("episodeNumber")
|
||||||
|
episode_title = episode_detail.get("title")
|
||||||
# Check episode object first
|
|
||||||
if episode_info:
|
print(f"DEBUG: Episode details - Season: {season_num}, Episode: {episode_num}, Title: {episode_title}")
|
||||||
season_num = episode_info.get("seasonNumber")
|
|
||||||
episode_num = episode_info.get("episodeNumber")
|
if season_num is not None and episode_num is not None:
|
||||||
episode_id = episode_info.get("id")
|
episodes_data = [{
|
||||||
episode_title = episode_info.get("title")
|
"seasonNumber": season_num,
|
||||||
|
"episodeNumber": episode_num,
|
||||||
# Check episodeFile object
|
"id": episode_id,
|
||||||
if not season_num and episode_file_info:
|
"title": episode_title
|
||||||
season_num = episode_file_info.get("seasonNumber")
|
}]
|
||||||
episode_num = episode_file_info.get("episodeNumber")
|
print(f"INFO: Successfully identified renamed episode: S{season_num:02d}E{episode_num:02d} - {episode_title}")
|
||||||
episode_id = episode_file_info.get("episodeId") or episode_file_info.get("id")
|
else:
|
||||||
|
print(f"DEBUG: Episode details missing season/episode numbers")
|
||||||
# Check data object
|
else:
|
||||||
if not season_num and data_info:
|
print(f"DEBUG: Failed to fetch episode details: {episode_response.status_code}")
|
||||||
season_num = data_info.get("seasonNumber")
|
|
||||||
episode_num = data_info.get("episodeNumber")
|
|
||||||
|
|
||||||
print(f"DEBUG: Extracted - Season: {season_num}, Episode: {episode_num}, ID: {episode_id}")
|
|
||||||
|
|
||||||
if season_num and episode_num:
|
|
||||||
episodes_data = [{
|
|
||||||
"seasonNumber": season_num,
|
|
||||||
"episodeNumber": episode_num,
|
|
||||||
"id": episode_id,
|
|
||||||
"title": episode_title
|
|
||||||
}]
|
|
||||||
print(f"INFO: Found recently renamed episode from history: S{season_num:02d}E{episode_num:02d}")
|
|
||||||
else:
|
else:
|
||||||
print(f"DEBUG: Could not extract episode data from rename event")
|
print(f"DEBUG: No episodeId found in rename event")
|
||||||
else:
|
else:
|
||||||
print(f"DEBUG: No recent rename events found in last hour")
|
print(f"DEBUG: No recent rename events found in last hour")
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user