131 lines
5.9 KiB
Python
131 lines
5.9 KiB
Python
"""
|
|
Patch for the MainWindow class to use EnhancedVideoController by default.
|
|
This file is imported by main.py to modify MainWindow's behavior.
|
|
"""
|
|
|
|
# Import all necessary Qt components
|
|
from PySide6.QtCore import Qt, QTimer
|
|
from PySide6.QtWidgets import QMessageBox
|
|
|
|
# Import the enhanced controller - handle potential import errors
|
|
try:
|
|
from controllers.enhanced_video_controller import EnhancedVideoController
|
|
except ImportError:
|
|
try:
|
|
from qt_app_pyside.controllers.enhanced_video_controller import EnhancedVideoController
|
|
except ImportError:
|
|
print("⚠️ Warning: Could not import EnhancedVideoController. Using fallback controller.")
|
|
EnhancedVideoController = None
|
|
|
|
# Original imports preserved for compatibility - handle potential import errors
|
|
try:
|
|
from controllers.video_controller_new import VideoController
|
|
from controllers.analytics_controller import AnalyticsController
|
|
from controllers.performance_overlay import PerformanceOverlay
|
|
from controllers.model_manager import ModelManager
|
|
except ImportError:
|
|
try:
|
|
from qt_app_pyside.controllers.video_controller_new import VideoController
|
|
from qt_app_pyside.controllers.analytics_controller import AnalyticsController
|
|
from qt_app_pyside.controllers.performance_overlay import PerformanceOverlay
|
|
from qt_app_pyside.controllers.model_manager import ModelManager
|
|
except ImportError:
|
|
print("⚠️ Warning: Could not import controller modules.")
|
|
|
|
# Store original method reference
|
|
original_setup_controllers = None
|
|
|
|
def enhanced_setup_controllers(self):
|
|
"""Enhanced version of setupControllers that uses the EnhancedVideoController"""
|
|
global EnhancedVideoController, ModelManager, AnalyticsController
|
|
|
|
# If modules couldn't be imported, fall back to original method
|
|
if EnhancedVideoController is None:
|
|
print("⚠️ Enhanced controller not available, falling back to original setup")
|
|
if original_setup_controllers:
|
|
original_setup_controllers(self)
|
|
return
|
|
|
|
# Store existing source if video controller already exists
|
|
existing_source = None
|
|
if hasattr(self, 'video_controller') and self.video_controller:
|
|
# Grab the current source before replacing the controller
|
|
print("📽️ Preserving existing video source...")
|
|
try:
|
|
# Try to get source from the processing thread
|
|
if hasattr(self.video_controller, 'processing_thread') and self.video_controller.processing_thread:
|
|
existing_source = self.video_controller.processing_thread.source
|
|
print(f"✅ Preserved source from processing thread: {existing_source}")
|
|
# Backup: Get source directly from live tab
|
|
elif hasattr(self, 'live_tab') and hasattr(self.live_tab, 'current_source'):
|
|
existing_source = self.live_tab.current_source
|
|
print(f"✅ Preserved source from live tab: {existing_source}")
|
|
except Exception as e:
|
|
print(f"⚠️ Could not preserve source: {e}")
|
|
|
|
# Load config from file
|
|
try: # Initialize model manager
|
|
self.model_manager = ModelManager(self.config_file)
|
|
|
|
# Create enhanced video controller instead of regular one
|
|
print("🚀 Creating enhanced video controller with async inference...")
|
|
self.video_controller = EnhancedVideoController(self.model_manager)
|
|
|
|
# Restore the source if we had one or check the live tab
|
|
# First try the source we grabbed earlier
|
|
if existing_source is not None and existing_source != 0:
|
|
print(f"🔄 Restoring video source from previous controller: {existing_source}")
|
|
self.video_controller.set_source(existing_source)
|
|
# If we couldn't get it from the previous controller, try getting it from the live tab directly
|
|
elif hasattr(self, 'live_tab') and hasattr(self.live_tab, 'current_source') and self.live_tab.current_source is not None and self.live_tab.current_source != 0:
|
|
print(f"🔄 Using source directly from live_tab: {self.live_tab.current_source}")
|
|
self.video_controller.set_source(self.live_tab.current_source)
|
|
|
|
# Create analytics controller
|
|
self.analytics_controller = AnalyticsController()
|
|
|
|
# Setup update timer for performance overlay
|
|
self.perf_timer = QTimer()
|
|
self.perf_timer.timeout.connect(self.performance_overlay.update_stats)
|
|
self.perf_timer.start(1000) # Update every second
|
|
|
|
# Important: Do NOT set a default source - let the UI handle it properly
|
|
# This allows video files to be loaded and remembered
|
|
|
|
print("✅ Enhanced controller setup complete!")
|
|
|
|
except Exception as e:
|
|
# Show error message
|
|
from PySide6.QtWidgets import QMessageBox
|
|
QMessageBox.critical(
|
|
self,
|
|
"Initialization Error",
|
|
f"Error initializing enhanced controllers: {str(e)}"
|
|
)
|
|
print(f"❌ Error details: {e}")
|
|
# Fall back to original method if there's an error
|
|
if original_setup_controllers:
|
|
print("⚠️ Falling back to original controller setup")
|
|
original_setup_controllers(self)
|
|
|
|
# Function to patch the MainWindow class and return the patched version
|
|
def patch_mainwindow_class():
|
|
"""
|
|
Import and patch the MainWindow class to use EnhancedVideoController by default.
|
|
Returns the patched MainWindow class.
|
|
"""
|
|
global original_setup_controllers
|
|
|
|
# Import MainWindow here to avoid circular imports
|
|
from ui.main_window import MainWindow
|
|
|
|
# Store the original method
|
|
original_setup_controllers = MainWindow.setupControllers
|
|
|
|
# Replace with enhanced method
|
|
MainWindow.setupControllers = enhanced_setup_controllers
|
|
|
|
print("✅ MainWindow patched to use EnhancedVideoController")
|
|
|
|
return MainWindow
|