Fix movie webhook processing and organize NFOGuard fields
Local Docker Build (Dev) / build-dev (push) Successful in 34s
Local Docker Build (Dev) / build-dev (push) Successful in 34s
- Fix WebhookBatcher missing nfo_manager attribute that caused movie processing errors - Move NFOGuard comment from top to bottom of episode NFOs with other NFOGuard fields - All NFOGuard additions now grouped together at bottom for better organization 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+5
-11
@@ -742,22 +742,16 @@ class NFOManager:
|
|||||||
lockdata = ET.SubElement(episode, "lockdata")
|
lockdata = ET.SubElement(episode, "lockdata")
|
||||||
lockdata.text = "true"
|
lockdata.text = "true"
|
||||||
|
|
||||||
# Add NFOGuard comment at the beginning
|
# Add NFOGuard comment at the bottom with other NFOGuard fields
|
||||||
comment_text = f" Created by {self.manager_brand} - Source: {source} "
|
nfoguard_comment = ET.Comment(f" Created by {self.manager_brand} - Source: {source} ")
|
||||||
|
episode.append(nfoguard_comment)
|
||||||
|
|
||||||
# Write file with proper formatting
|
# Write file with proper formatting
|
||||||
tree = ET.ElementTree(episode)
|
tree = ET.ElementTree(episode)
|
||||||
ET.indent(tree, space=" ", level=0)
|
ET.indent(tree, space=" ", level=0)
|
||||||
|
|
||||||
# Write to string first to add comment
|
# Write to file normally (ET will handle the comment properly)
|
||||||
xml_str = ET.tostring(episode, encoding='unicode')
|
tree.write(nfo_path, encoding='utf-8', xml_declaration=True)
|
||||||
|
|
||||||
# Add XML declaration and comment
|
|
||||||
full_xml = f'<?xml version="1.0" encoding="utf-8"?>\n<!--{comment_text}-->\n{xml_str}'
|
|
||||||
|
|
||||||
# Write to file
|
|
||||||
with open(nfo_path, 'w', encoding='utf-8') as f:
|
|
||||||
f.write(full_xml)
|
|
||||||
|
|
||||||
print(f"✅ Successfully created/updated episode NFO: {nfo_path}")
|
print(f"✅ Successfully created/updated episode NFO: {nfo_path}")
|
||||||
print(f" S{season_num:02d}E{episode_num:02d}, Aired: {aired}, Date Added: {dateadded}")
|
print(f" S{season_num:02d}E{episode_num:02d}, Aired: {aired}, Date Added: {dateadded}")
|
||||||
|
|||||||
+3
-2
@@ -1562,12 +1562,13 @@ 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: NFOManager):
|
||||||
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)
|
||||||
|
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"""
|
||||||
@@ -1720,7 +1721,7 @@ nfo_manager = NFOManager(config.manager_brand, config.debug)
|
|||||||
path_mapper = PathMapper(config) # FIXED: Pass config to PathMapper
|
path_mapper = PathMapper(config) # FIXED: Pass config to PathMapper
|
||||||
tv_processor = TVProcessor(db, nfo_manager, path_mapper)
|
tv_processor = TVProcessor(db, nfo_manager, path_mapper)
|
||||||
movie_processor = MovieProcessor(db, nfo_manager, path_mapper)
|
movie_processor = MovieProcessor(db, nfo_manager, path_mapper)
|
||||||
batcher = WebhookBatcher()
|
batcher = WebhookBatcher(nfo_manager)
|
||||||
|
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
# Webhook Handlers
|
# Webhook Handlers
|
||||||
|
|||||||
Reference in New Issue
Block a user