mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement pause/resume on macos
This commit is contained in:
parent
79f27b42c9
commit
f6bd75ecd4
@ -108,11 +108,12 @@ class Client:
|
|||||||
self.ssip_client.speak(text, callback=self.current_callback)
|
self.ssip_client.speak(text, callback=self.current_callback)
|
||||||
|
|
||||||
def pause(self):
|
def pause(self):
|
||||||
|
if self.status['synthesizing'] and not self.status['paused']:
|
||||||
self.next_cancel_is_for_pause = True
|
self.next_cancel_is_for_pause = True
|
||||||
self.ssip_client.stop()
|
self.ssip_client.stop()
|
||||||
|
|
||||||
def resume(self):
|
def resume(self):
|
||||||
if self.current_marked_text is None:
|
if self.current_marked_text is None or not self.status['synthesizing'] or not self.status['paused']:
|
||||||
return
|
return
|
||||||
self.next_begin_is_for_resume = True
|
self.next_begin_is_for_resume = True
|
||||||
if self.last_mark is None:
|
if self.last_mark is None:
|
||||||
|
@ -18,6 +18,7 @@ class Client:
|
|||||||
self.nsss = NSSpeechSynthesizer(self.handle_message)
|
self.nsss = NSSpeechSynthesizer(self.handle_message)
|
||||||
self.current_callback = None
|
self.current_callback = None
|
||||||
self.dispatch_on_main_thread = dispatch_on_main_thread
|
self.dispatch_on_main_thread = dispatch_on_main_thread
|
||||||
|
self.status = {'synthesizing': False, 'paused': False}
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
self.nsss = None
|
self.nsss = None
|
||||||
@ -29,6 +30,7 @@ class Client:
|
|||||||
event = Event(EventType.mark, data)
|
event = Event(EventType.mark, data)
|
||||||
elif message_type == END:
|
elif message_type == END:
|
||||||
event = Event(EventType.end if data else EventType.cancel)
|
event = Event(EventType.end if data else EventType.cancel)
|
||||||
|
self.status = {'synthesizing': False, 'paused': False}
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
if self.current_callback is not None:
|
if self.current_callback is not None:
|
||||||
@ -41,14 +43,27 @@ class Client:
|
|||||||
def speak_simple_text(self, text):
|
def speak_simple_text(self, text):
|
||||||
self.current_callback = None
|
self.current_callback = None
|
||||||
self.nsss.speak(self.escape_marked_text(text))
|
self.nsss.speak(self.escape_marked_text(text))
|
||||||
|
self.status = {'synthesizing': True, 'paused': False}
|
||||||
|
|
||||||
def speak_marked_text(self, text, callback):
|
def speak_marked_text(self, text, callback):
|
||||||
self.current_callback = callback
|
self.current_callback = callback
|
||||||
self.nsss.speak(text)
|
self.nsss.speak(text)
|
||||||
|
self.status = {'synthesizing': True, 'paused': False}
|
||||||
|
self.current_callback(Event(EventType.begin))
|
||||||
|
|
||||||
@property
|
def pause(self):
|
||||||
def status(self):
|
if self.status['synthesizing']:
|
||||||
ans = self.nsss.status()
|
self.nsss.pause()
|
||||||
ans['synthesizing'] = ans.get('synthesizing', False)
|
self.status = {'synthesizing': True, 'paused': True}
|
||||||
ans['paused'] = ans.get('paused', False)
|
if self.current_callback is not None:
|
||||||
return ans
|
self.current_callback(Event(EventType.pause))
|
||||||
|
|
||||||
|
def resume(self):
|
||||||
|
if self.status['paused']:
|
||||||
|
self.nsss.resume()
|
||||||
|
self.status = {'synthesizing': True, 'paused': False}
|
||||||
|
if self.current_callback is not None:
|
||||||
|
self.current_callback(Event(EventType.resume))
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self.nsss.stop()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user