aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-08-03 14:05:33 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-08-03 14:05:33 -0400
commit30444bd06dbd00c948749fa739e7a42cef87ec85 (patch)
treeab49c0875a6cc46cee7aee22acb25965a0be3fb5
parent982961c71fdd9d5dcd02ea33a2b631076a6a1f4b (diff)
added final or interim listning
-rw-r--r--src/client/util/DictationManager.ts35
-rw-r--r--src/client/views/GlobalKeyHandler.ts2
2 files changed, 28 insertions, 9 deletions
diff --git a/src/client/util/DictationManager.ts b/src/client/util/DictationManager.ts
index b51d309a1..2ed74a729 100644
--- a/src/client/util/DictationManager.ts
+++ b/src/client/util/DictationManager.ts
@@ -2,7 +2,7 @@ import { SelectionManager } from "./SelectionManager";
import { DocumentView } from "../views/nodes/DocumentView";
import { undoBatch } from "./UndoManager";
import * as converter from "words-to-numbers";
-import { Doc } from "../../new_fields/Doc";
+import { Doc, Opt } from "../../new_fields/Doc";
import { List } from "../../new_fields/List";
import { Docs, DocumentType } from "../documents/Documents";
import { CollectionViewType } from "../views/collections/CollectionBaseView";
@@ -18,40 +18,59 @@ export namespace DictationManager {
webkitSpeechRecognition: any;
}
}
-
const { webkitSpeechRecognition }: CORE.IWindow = window as CORE.IWindow;
let isListening = false;
const recognizer = (() => {
let initialized = new webkitSpeechRecognition();
- initialized.interimResults = false;
initialized.continuous = true;
return initialized;
})();
export namespace Controls {
- export const listen = () => {
+ export type InterimResultHandler = (results: any) => any;
+
+ export const listen = (handler: Opt<InterimResultHandler> = undefined) => {
if (isListening) {
return undefined;
}
isListening = true;
+
+ recognizer.interimResults = handler !== undefined;
recognizer.start();
+
return new Promise<string>((resolve, reject) => {
- recognizer.onresult = (e: any) => {
- resolve(e.results[0][0].transcript);
- stop();
- };
recognizer.onerror = (e: any) => {
reject(e);
stop();
};
+ if (handler) {
+ let newestResult: string;
+ recognizer.onresult = (e: any) => {
+ newestResult = e.results[0][0].transcript;
+ handler(newestResult);
+ };
+ recognizer.onend = (e: any) => {
+ resolve(newestResult);
+ stop();
+ };
+ } else {
+ recognizer.onresult = (e: any) => {
+ let finalResult = e.results[0][0].transcript;
+ resolve(finalResult);
+ stop();
+ };
+ }
});
};
export const stop = () => {
recognizer.stop();
isListening = false;
+ recognizer.onresult = undefined;
+ recognizer.onend = undefined;
+ recognizer.onerror = undefined;
};
}
diff --git a/src/client/views/GlobalKeyHandler.ts b/src/client/views/GlobalKeyHandler.ts
index 609136bb5..b1ea92bb8 100644
--- a/src/client/views/GlobalKeyHandler.ts
+++ b/src/client/views/GlobalKeyHandler.ts
@@ -111,7 +111,7 @@ export default class KeyManager {
let main = MainView.Instance;
main.dictationOverlayVisible = true;
main.isListening = true;
- let command = await DictationManager.Controls.listen();
+ let command = await DictationManager.Controls.listen((results: any) => console.log(results));
main.isListening = false;
if (!command) {
break;