Fill in some metadata for the sent event
This commit is contained in:
parent
6127669c53
commit
6f794cca9b
2 changed files with 37 additions and 1 deletions
|
@ -55,7 +55,30 @@ export default class VoiceRecordComposerTile extends React.PureComponent<IProps,
|
||||||
MatrixClientPeg.get().sendMessage(this.props.room.roomId, {
|
MatrixClientPeg.get().sendMessage(this.props.room.roomId, {
|
||||||
body: "Voice message",
|
body: "Voice message",
|
||||||
msgtype: "org.matrix.msc2516.voice",
|
msgtype: "org.matrix.msc2516.voice",
|
||||||
|
//msgtype: MsgType.Audio,
|
||||||
url: mxc,
|
url: mxc,
|
||||||
|
info: {
|
||||||
|
duration: Math.round(this.state.recorder.durationSeconds * 1000),
|
||||||
|
mimetype: this.state.recorder.contentType,
|
||||||
|
size: this.state.recorder.contentLength,
|
||||||
|
},
|
||||||
|
|
||||||
|
// MSC1767 experiment
|
||||||
|
"org.matrix.msc1767.text": "Voice message",
|
||||||
|
"org.matrix.msc1767.file": {
|
||||||
|
url: mxc,
|
||||||
|
name: "Voice message.ogg",
|
||||||
|
mimetype: this.state.recorder.contentType,
|
||||||
|
size: this.state.recorder.contentLength,
|
||||||
|
},
|
||||||
|
"org.matrix.msc1767.audio": {
|
||||||
|
duration: Math.round(this.state.recorder.durationSeconds * 1000),
|
||||||
|
// TODO: @@ TravisR: Waveform? (MSC1767 decision)
|
||||||
|
},
|
||||||
|
"org.matrix.experimental.msc2516.voice": { // MSC2516+MSC1767 experiment
|
||||||
|
duration: Math.round(this.state.recorder.durationSeconds * 1000),
|
||||||
|
// TODO: @@ TravisR: Waveform.
|
||||||
|
},
|
||||||
});
|
});
|
||||||
await VoiceRecordingStore.instance.disposeRecording();
|
await VoiceRecordingStore.instance.disposeRecording();
|
||||||
this.setState({recorder: null});
|
this.setState({recorder: null});
|
||||||
|
|
|
@ -59,6 +59,19 @@ export class VoiceRecording extends EventEmitter implements IDestroyable {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get contentType(): string {
|
||||||
|
return "audio/ogg";
|
||||||
|
}
|
||||||
|
|
||||||
|
public get contentLength(): number {
|
||||||
|
return this.buffer.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get durationSeconds(): number {
|
||||||
|
if (!this.recorder) throw new Error("Duration not available without a recording");
|
||||||
|
return this.recorderContext.currentTime;
|
||||||
|
}
|
||||||
|
|
||||||
private async makeRecorder() {
|
private async makeRecorder() {
|
||||||
this.recorderStream = await navigator.mediaDevices.getUserMedia({
|
this.recorderStream = await navigator.mediaDevices.getUserMedia({
|
||||||
audio: {
|
audio: {
|
||||||
|
@ -240,7 +253,7 @@ export class VoiceRecording extends EventEmitter implements IDestroyable {
|
||||||
|
|
||||||
this.emit(RecordingState.Uploading);
|
this.emit(RecordingState.Uploading);
|
||||||
this.mxc = await this.client.uploadContent(new Blob([this.buffer], {
|
this.mxc = await this.client.uploadContent(new Blob([this.buffer], {
|
||||||
type: "audio/ogg",
|
type: this.contentType,
|
||||||
}), {
|
}), {
|
||||||
onlyContentUri: false, // to stop the warnings in the console
|
onlyContentUri: false, // to stop the warnings in the console
|
||||||
}).then(r => r['content_uri']);
|
}).then(r => r['content_uri']);
|
||||||
|
|
Loading…
Reference in a new issue