aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-08-04 13:32:19 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-08-04 13:32:19 -0400
commit0010f88e1002feb14ecfb111c2c6ae56ee34cf2d (patch)
treeff040a567c6f789c6f40ed5340bbd08642698d67 /src
parent95ff1649631457449bdc580a5a47937718c00e3b (diff)
clean up and UI fix
Diffstat (limited to 'src')
-rw-r--r--src/client/util/DictationManager.ts43
-rw-r--r--src/client/views/MainView.tsx11
-rw-r--r--src/client/views/nodes/DocumentView.tsx20
3 files changed, 38 insertions, 36 deletions
diff --git a/src/client/util/DictationManager.ts b/src/client/util/DictationManager.ts
index 2af7c53cb..ee1f11b4f 100644
--- a/src/client/util/DictationManager.ts
+++ b/src/client/util/DictationManager.ts
@@ -58,6 +58,7 @@ export namespace DictationManager {
export type InterimResultHandler = (results: string) => any;
export type ContinuityArgs = { indefinite: boolean } | false;
export type DelimiterArgs = { inter: string, intra: string };
+ export type ListeningUIStatus = { interim: boolean } | false;
export interface ListeningOptions {
language: string;
@@ -69,22 +70,28 @@ export namespace DictationManager {
export const listen = async (options?: Partial<ListeningOptions>) => {
let results: string | undefined;
- MainView.Instance.dictationOverlayVisible = true;
- MainView.Instance.isListening = true;
+ let main = MainView.Instance;
+
+ main.dictationOverlayVisible = true;
+ let interim = options !== undefined && options.interimHandler !== undefined;
+ main.isListening = { interim: interim };
+
try {
results = await listenImpl(options);
if (results) {
- MainView.Instance.isListening = false;
- MainView.Instance.dictatedPhrase = results = results.toLowerCase();
- MainView.Instance.dictationSuccess = options && options.tryExecute ? await DictationManager.Commands.execute(results) : true;
+ main.isListening = false;
+ main.dictatedPhrase = results;
+ let execute = options && options.tryExecute;
+ main.dictationSuccess = execute ? await DictationManager.Commands.execute(results) : true;
}
} catch (e) {
- MainView.Instance.isListening = false;
- MainView.Instance.dictatedPhrase = results = `dictation error: ${"error" in e ? e.error : "unknown error"}`;
- MainView.Instance.dictationSuccess = false;
+ main.isListening = false;
+ main.dictatedPhrase = results = `dictation error: ${"error" in e ? e.error : "unknown error"}`;
+ main.dictationSuccess = false;
} finally {
- MainView.Instance.initiateDictationFade();
+ main.initiateDictationFade();
}
+
return results;
};
@@ -137,11 +144,10 @@ export namespace DictationManager {
let complete = () => {
if (indefinite) {
current && sessionResults.push(current);
- resolve(sessionResults.join(inter || interSession));
+ sessionResults.length && resolve(sessionResults.join(inter || interSession));
} else {
resolve(current);
}
- current = undefined;
reset();
};
@@ -154,12 +160,12 @@ export namespace DictationManager {
}
isManuallyStopped = true;
salvageSession ? recognizer.stop() : recognizer.abort();
- if (MainView.Instance.dictationOverlayVisible) {
- MainView.Instance.cancelDictationFade();
- MainView.Instance.dictationOverlayVisible = false;
- MainView.Instance.isListening = true;
- MainView.Instance.dictatedPhrase = "";
- MainView.Instance.dictationSuccess = undefined;
+ let main = MainView.Instance;
+ if (main.dictationOverlayVisible) {
+ main.cancelDictationFade();
+ main.dictationOverlayVisible = false;
+ main.dictationSuccess = undefined;
+ setTimeout(() => main.dictatedPhrase = placeholder, 500);
}
};
@@ -173,12 +179,13 @@ export namespace DictationManager {
};
const reset = () => {
+ current = undefined;
+ sessionResults = [];
isListening = false;
isManuallyStopped = false;
recognizer.onresult = null;
recognizer.onerror = null;
recognizer.onend = null;
- sessionResults = [];
};
}
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 383efa1e3..631d24cb1 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -49,10 +49,10 @@ export class MainView extends React.Component {
@observable public pwidth: number = 0;
@observable public pheight: number = 0;
- @observable private dictationState = "";
+ @observable private dictationState = DictationManager.placeholder;
@observable private dictationSuccessState: boolean | undefined = undefined;
@observable private dictationDisplayState = false;
- @observable private dictationListeningState = false;
+ @observable private dictationListeningState: DictationManager.Controls.ListeningUIStatus = false;
public overlayTimeout: NodeJS.Timeout | undefined;
@@ -61,6 +61,7 @@ export class MainView extends React.Component {
this.overlayTimeout = setTimeout(() => {
this.dictationOverlayVisible = false;
this.dictationSuccess = undefined;
+ setTimeout(() => this.dictatedPhrase = DictationManager.placeholder, 500);
}, duration);
}
@@ -116,7 +117,7 @@ export class MainView extends React.Component {
return this.dictationListeningState;
}
- public set isListening(value: boolean) {
+ public set isListening(value: DictationManager.Controls.ListeningUIStatus) {
runInAction(() => this.dictationListeningState = value);
}
@@ -167,8 +168,6 @@ export class MainView extends React.Component {
}
}
- autorun(() => console.log(`this.isListening = ${this.isListening}`));
-
library.add(faFont);
library.add(faExclamation);
library.add(faPortrait);
@@ -525,7 +524,7 @@ export class MainView extends React.Component {
render() {
let display = this.dictationOverlayVisible;
let success = this.dictationSuccess;
- let result = this.isListening ? DictationManager.placeholder : `"${this.dictatedPhrase}"`;
+ let result = this.isListening && !this.isListening.interim ? DictationManager.placeholder : `"${this.dictatedPhrase}"`;
return (
<div id="main-div">
<div
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 458fb582d..d6ae17537 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -536,19 +536,15 @@ export class DocumentView extends DocComponent<DocumentViewProps, Document>(Docu
this.props.Document.lockedPosition = BoolCast(this.props.Document.lockedPosition) ? undefined : true;
}
- listen = async () => {
- let dataDoc = Doc.GetProto(this.props.Document);
- let handler = (results: string) => {
- MainView.Instance.isListening = false;
- MainView.Instance.dictationSuccess = true;
- MainView.Instance.dictatedPhrase = results;
- };
- let final = await DictationManager.Controls.listen({
+ listen = async () =>
+ Doc.GetProto(this.props.Document).transcript = await DictationManager.Controls.listen({
continuous: { indefinite: true },
- interimHandler: handler
- });
- final && (dataDoc.transcript = final);
- }
+ interimHandler: (results: string) => {
+ MainView.Instance.isListening = { interim: true };
+ MainView.Instance.dictationSuccess = true;
+ MainView.Instance.dictatedPhrase = results;
+ }
+ })
@action
onContextMenu = async (e: React.MouseEvent): Promise<void> => {