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:
2025-10-10 14:16:05 -04:00
parent ace671ab08
commit d6c1b73959
2 changed files with 31 additions and 46 deletions
+1 -1
View File
@@ -1 +1 @@
2.0.18
2.0.19
+30 -45
View File
@@ -152,54 +152,39 @@ async def sonarr_webhook(request: Request, background_tasks: BackgroundTasks, de
if recent_renames:
# Take the most recent rename event
latest_rename = recent_renames[0]
print(f"DEBUG: Latest rename event keys: {list(latest_rename.keys())}")
print(f"DEBUG: Latest rename event full structure: {latest_rename}")
print(f"DEBUG: Processing latest rename event")
# Try different possible episode data locations
episode_info = latest_rename.get("episode", {})
episode_file_info = latest_rename.get("episodeFile", {})
data_info = latest_rename.get("data", {})
# Extract episodeId directly from the rename event
episode_id = latest_rename.get("episodeId")
print(f"DEBUG: Found episodeId {episode_id} in rename event")
print(f"DEBUG: Episode info: {episode_info}")
print(f"DEBUG: EpisodeFile info: {episode_file_info}")
print(f"DEBUG: Data info: {data_info}")
# Try to extract episode info from any available source
season_num = None
episode_num = None
episode_id = None
episode_title = None
# Check episode object first
if episode_info:
season_num = episode_info.get("seasonNumber")
episode_num = episode_info.get("episodeNumber")
episode_id = episode_info.get("id")
episode_title = episode_info.get("title")
# Check episodeFile object
if not season_num and episode_file_info:
season_num = episode_file_info.get("seasonNumber")
episode_num = episode_file_info.get("episodeNumber")
episode_id = episode_file_info.get("episodeId") or episode_file_info.get("id")
# Check data object
if not season_num and data_info:
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}")
if episode_id:
# Fetch episode details using the episodeId
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)
if episode_response.status_code == 200:
episode_detail = episode_response.json()
season_num = episode_detail.get("seasonNumber")
episode_num = episode_detail.get("episodeNumber")
episode_title = episode_detail.get("title")
print(f"DEBUG: Episode details - Season: {season_num}, Episode: {episode_num}, Title: {episode_title}")
if season_num is not None and episode_num is not None:
episodes_data = [{
"seasonNumber": season_num,
"episodeNumber": episode_num,
"id": episode_id,
"title": episode_title
}]
print(f"INFO: Successfully identified renamed episode: S{season_num:02d}E{episode_num:02d} - {episode_title}")
else:
print(f"DEBUG: Episode details missing season/episode numbers")
else:
print(f"DEBUG: Failed to fetch episode details: {episode_response.status_code}")
else:
print(f"DEBUG: Could not extract episode data from rename event")
print(f"DEBUG: No episodeId found in rename event")
else:
print(f"DEBUG: No recent rename events found in last hour")
else: