Skip to content

Commit 32e71b7

Browse files
committed
Fix webhook handling: update existing webhooks instead of failing
- If webhook with same URL exists, update it - If webhook with same name exists, update it with new URL - If update fails and name exists, create with unique name - Prevents 'name must be unique' errors when webhook already exists
1 parent 8eedc66 commit 32e71b7

1 file changed

Lines changed: 52 additions & 16 deletions

File tree

arr_webhook_utils.py

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -409,25 +409,61 @@ def setup_webhook_for_instance(arr_url: str, arr_api_key: str, bot_url: str, arr
409409
result["message"] = f"Connection successful. Webhook URL: {webhook_url}"
410410
return result
411411

412-
# Check if webhook already exists
413-
existing = get_existing_webhook(
412+
# Check if webhook already exists with the same URL
413+
existing_by_url = get_existing_webhook(
414414
arr_url, arr_api_key, webhook_url, arr_type)
415-
if existing:
416-
result["success"] = True
417-
result["message"] = f"Connection successful. Webhook already exists."
418-
result["webhook_created"] = False
415+
if existing_by_url:
416+
# Update existing webhook to ensure it's configured correctly
417+
update_result = update_webhook(
418+
arr_url, arr_api_key, existing_by_url.get('id'), webhook_url, arr_type, name
419+
)
420+
if update_result["success"]:
421+
result["success"] = True
422+
result["message"] = "Connection successful. Webhook already exists and was updated."
423+
result["webhook_created"] = False
424+
result["webhook_updated"] = True
425+
else:
426+
result["success"] = True
427+
result["message"] = f"Connection successful. Webhook exists but update failed: {update_result['message']}"
428+
result["webhook_created"] = False
429+
result["webhook_updated"] = False
419430
return result
420431

421-
# Create webhook
422-
webhook_result = create_webhook(
423-
arr_url, arr_api_key, webhook_url, arr_type, name)
424-
result["webhook_created"] = webhook_result["success"]
425-
426-
if webhook_result["success"]:
427-
result["success"] = True
428-
result["message"] = f"Connection successful and webhook created."
432+
# Check if a webhook with the same name exists (but different URL)
433+
webhook_name = name or "Plexbot"
434+
existing_by_name = get_webhook_by_name(arr_url, arr_api_key, webhook_name, arr_type)
435+
if existing_by_name:
436+
# Update the existing webhook with the same name to use our URL
437+
update_result = update_webhook(
438+
arr_url, arr_api_key, existing_by_name.get('id'), webhook_url, arr_type, name
439+
)
440+
if update_result["success"]:
441+
result["success"] = True
442+
result["message"] = "Connection successful. Updated existing webhook with new URL."
443+
result["webhook_created"] = False
444+
result["webhook_updated"] = True
445+
else:
446+
# If update fails, try creating with a unique name
447+
unique_name = f"{webhook_name} ({arr_type.capitalize()})"
448+
webhook_result = create_webhook(arr_url, arr_api_key, webhook_url, arr_type, unique_name)
449+
result["webhook_created"] = webhook_result["success"]
450+
if webhook_result["success"]:
451+
result["success"] = True
452+
result["message"] = f"Connection successful and webhook created as '{unique_name}'."
453+
else:
454+
result["success"] = False
455+
result["message"] = f"Connection successful but webhook creation failed: {webhook_result['message']}"
429456
else:
430-
result["success"] = False
431-
result["message"] = f"Connection successful but webhook creation failed: {webhook_result['message']}"
457+
# Create new webhook
458+
webhook_result = create_webhook(
459+
arr_url, arr_api_key, webhook_url, arr_type, name)
460+
result["webhook_created"] = webhook_result["success"]
461+
462+
if webhook_result["success"]:
463+
result["success"] = True
464+
result["message"] = "Connection successful and webhook created."
465+
else:
466+
result["success"] = False
467+
result["message"] = f"Connection successful but webhook creation failed: {webhook_result['message']}"
432468

433469
return result

0 commit comments

Comments
 (0)