diff options
-rw-r--r-- | src/client/views/nodes/AudioBox.tsx | 13 | ||||
-rw-r--r-- | src/server/ApiManagers/UploadManager.ts | 3 | ||||
-rw-r--r-- | src/server/DashUploadUtils.ts | 17 | ||||
-rw-r--r-- | src/server/SharedMediaTypes.ts | 2 |
4 files changed, 19 insertions, 16 deletions
diff --git a/src/client/views/nodes/AudioBox.tsx b/src/client/views/nodes/AudioBox.tsx index 62a479b2a..5ed8fba19 100644 --- a/src/client/views/nodes/AudioBox.tsx +++ b/src/client/views/nodes/AudioBox.tsx @@ -44,6 +44,7 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume _ele: HTMLAudioElement | null = null; _recorder: any; _recordStart = 0; + _stream: MediaStream | undefined; @observable private static _scrubTime = 0; @observable private _audioState: "unrecorded" | "recording" | "recorded" = "unrecorded"; @@ -131,7 +132,7 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume navigator.mediaDevices.getUserMedia({ audio: true }).then(function (stream) { - gumStream = stream; + self._stream = stream; self._recorder = new MediaRecorder(stream); self.dataDoc[self.props.fieldKey + "-recordingStart"] = new DateField(new Date()); AudioBox.ActiveRecordings.push(self.props.Document); @@ -143,7 +144,7 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume body: formData }); const files = await res.json(); - const url = Utils.prepend(files[0].path); + const url = Utils.prepend(files[0].result.accessPaths.agnostic.client); // upload to server with known URL self.props.Document[self.props.fieldKey] = new AudioField(url); }; @@ -153,8 +154,8 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume self._recorder.start(); setTimeout(() => { self.stopRecording(); - gumStream.getAudioTracks()[0].stop(); - }, 60 * 60 * 1000); // stop after an hour? + self._stream?.getAudioTracks()[0].stop(); + }, 60 * 1000); // stop after a minute }); } @@ -169,6 +170,7 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume this._recorder.stop(); this.dataDoc.duration = (new Date().getTime() - this._recordStart) / 1000; this._audioState = "recorded"; + this._stream?.getAudioTracks()[0].stop(); const ind = AudioBox.ActiveRecordings.indexOf(this.props.Document); ind !== -1 && (AudioBox.ActiveRecordings.splice(ind, 1)); }); @@ -185,7 +187,7 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume e.stopPropagation(); } onStop = (e: any) => { - this.pause(); + this.stopRecording(); this._ele!.currentTime = 0; e.stopPropagation(); } @@ -210,6 +212,7 @@ export class AudioBox extends DocExtendableComponent<FieldViewProps, AudioDocume </audio>; } + // line 226 is stop button but it doesn't do anything render() { const interactive = this.active() ? "-interactive" : ""; return <div className={`audiobox-container`} onContextMenu={this.specificContextMenu} diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts index 095567be1..4b66938a6 100644 --- a/src/server/ApiManagers/UploadManager.ts +++ b/src/server/ApiManagers/UploadManager.ts @@ -72,6 +72,7 @@ export default class UploadManager extends ApiManager { method: Method.POST, subscription: "/uploadRemoteImage", secureHandler: async ({ req, res }) => { + const { sources } = req.body; if (Array.isArray(sources)) { const results = await Promise.all(sources.map(source => DashUploadUtils.UploadImage(source))); @@ -85,6 +86,7 @@ export default class UploadManager extends ApiManager { method: Method.POST, subscription: "/uploadDoc", secureHandler: ({ req, res }) => { + const form = new formidable.IncomingForm(); form.keepExtensions = true; // let path = req.body.path; @@ -189,6 +191,7 @@ export default class UploadManager extends ApiManager { method: Method.POST, subscription: "/inspectImage", secureHandler: async ({ req, res }) => { + const { source } = req.body; if (typeof source === "string") { return res.send(await DashUploadUtils.InspectImage(source)); diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts index 7cbfc4408..fb4e87c08 100644 --- a/src/server/DashUploadUtils.ts +++ b/src/server/DashUploadUtils.ts @@ -78,7 +78,8 @@ export namespace DashUploadUtils { } case "audio": if (audioFormats.includes(format)) { - return UploadAudio(file); + console.log("1"); + return MoveParsedFile(file, Directory.audio); } } @@ -86,16 +87,9 @@ export namespace DashUploadUtils { return { source: file, result: new Error(`Could not upload unsupported file (${name}) with upload type (${type}).`) }; } - async function uploadAudio(file: File) { + async function UploadAudio(file: File) { const { path: sourcePath } = file; - const dataBuffer = readFileSync(sourcePath); - await new Promise<void>((resolve, reject) => { - const name = path.basename(sourcePath); - const audioFilename = `${name.substring(0, name.length - 4)}.mp3`; - const writeStream = createWriteStream(serverPathToFile(Directory.audio, audioFilename)); - writeStream.write(result.text, error => error ? reject(error) : resolve()); - }); return MoveParsedFile(file, Directory.audio); } @@ -109,6 +103,7 @@ export namespace DashUploadUtils { const writeStream = createWriteStream(serverPathToFile(Directory.text, textFilename)); writeStream.write(result.text, error => error ? reject(error) : resolve()); }); + console.log(MoveParsedFile(file, Directory.pdfs)); return MoveParsedFile(file, Directory.pdfs); } @@ -212,8 +207,10 @@ export namespace DashUploadUtils { accessPaths: { agnostic: getAccessPaths(destination, name) } + } - }); + } + ); }); }); } diff --git a/src/server/SharedMediaTypes.ts b/src/server/SharedMediaTypes.ts index 55c0d14e8..3d3683912 100644 --- a/src/server/SharedMediaTypes.ts +++ b/src/server/SharedMediaTypes.ts @@ -10,7 +10,7 @@ export namespace AcceptibleMedia { export const imageFormats = [...pngs, ...jpgs, ...gifs, ...webps, ...tiffs]; export const videoFormats = [".mov", ".mp4"]; export const applicationFormats = [".pdf"]; - export const audioFormats = [".wav", ".mp3", ".flac", ".au", ".aiff", ".m4a"]; + export const audioFormats = [".wav", ".mp3", ".flac", ".au", ".aiff", ".m4a", ".webm;codecs=opus"]; } export namespace Upload { |