matrix-dart-sdk/lib/msc_extensions/extension_audio_events/audio_events.dart

42 lines
1.3 KiB
Dart

import 'package:matrix/matrix.dart';
extension AudioEventExtension on Event {
/// returns if the event is a voice message
bool get isVoiceMessage =>
content['org.matrix.msc2516.voice'] is Map<String, Object?> ||
content['org.matrix.msc3245.voice'] is Map<String, Object?>;
}
extension AudioEventRoomExtension on Room {
/// Sends an audio file with appropriate info to this room. Returns the event
/// ID generated by the server for this event.
Future<String?> sendAudioEvent(
MatrixAudioFile audioFile, {
Event? replyTo,
bool isVoiceMessage = false,
int? durationInMs,
List<int>? waveform,
Map<String, dynamic>? otherFileInfo,
}) {
final extraContent = <String, Map<String, Object?>>{};
if (durationInMs != null) {
otherFileInfo ??= {};
otherFileInfo['duration'] = durationInMs;
}
if (otherFileInfo != null) extraContent['info'] = otherFileInfo;
if (isVoiceMessage) {
// No content, this is only used to identify if the event is a voice message.
extraContent['org.matrix.msc3245.voice'] = <String, Object?>{};
}
extraContent['org.matrix.msc1767.audio'] = <String, Object?>{
'duration': durationInMs,
'waveform': waveform,
};
return sendFileEvent(
audioFile,
inReplyTo: replyTo,
extraContent: extraContent,
);
}
}