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:
+21
-36
@@ -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}")
|
||||
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)
|
||||
|
||||
# Try to extract episode info from any available source
|
||||
season_num = None
|
||||
episode_num = None
|
||||
episode_id = None
|
||||
episode_title = None
|
||||
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")
|
||||
|
||||
# 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")
|
||||
print(f"DEBUG: Episode details - Season: {season_num}, Episode: {episode_num}, Title: {episode_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:
|
||||
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: Found recently renamed episode from history: S{season_num:02d}E{episode_num:02d}")
|
||||
print(f"INFO: Successfully identified renamed episode: S{season_num:02d}E{episode_num:02d} - {episode_title}")
|
||||
else:
|
||||
print(f"DEBUG: Could not extract episode data from rename event")
|
||||
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: No episodeId found in rename event")
|
||||
else:
|
||||
print(f"DEBUG: No recent rename events found in last hour")
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user