From d3e05b5a7a642eb3212528ecc8cdedd406673213 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Tue, 3 Nov 2020 11:03:55 -0600 Subject: [PATCH] Revert "Pass TTS instance as first argument to utterance callbacks." This appears to break callbacks, and is of limited utility. This reverts commit 29c0a8463ed815f74e65886b9b53e15cc69f38cd. --- examples/hello_world.rs | 6 +++--- src/backends/av_foundation.rs | 6 +++--- src/backends/speech_dispatcher.rs | 6 +++--- src/backends/web.rs | 6 +++--- src/backends/winrt.rs | 8 ++++---- src/lib.rs | 22 ++++++++-------------- 6 files changed, 24 insertions(+), 30 deletions(-) diff --git a/examples/hello_world.rs b/examples/hello_world.rs index d099f05..f3fa7a8 100644 --- a/examples/hello_world.rs +++ b/examples/hello_world.rs @@ -17,13 +17,13 @@ fn main() -> Result<(), Error> { .. } = tts.supported_features(); if utterance_callbacks { - tts.on_utterance_begin(Some(Box::new(|_tts, utterance| { + tts.on_utterance_begin(Some(Box::new(|utterance| { println!("Started speaking {:?}", utterance) })))?; - tts.on_utterance_end(Some(Box::new(|_tts, utterance| { + tts.on_utterance_end(Some(Box::new(|utterance| { println!("Finished speaking {:?}", utterance) })))?; - tts.on_utterance_stop(Some(Box::new(|_tts, utterance| { + tts.on_utterance_stop(Some(Box::new(|utterance| { println!("Stopped speaking {:?}", utterance) })))?; } diff --git a/src/backends/av_foundation.rs b/src/backends/av_foundation.rs index 555be56..dbca640 100644 --- a/src/backends/av_foundation.rs +++ b/src/backends/av_foundation.rs @@ -44,7 +44,7 @@ impl AvFoundation { let callbacks = callbacks.get_mut(&backend_id).unwrap(); if let Some(callback) = callbacks.utterance_begin.as_mut() { let utterance_id = UtteranceId::AvFoundation(utterance); - callback(callbacks.tts.clone(), utterance_id); + callback(utterance_id); } } } @@ -62,7 +62,7 @@ impl AvFoundation { let callbacks = callbacks.get_mut(&backend_id).unwrap(); if let Some(callback) = callbacks.utterance_end.as_mut() { let utterance_id = UtteranceId::AvFoundation(utterance); - callback(callbacks.tts.clone(), utterance_id); + callback(utterance_id); } } } @@ -80,7 +80,7 @@ impl AvFoundation { let callbacks = callbacks.get_mut(&backend_id).unwrap(); if let Some(callback) = callbacks.utterance_stop.as_mut() { let utterance_id = UtteranceId::AvFoundation(utterance); - callback(callbacks.tts.clone(), utterance_id); + callback(utterance_id); } } } diff --git a/src/backends/speech_dispatcher.rs b/src/backends/speech_dispatcher.rs index 524e791..39c7fd8 100644 --- a/src/backends/speech_dispatcher.rs +++ b/src/backends/speech_dispatcher.rs @@ -33,7 +33,7 @@ impl SpeechDispatcher { let cb = callbacks.get_mut(&backend_id).unwrap(); let utterance_id = UtteranceId::SpeechDispatcher(msg_id); if let Some(f) = cb.utterance_begin.as_mut() { - f(cb.tts.clone(), utterance_id); + f(utterance_id); } }))); sd.0.on_end(Some(Box::new(|msg_id, client_id| { @@ -44,7 +44,7 @@ impl SpeechDispatcher { let cb = callbacks.get_mut(&backend_id).unwrap(); let utterance_id = UtteranceId::SpeechDispatcher(msg_id); if let Some(f) = cb.utterance_end.as_mut() { - f(cb.tts.clone(), utterance_id); + f(utterance_id); } }))); sd.0.on_cancel(Some(Box::new(|msg_id, client_id| { @@ -55,7 +55,7 @@ impl SpeechDispatcher { let cb = callbacks.get_mut(&backend_id).unwrap(); let utterance_id = UtteranceId::SpeechDispatcher(msg_id); if let Some(f) = cb.utterance_stop.as_mut() { - f(cb.tts.clone(), utterance_id); + f(utterance_id); } }))); sd.0.on_pause(Some(Box::new(|_msg_id, client_id| { diff --git a/src/backends/web.rs b/src/backends/web.rs index 113f564..0db2a10 100644 --- a/src/backends/web.rs +++ b/src/backends/web.rs @@ -75,7 +75,7 @@ impl Backend for Web { let mut callbacks = CALLBACKS.lock().unwrap(); let callback = callbacks.get_mut(&id).unwrap(); if let Some(f) = callback.utterance_begin.as_mut() { - f(callback.tts.clone(), utterance_id); + f(utterance_id); } }) as Box); utterance.set_onstart(Some(callback.as_ref().unchecked_ref())); @@ -83,7 +83,7 @@ impl Backend for Web { let mut callbacks = CALLBACKS.lock().unwrap(); let callback = callbacks.get_mut(&id).unwrap(); if let Some(f) = callback.utterance_end.as_mut() { - f(callback.tts.clone(), utterance_id); + f(utterance_id); } let mut mappings = UTTERANCE_MAPPINGS.lock().unwrap(); mappings.retain(|v| v.1 != utterance_id); @@ -94,7 +94,7 @@ impl Backend for Web { let mut callbacks = CALLBACKS.lock().unwrap(); let callback = callbacks.get_mut(&id).unwrap(); if let Some(f) = callback.utterance_stop.as_mut() { - f(callback.tts.clone(), utterance_id); + f(utterance_id); } } let mut mappings = UTTERANCE_MAPPINGS.lock().unwrap(); diff --git a/src/backends/winrt.rs b/src/backends/winrt.rs index c702167..4de4060 100644 --- a/src/backends/winrt.rs +++ b/src/backends/winrt.rs @@ -79,7 +79,7 @@ impl WinRT { let callbacks = callbacks.get_mut(&self.id).unwrap(); if let Some(callback) = callbacks.utterance_stop.as_mut() { for mapping in &*mappings { - callback(callbacks.tts.clone(), mapping.2); + callback(mapping.2); } } mappings.retain(|v| v.0 != self.id); @@ -101,7 +101,7 @@ impl WinRT { if let Some(callback) = callbacks.utterance_end.as_mut() { let last_spoken_utterance = LAST_SPOKEN_UTTERANCE.lock().unwrap(); if let Some(utterance_id) = last_spoken_utterance.get(&id) { - callback(callbacks.tts.clone(), utterance_id.clone()); + callback(utterance_id.clone()); } } } @@ -124,7 +124,7 @@ impl WinRT { if let Some(callback) = callbacks.utterance_end.as_mut() { for mapping in &*mappings { if mapping.1 == old_item { - callback(callbacks.tts.clone(), mapping.2); + callback(mapping.2); } } mappings.retain(|v| v.1 != old_item); @@ -142,7 +142,7 @@ impl WinRT { if let Some(callback) = callbacks.utterance_begin.as_mut() { for mapping in &*mappings { if mapping.1 == new_item { - callback(callbacks.tts.clone(), mapping.2); + callback(mapping.2); } } } diff --git a/src/lib.rs b/src/lib.rs index 27616d9..d305d3b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -133,11 +133,11 @@ trait Backend: Clone + std::fmt::Debug { fn is_speaking(&self) -> Result; } +#[derive(Default)] struct Callbacks { - tts: TTS, - utterance_begin: Option>, - utterance_end: Option>, - utterance_stop: Option>, + utterance_begin: Option>, + utterance_end: Option>, + utterance_stop: Option>, } unsafe impl Send for Callbacks {} @@ -193,13 +193,7 @@ impl TTS { if let Ok(backend) = backend { if let Some(id) = backend.0.id() { let mut callbacks = CALLBACKS.lock().unwrap(); - let cb = Callbacks { - tts: backend.clone(), - utterance_begin: None, - utterance_end: None, - utterance_stop: None, - }; - callbacks.insert(id, cb); + callbacks.insert(id, Callbacks::default()); } Ok(backend) } else { @@ -449,7 +443,7 @@ impl TTS { */ pub fn on_utterance_begin( &self, - callback: Option>, + callback: Option>, ) -> Result<(), Error> { let Features { utterance_callbacks, @@ -471,7 +465,7 @@ impl TTS { */ pub fn on_utterance_end( &self, - callback: Option>, + callback: Option>, ) -> Result<(), Error> { let Features { utterance_callbacks, @@ -493,7 +487,7 @@ impl TTS { */ pub fn on_utterance_stop( &self, - callback: Option>, + callback: Option>, ) -> Result<(), Error> { let Features { utterance_callbacks,