Release v1.0.14: stop passing match results through Qt signals.
Store worker results on the thread object, defer preview refresh, and log Python errors to crash.log to prevent native Qt crashes after TheTVDB match. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
+16
-2
@@ -25,7 +25,7 @@ from PyQt6.QtWidgets import (
|
||||
QCheckBox,
|
||||
QComboBox,
|
||||
)
|
||||
from PyQt6.QtCore import Qt, QDir, QItemSelectionModel, QSettings
|
||||
from PyQt6.QtCore import Qt, QDir, QItemSelectionModel, QSettings, QTimer
|
||||
from PyQt6.QtGui import QFont, QColor
|
||||
|
||||
from engine.pipeline import compute_preview, perform_renames, save_undo_log, load_undo_log, perform_undo
|
||||
@@ -54,6 +54,7 @@ class MainWindow(QMainWindow):
|
||||
self._file_names: list[str] = []
|
||||
self._preview_by_orig: dict[str, str] = {} # original name -> new name for selection preview
|
||||
self._split: QSplitter | None = None
|
||||
self._preview_refresh_scheduled = False
|
||||
self._setup_ui()
|
||||
self._restore_layout()
|
||||
self._refresh_preview()
|
||||
@@ -129,7 +130,7 @@ class MainWindow(QMainWindow):
|
||||
if hasattr(w, "set_file_names"):
|
||||
w.set_file_names(self._file_names)
|
||||
if hasattr(w, "matchCompleted"):
|
||||
w.matchCompleted.connect(self._refresh_preview)
|
||||
w.matchCompleted.connect(self._schedule_refresh_preview)
|
||||
g = QGroupBox(title)
|
||||
g_layout = QVBoxLayout(g)
|
||||
g_layout.setContentsMargins(8, 12, 8, 8)
|
||||
@@ -274,6 +275,19 @@ class MainWindow(QMainWindow):
|
||||
display_name = self._preview_by_orig.get(orig, orig) if row in selected_rows else orig
|
||||
self.preview_table.setItem(row, 1, QTableWidgetItem(display_name))
|
||||
|
||||
def _schedule_refresh_preview(self):
|
||||
if self._preview_refresh_scheduled:
|
||||
return
|
||||
self._preview_refresh_scheduled = True
|
||||
QTimer.singleShot(0, self._run_scheduled_refresh)
|
||||
|
||||
def _run_scheduled_refresh(self):
|
||||
self._preview_refresh_scheduled = False
|
||||
try:
|
||||
self._refresh_preview()
|
||||
except Exception as exc:
|
||||
self.preview_status.setText(f"Preview error: {exc}")
|
||||
|
||||
def _refresh_preview(self):
|
||||
rules = self._get_rules()
|
||||
if not self._file_names:
|
||||
|
||||
Reference in New Issue
Block a user