Updated player.py and ssl_utils.py

parent 2a789078
......@@ -121,7 +121,8 @@ class OverlayWebChannel(QObject):
return
# Debug what data is being sent to JavaScript
logger.debug(f"OverlayWebChannel sending to JavaScript: {cleaned_data}")
data_keys = list(cleaned_data.keys()) if isinstance(cleaned_data, dict) else []
logger.debug(f"OverlayWebChannel sending to JavaScript: {len(cleaned_data)} items with keys: {data_keys}")
logger.debug(f"Data type: {type(cleaned_data)}, Data is dict: {isinstance(cleaned_data, dict)}")
with QMutexLocker(self.mutex):
......@@ -129,7 +130,8 @@ class OverlayWebChannel(QObject):
# Add additional validation just before emit
if cleaned_data and isinstance(cleaned_data, dict) and any(v is not None for v in cleaned_data.values()):
self.dataUpdated.emit(cleaned_data)
logger.debug(f"Signal emitted successfully with data: {cleaned_data}")
data_keys = list(cleaned_data.keys()) if isinstance(cleaned_data, dict) else []
logger.debug(f"Signal emitted successfully with {len(cleaned_data)} data items: {data_keys}")
else:
logger.warning(f"Prevented emission of invalid data: {cleaned_data}")
......@@ -323,9 +325,9 @@ class OverlayWebView(QWebEngineView):
def load_template(self, template_name: str):
"""Load a specific template file, prioritizing uploaded templates"""
try:
logger.error(f"GREEN SCREEN DEBUG: Starting template load - {template_name}")
logger.error(f"GREEN SCREEN DEBUG: Current page URL before load: {self.url().toString()}")
logger.error(f"GREEN SCREEN DEBUG: WebEngine view visible: {self.isVisible()}")
logger.debug(f"GREEN SCREEN DEBUG: Starting template load - {template_name}")
logger.debug(f"GREEN SCREEN DEBUG: Current page URL before load: {self.url().toString()}")
logger.debug(f"GREEN SCREEN DEBUG: WebEngine view visible: {self.isVisible()}")
# CRITICAL FIX: Store visibility state before template load
was_visible = self.isVisible()
......@@ -362,13 +364,13 @@ class OverlayWebView(QWebEngineView):
return
if template_path and template_path.exists():
logger.error(f"GREEN SCREEN DEBUG: About to load template file: {template_path}")
logger.error(f"GREEN SCREEN DEBUG: Template source: {template_source}")
logger.debug(f"GREEN SCREEN DEBUG: About to load template file: {template_path}")
logger.debug(f"GREEN SCREEN DEBUG: Template source: {template_source}")
# Check WebEngine state before load
page = self.page()
if page:
logger.error(f"GREEN SCREEN DEBUG: Page background color before load: {page.backgroundColor()}")
logger.debug(f"GREEN SCREEN DEBUG: Page background color before load: {page.backgroundColor()}")
self.load(QUrl.fromLocalFile(str(template_path)))
self.current_template = template_name
......@@ -383,7 +385,7 @@ class OverlayWebView(QWebEngineView):
from PyQt6.QtCore import QTimer
QTimer.singleShot(100, lambda: self._ensure_overlay_visibility_post_load(was_visible))
logger.error(f"GREEN SCREEN DEBUG: Template load initiated - {template_path}")
logger.debug(f"GREEN SCREEN DEBUG: Template load initiated - {template_path}")
logger.info(f"Loaded template: {template_path} (source: {template_source})")
else:
logger.error(f"No template found: {template_name}")
......@@ -391,7 +393,7 @@ class OverlayWebView(QWebEngineView):
self._load_fallback_overlay()
except Exception as e:
logger.error(f"GREEN SCREEN DEBUG: Template load failed: {e}")
logger.debug(f"GREEN SCREEN DEBUG: Template load failed: {e}")
logger.error(f"Failed to load template {template_name}: {e}")
self._load_fallback_overlay()
......@@ -444,10 +446,10 @@ class OverlayWebView(QWebEngineView):
def reload_current_template(self):
"""Reload the current template"""
logger.error(f"GREEN SCREEN DEBUG: Reloading current template - {self.current_template}")
logger.error(f"GREEN SCREEN DEBUG: WebEngine state before reload - visible: {self.isVisible()}")
logger.debug(f"GREEN SCREEN DEBUG: Reloading current template - {self.current_template}")
logger.debug(f"GREEN SCREEN DEBUG: WebEngine state before reload - visible: {self.isVisible()}")
self.load_template(self.current_template)
logger.error(f"GREEN SCREEN DEBUG: Current template reload initiated")
logger.debug(f"GREEN SCREEN DEBUG: Current template reload initiated")
def get_available_templates(self) -> List[str]:
"""Get list of available template files from both directories"""
......@@ -957,6 +959,29 @@ class PlayerWindow(QMainWindow):
logger.info("PlayerWindow initialized")
def _get_web_server_base_url(self) -> str:
"""Get the web server base URL for API requests"""
try:
# Default web server configuration - matches main.py defaults
host = "127.0.0.1" # Default host
port = 5001 # Default port
# Try to get web server settings if available
if hasattr(self, '_message_bus') and self._message_bus:
# Check if we can get web server info from message bus or settings
# For now, use defaults since we don't have direct access to web settings
pass
# Construct base URL
base_url = f"http://{host}:{port}"
logger.debug(f"Web server base URL determined as: {base_url}")
return base_url
except Exception as e:
logger.error(f"Failed to determine web server base URL: {e}")
# Return default fallback
return "http://127.0.0.1:5001"
def setup_ui(self):
"""Setup enhanced window UI"""
self.setWindowTitle("MbetterClient - PyQt6 Video Player")
......@@ -1077,19 +1102,19 @@ class PlayerWindow(QMainWindow):
# Check video state during overlay positioning
if hasattr(self, 'media_player'):
video_state = self.media_player.playbackState()
logger.error(f"GREEN SCREEN DEBUG: Video state during overlay sync: {video_state}")
logger.debug(f"GREEN SCREEN DEBUG: Video state during overlay sync: {video_state}")
# Get main window geometry
main_geo = self.geometry()
logger.debug(f"Main window geometry: {main_geo}")
logger.error(f"GREEN SCREEN DEBUG: Syncing overlay position - main geometry: {main_geo}")
logger.debug(f"GREEN SCREEN DEBUG: Syncing overlay position - main geometry: {main_geo}")
# CRITICAL FIX: Store overlay visibility state before sync
overlay_was_visible = self.overlay_window.isVisible()
# Check overlay window state before positioning
logger.error(f"GREEN SCREEN DEBUG: Overlay window before sync - visible: {overlay_was_visible}")
logger.error(f"GREEN SCREEN DEBUG: Overlay window before sync - geometry: {self.overlay_window.geometry()}")
logger.debug(f"GREEN SCREEN DEBUG: Overlay window before sync - visible: {overlay_was_visible}")
logger.debug(f"GREEN SCREEN DEBUG: Overlay window before sync - geometry: {self.overlay_window.geometry()}")
# Position overlay window exactly over main window
self.overlay_window.setGeometry(main_geo)
......@@ -1106,10 +1131,10 @@ class PlayerWindow(QMainWindow):
logger.error(f"GREEN SCREEN FIX: WebEngine overlay visibility recovered during sync")
logger.debug(f"Overlay window positioned at: {self.overlay_window.geometry()}")
logger.error(f"GREEN SCREEN DEBUG: Overlay window after sync - geometry: {self.overlay_window.geometry()}")
logger.debug(f"GREEN SCREEN DEBUG: Overlay window after sync - geometry: {self.overlay_window.geometry()}")
except Exception as e:
logger.error(f"GREEN SCREEN DEBUG: Overlay sync failed: {e}")
logger.debug(f"GREEN SCREEN DEBUG: Overlay sync failed: {e}")
logger.error(f"Failed to sync overlay position: {e}")
def resizeEvent(self, event):
......@@ -1673,7 +1698,8 @@ class PlayerWindow(QMainWindow):
# Unknown property, pass through if not null
cleaned_data[key] = value
logger.debug(f"Cleaned overlay data: {cleaned_data}")
data_keys = list(cleaned_data.keys()) if isinstance(cleaned_data, dict) else []
logger.debug(f"Cleaned overlay data: {len(cleaned_data)} items with keys: {data_keys}")
return cleaned_data
def _update_overlay_safe(self, overlay_view, data):
......@@ -1682,8 +1708,8 @@ class PlayerWindow(QMainWindow):
# Check video state during overlay update
if hasattr(self, 'media_player'):
video_state = self.media_player.playbackState()
logger.error(f"GREEN SCREEN DEBUG: Video state during overlay update: {video_state}")
logger.error(f"GREEN SCREEN DEBUG: Video position during overlay update: {self.media_player.position()}")
logger.debug(f"GREEN SCREEN DEBUG: Video state during overlay update: {video_state}")
logger.debug(f"GREEN SCREEN DEBUG: Video position during overlay update: {self.media_player.position()}")
# Clean data before sending to prevent null property issues
cleaned_data = self._clean_overlay_data(data)
......@@ -1691,20 +1717,21 @@ class PlayerWindow(QMainWindow):
logger.debug("No valid data to send to overlay after cleaning")
return False
logger.error(f"GREEN SCREEN DEBUG: About to update overlay with data: {cleaned_data}")
data_keys = list(cleaned_data.keys()) if isinstance(cleaned_data, dict) else []
logger.debug(f"GREEN SCREEN DEBUG: About to update overlay with {len(cleaned_data)} data items: {data_keys}")
if self._is_native_overlay(overlay_view):
# Native overlay - always ready, update immediately
logger.error(f"GREEN SCREEN DEBUG: Updating native overlay")
logger.debug(f"GREEN SCREEN DEBUG: Updating native overlay")
overlay_view.update_overlay_data(cleaned_data)
logger.debug("Native overlay updated successfully")
logger.error(f"GREEN SCREEN DEBUG: Native overlay update completed")
logger.debug(f"GREEN SCREEN DEBUG: Native overlay update completed")
return True
elif isinstance(overlay_view, OverlayWebView):
# WebEngine overlay - check readiness first
logger.error(f"GREEN SCREEN DEBUG: Checking WebEngine overlay readiness")
logger.error(f"GREEN SCREEN DEBUG: WebEngine URL: {overlay_view.url().toString()}")
logger.error(f"GREEN SCREEN DEBUG: WebEngine visible: {overlay_view.isVisible()}")
logger.debug(f"GREEN SCREEN DEBUG: Checking WebEngine overlay readiness")
logger.debug(f"GREEN SCREEN DEBUG: WebEngine URL: {overlay_view.url().toString()}")
logger.debug(f"GREEN SCREEN DEBUG: WebEngine visible: {overlay_view.isVisible()}")
# CRITICAL FIX: Ensure WebEngine overlay visibility before update
if not overlay_view.isVisible():
......@@ -1721,46 +1748,24 @@ class PlayerWindow(QMainWindow):
logger.error(f"GREEN SCREEN FIX: Parent overlay window visibility forced")
if self._is_webengine_ready(overlay_view):
logger.error(f"GREEN SCREEN DEBUG: WebEngine ready, updating overlay")
logger.debug(f"GREEN SCREEN DEBUG: WebEngine ready, updating overlay")
overlay_view.update_overlay_data(cleaned_data)
logger.debug("WebEngine overlay updated successfully")
logger.error(f"GREEN SCREEN DEBUG: WebEngine overlay update completed")
logger.debug(f"GREEN SCREEN DEBUG: WebEngine overlay update completed")
return True
else:
logger.error(f"GREEN SCREEN DEBUG: WebEngine not ready, skipping update")
logger.debug(f"GREEN SCREEN DEBUG: WebEngine not ready, skipping update")
logger.debug("WebEngine overlay not ready, skipping update")
return False
else:
logger.warning(f"Unknown overlay type: {type(overlay_view)}")
logger.error(f"GREEN SCREEN DEBUG: Unknown overlay type: {type(overlay_view)}")
logger.debug(f"GREEN SCREEN DEBUG: Unknown overlay type: {type(overlay_view)}")
return False
except Exception as e:
logger.error(f"GREEN SCREEN DEBUG: Overlay update failed: {e}")
logger.debug(f"GREEN SCREEN DEBUG: Overlay update failed: {e}")
logger.error(f"Failed to update overlay safely: {e}")
return False
def _get_web_server_base_url(self) -> str:
"""Get the web server base URL for API requests"""
try:
# Default web server configuration - matches main.py defaults
host = "127.0.0.1" # Default host
port = 5001 # Default port
# Try to get web server settings if available
if hasattr(self, '_message_bus') and self._message_bus:
# Check if we can get web server info from message bus or settings
# For now, use defaults since we don't have direct access to web settings
pass
# Construct base URL
base_url = f"http://{host}:{port}"
logger.debug(f"Web server base URL determined as: {base_url}")
return base_url
except Exception as e:
logger.error(f"Failed to determine web server base URL: {e}")
# Return default fallback
return "http://127.0.0.1:5001"
def _protect_video_context_after_template_load(self):
"""Protect video rendering context after template loading operations"""
......@@ -1817,6 +1822,29 @@ class QtVideoPlayer(QObject):
logger.info("QtVideoPlayer (PyQt6) initialized")
def _get_web_server_base_url(self) -> str:
"""Get the web server base URL for API requests"""
try:
# Default web server configuration - matches main.py defaults
host = "127.0.0.1" # Default host
port = 5001 # Default port
# Try to get web server settings if available
if hasattr(self, '_message_bus') and self._message_bus:
# Check if we can get web server info from message bus or settings
# For now, use defaults since we don't have direct access to web settings
pass
# Construct base URL
base_url = f"http://{host}:{port}"
logger.debug(f"Web server base URL determined as: {base_url}")
return base_url
except Exception as e:
logger.error(f"Failed to determine web server base URL: {e}")
# Return default fallback
return "http://127.0.0.1:5001"
def initialize(self) -> bool:
"""Initialize PyQt6 application and components"""
try:
......@@ -2113,7 +2141,8 @@ class QtVideoPlayer(QObject):
# Unknown property, pass through if not null
cleaned_data[key] = value
logger.debug(f"Cleaned overlay data: {cleaned_data}")
data_keys = list(cleaned_data.keys()) if isinstance(cleaned_data, dict) else []
logger.debug(f"Cleaned overlay data: {len(cleaned_data)} items with keys: {data_keys}")
return cleaned_data
def _send_safe_overlay_update(self, overlay_view, data):
......@@ -2477,10 +2506,10 @@ class QtVideoPlayer(QObject):
reload_template = template_data.get("reload_template", False)
load_specific_template = template_data.get("load_specific_template", "")
logger.error(f"GREEN SCREEN DEBUG: Template change message received")
logger.error(f"GREEN SCREEN DEBUG: Template name: {template_name}")
logger.error(f"GREEN SCREEN DEBUG: Reload template: {reload_template}")
logger.error(f"GREEN SCREEN DEBUG: Load specific template: {load_specific_template}")
logger.debug(f"GREEN SCREEN DEBUG: Template change message received")
logger.debug(f"GREEN SCREEN DEBUG: Template name: {template_name}")
logger.debug(f"GREEN SCREEN DEBUG: Reload template: {reload_template}")
logger.debug(f"GREEN SCREEN DEBUG: Load specific template: {load_specific_template}")
if self.window and hasattr(self.window, 'window_overlay'):
overlay_view = self.window.window_overlay
......@@ -2488,14 +2517,14 @@ class QtVideoPlayer(QObject):
# Check video player state before template change
if hasattr(self.window, 'media_player'):
video_state = self.window.media_player.playbackState()
logger.error(f"GREEN SCREEN DEBUG: Video playback state during template change: {video_state}")
logger.error(f"GREEN SCREEN DEBUG: Video position: {self.window.media_player.position()}")
logger.error(f"GREEN SCREEN DEBUG: Video duration: {self.window.media_player.duration()}")
logger.debug(f"GREEN SCREEN DEBUG: Video playback state during template change: {video_state}")
logger.debug(f"GREEN SCREEN DEBUG: Video position: {self.window.media_player.position()}")
logger.debug(f"GREEN SCREEN DEBUG: Video duration: {self.window.media_player.duration()}")
# Check overlay window transparency state
if hasattr(self.window, 'overlay_window'):
logger.error(f"GREEN SCREEN DEBUG: Overlay window geometry: {self.window.overlay_window.geometry()}")
logger.error(f"GREEN SCREEN DEBUG: Overlay window visible: {self.window.overlay_window.isVisible()}")
logger.debug(f"GREEN SCREEN DEBUG: Overlay window geometry: {self.window.overlay_window.geometry()}")
logger.debug(f"GREEN SCREEN DEBUG: Overlay window visible: {self.window.overlay_window.isVisible()}")
# CRITICAL FIX: Protect video context during template changes
video_widget = None
......@@ -2505,16 +2534,16 @@ class QtVideoPlayer(QObject):
# Load specific template if requested and using WebEngine overlay
if load_specific_template and isinstance(overlay_view, OverlayWebView):
logger.error(f"GREEN SCREEN DEBUG: About to load specific template: {load_specific_template}")
logger.error(f"GREEN SCREEN FIX: Protecting video rendering during template load")
logger.debug(f"GREEN SCREEN DEBUG: About to load specific template: {load_specific_template}")
logger.debug(f"GREEN SCREEN FIX: Protecting video rendering during template load")
overlay_view.load_template(load_specific_template)
logger.error(f"GREEN SCREEN DEBUG: Specific template load initiated")
logger.debug(f"GREEN SCREEN DEBUG: Specific template load initiated")
# Otherwise reload current template if requested and using WebEngine overlay
elif reload_template and isinstance(overlay_view, OverlayWebView):
logger.error(f"GREEN SCREEN DEBUG: About to reload current template")
logger.error(f"GREEN SCREEN FIX: Protecting video rendering during template reload")
logger.debug(f"GREEN SCREEN DEBUG: About to reload current template")
logger.debug(f"GREEN SCREEN FIX: Protecting video rendering during template reload")
overlay_view.reload_current_template()
logger.error(f"GREEN SCREEN DEBUG: Current template reload initiated")
logger.debug(f"GREEN SCREEN DEBUG: Current template reload initiated")
# CRITICAL FIX: Force video widget refresh after template change
if video_widget:
......@@ -2541,7 +2570,9 @@ class QtVideoPlayer(QObject):
if k not in ['reload_template', 'load_specific_template']}
if data_to_send:
logger.error(f"GREEN SCREEN DEBUG: Sending overlay data: {data_to_send}")
# Log data summary instead of full content to avoid cluttering logs with HTML
data_keys = list(data_to_send.keys())
logger.debug(f"GREEN SCREEN DEBUG: Sending overlay data with keys: {data_keys}")
# Validate and clean template_data before sending to overlay
cleaned_data = self._clean_overlay_data(data_to_send)
if cleaned_data: # Only send if we have valid data after cleaning
......@@ -2549,10 +2580,10 @@ class QtVideoPlayer(QObject):
else:
logger.debug("Template data contained only null/undefined values, skipping update")
logger.error(f"GREEN SCREEN DEBUG: Template change handler completed")
logger.debug(f"GREEN SCREEN DEBUG: Template change handler completed")
except Exception as e:
logger.error(f"GREEN SCREEN DEBUG: Template change handler failed: {e}")
logger.debug(f"GREEN SCREEN DEBUG: Template change handler failed: {e}")
logger.error(f"Failed to handle template change: {e}")
def _handle_overlay_update(self, message: Message):
......
......@@ -273,7 +273,7 @@ def create_requests_session_with_ssl_support(verify_ssl: bool = True, ca_cert_pa
retry_strategy = Retry(
total=3,
status_forcelist=[429, 500, 502, 503, 504],
method_whitelist=["HEAD", "GET", "OPTIONS", "POST", "PUT", "DELETE"]
allowed_methods=["HEAD", "GET", "OPTIONS", "POST", "PUT", "DELETE"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment