mirror of
git://github.com/kovidgoyal/calibre.git
synced 2026-05-04 01:23:13 +02:00
macOS: Workaround for the OS not sending speak end events
This commit is contained in:
parent
80256b2e49
commit
a3d2870af1
1 changed files with 13 additions and 2 deletions
|
|
@ -8,6 +8,7 @@
|
|||
class Client:
|
||||
|
||||
mark_template = '[[sync 0x{:x}]]'
|
||||
END_MARK = 0xffffffff
|
||||
name = 'nsss'
|
||||
|
||||
@classmethod
|
||||
|
|
@ -35,10 +36,17 @@ def __del__(self):
|
|||
|
||||
def handle_message(self, message_type, data):
|
||||
from calibre_extensions.cocoa import MARK, END
|
||||
print(message_type, data)
|
||||
if message_type == MARK:
|
||||
event = Event(EventType.mark, data)
|
||||
if data == self.END_MARK:
|
||||
event = Event(EventType.end)
|
||||
self.status = {'synthesizing': False, 'paused': False}
|
||||
else:
|
||||
event = Event(EventType.mark, data)
|
||||
elif message_type == END:
|
||||
event = Event(EventType.end if data else EventType.cancel)
|
||||
if data:
|
||||
return # normal end event is handled by END_MARK
|
||||
event = Event(EventType.cancel)
|
||||
self.status = {'synthesizing': False, 'paused': False}
|
||||
else:
|
||||
return
|
||||
|
|
@ -56,6 +64,9 @@ def speak_simple_text(self, text):
|
|||
|
||||
def speak_marked_text(self, text, callback):
|
||||
self.current_callback = callback
|
||||
# on macOS didFinishSpeaking is never called for some reason, so work
|
||||
# around it by adding an extra, special mark at the end
|
||||
text += self.mark_template.format(self.END_MARK)
|
||||
self.nsss.speak(text)
|
||||
self.status = {'synthesizing': True, 'paused': False}
|
||||
self.current_callback(Event(EventType.begin))
|
||||
|
|
|
|||
Loading…
Reference in a new issue