This commit is contained in:
+26
-6
@@ -1468,12 +1468,14 @@ class MovieProcessor:
|
|||||||
class WebhookBatcher:
|
class WebhookBatcher:
|
||||||
"""Batches webhook events to avoid processing storms"""
|
"""Batches webhook events to avoid processing storms"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, nfo_manager=None):
|
||||||
self.pending: Dict[str, Dict] = {}
|
self.pending: Dict[str, Dict] = {}
|
||||||
self.timers: Dict[str, threading.Timer] = {}
|
self.timers: Dict[str, threading.Timer] = {}
|
||||||
self.processing: Set[str] = set()
|
self.processing: Set[str] = set()
|
||||||
self.lock = threading.Lock()
|
self.lock = threading.Lock()
|
||||||
self.executor = ThreadPoolExecutor(max_workers=config.max_concurrent)
|
self.executor = ThreadPoolExecutor(max_workers=config.max_concurrent)
|
||||||
|
# NFO manager for comprehensive IMDb detection
|
||||||
|
self.nfo_manager = nfo_manager
|
||||||
|
|
||||||
def add_webhook(self, key: str, webhook_data: Dict, media_type: str):
|
def add_webhook(self, key: str, webhook_data: Dict, media_type: str):
|
||||||
"""Add webhook to batch queue"""
|
"""Add webhook to batch queue"""
|
||||||
@@ -1527,11 +1529,29 @@ class WebhookBatcher:
|
|||||||
# CRITICAL: Validate that the path contains the expected IMDb ID for movies
|
# CRITICAL: Validate that the path contains the expected IMDb ID for movies
|
||||||
if media_type == 'movie':
|
if media_type == 'movie':
|
||||||
expected_imdb = key.replace('movie:', '') if key.startswith('movie:') else key
|
expected_imdb = key.replace('movie:', '') if key.startswith('movie:') else key
|
||||||
if expected_imdb not in path_str.lower():
|
|
||||||
_log("ERROR", f"BATCH VALIDATION FAILED: Expected IMDb {expected_imdb} not found in path {path_str}")
|
# Use comprehensive IMDb detection (directory, filenames, NFO files)
|
||||||
_log("ERROR", f"This prevents processing wrong movies due to batch corruption")
|
if self.nfo_manager:
|
||||||
return
|
detected_imdb = self.nfo_manager.find_movie_imdb_id(path_obj)
|
||||||
_log("DEBUG", f"Batch validation passed: IMDb {expected_imdb} found in path")
|
imdb_match = False
|
||||||
|
if detected_imdb:
|
||||||
|
# Compare with and without 'tt' prefix for flexibility
|
||||||
|
if detected_imdb == expected_imdb or detected_imdb.replace('tt', '') == expected_imdb.replace('tt', ''):
|
||||||
|
imdb_match = True
|
||||||
|
|
||||||
|
if not imdb_match:
|
||||||
|
_log("ERROR", f"BATCH VALIDATION FAILED: Expected IMDb {expected_imdb} not found via comprehensive detection in path {path_str}")
|
||||||
|
_log("ERROR", f"Detected IMDb: {detected_imdb}, Expected: {expected_imdb}")
|
||||||
|
_log("ERROR", f"This prevents processing wrong movies due to batch corruption")
|
||||||
|
return
|
||||||
|
_log("DEBUG", f"Batch validation passed: IMDb {expected_imdb} matches detected {detected_imdb}")
|
||||||
|
else:
|
||||||
|
# Fallback to simple string search if nfo_manager not available
|
||||||
|
if expected_imdb not in path_str.lower():
|
||||||
|
_log("ERROR", f"BATCH VALIDATION FAILED: Expected IMDb {expected_imdb} not found in path {path_str} (fallback mode)")
|
||||||
|
_log("ERROR", f"This prevents processing wrong movies due to batch corruption")
|
||||||
|
return
|
||||||
|
_log("DEBUG", f"Batch validation passed: IMDb {expected_imdb} found in path (fallback mode)")
|
||||||
|
|
||||||
# Process based on media type
|
# Process based on media type
|
||||||
if media_type == 'tv':
|
if media_type == 'tv':
|
||||||
|
|||||||
Reference in New Issue
Block a user