diff --git a/abogen/conversion.py b/abogen/conversion.py index aedcd96..8bb17ab 100644 --- a/abogen/conversion.py +++ b/abogen/conversion.py @@ -28,6 +28,9 @@ import threading # for efficient waiting import subprocess import platform +# Configuration constants +_USER_RESPONSE_TIMEOUT = 0.1 # Timeout in seconds for checking user response/cancellation + # Pre-compile frequently used regex patterns for better performance _METADATA_TAG_PATTERN = re.compile(r"<]*>>") _CHAPTER_MARKER_PATTERN = re.compile(r"<]*>>") @@ -875,10 +878,11 @@ class ConversionThread(QThread): # Signal to ask user (-1 indicates timestamp detection) self.chapters_detected.emit(-1) # Wait for user response using event with timeout for responsive cancellation - while not self._timestamp_response_event.wait(timeout=0.1): + while not self._timestamp_response_event.wait(timeout=_USER_RESPONSE_TIMEOUT): if self.cancel_requested: self.conversion_finished.emit("Cancelled", None) return + # Check cancellation one more time after event is set if self.cancel_requested: self.conversion_finished.emit("Cancelled", None) return diff --git a/test_performance.py b/test_performance.py index 76531d3..c17255a 100644 --- a/test_performance.py +++ b/test_performance.py @@ -9,6 +9,7 @@ are working correctly and don't introduce regressions. import re import time import sys +import traceback def test_regex_precompilation_performance(): @@ -213,7 +214,6 @@ def main(): return 1 except Exception as e: print(f"\n❌ Unexpected error: {e}") - import traceback traceback.print_exc() return 1