Fix rename webhook targeting using episodeId lookup #39

Merged
sbcrumb merged 1 commits from sonarrissues into dev 2025-10-10 14:17:05 -04:00
2 changed files with 31 additions and 46 deletions
+1 -1
View File
@@ -1 +1 @@
2.0.18 2.0.19
+27 -42
View File
@@ -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 if episode_response.status_code == 200:
season_num = None episode_detail = episode_response.json()
episode_num = None season_num = episode_detail.get("seasonNumber")
episode_id = None episode_num = episode_detail.get("episodeNumber")
episode_title = None episode_title = episode_detail.get("title")
# Check episode object first print(f"DEBUG: Episode details - Season: {season_num}, Episode: {episode_num}, Title: {episode_title}")
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 season_num is not None and episode_num is not None:
if not season_num and episode_file_info: episodes_data = [{
season_num = episode_file_info.get("seasonNumber") "seasonNumber": season_num,
episode_num = episode_file_info.get("episodeNumber") "episodeNumber": episode_num,
episode_id = episode_file_info.get("episodeId") or episode_file_info.get("id") "id": episode_id,
"title": episode_title
# Check data object }]
if not season_num and data_info: print(f"INFO: Successfully identified renamed episode: S{season_num:02d}E{episode_num:02d} - {episode_title}")
season_num = data_info.get("seasonNumber") else:
episode_num = data_info.get("episodeNumber") print(f"DEBUG: Episode details missing season/episode numbers")
else:
print(f"DEBUG: Extracted - Season: {season_num}, Episode: {episode_num}, ID: {episode_id}") print(f"DEBUG: Failed to fetch episode details: {episode_response.status_code}")
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: