From df7344be33512b1d8231613f67bfe8ed02bf994a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 26 Sep 2024 12:06:11 +0530 Subject: [PATCH] Windows: Read Aloud: Fix an occasional crash when stopping read aloud when using the legacy windows TTS backend. Fixes #2080705 [Download read aloud api failed](https://bugs.launchpad.net/calibre/+bug/2080705) --- src/calibre/gui2/tts/qt.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/tts/qt.py b/src/calibre/gui2/tts/qt.py index bacb537afb..0a6d06a8a4 100644 --- a/src/calibre/gui2/tts/qt.py +++ b/src/calibre/gui2/tts/qt.py @@ -38,7 +38,17 @@ class QtTTSBackend(TTSBackend): self.tts.resume() def stop(self) -> None: - self.tts.stop() + if self.tts.engine() == 'sapi' and self.tts.state() is QTextToSpeech.State.Speaking: + # prevent an occasional crash on stop by re-creating the engine rather than stopping it + self.tts.sayingWord.disconnect() + self.tts.stateChanged.disconnect() + self.tts.pause() + self.tts.deleteLater() + del self.tts + self._qt_reload_after_configure('sapi') + self._state_changed(QTextToSpeech.State.Ready) + else: + self.tts.stop() def say(self, text: str) -> None: self.last_word_offset = 0