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 || content['org.matrix.msc3245.voice'] is Map; } 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 sendAudioEvent( MatrixAudioFile audioFile, { Event? replyTo, bool isVoiceMessage = false, int? durationInMs, List? waveform, Map? otherFileInfo, }) { final extraContent = >{}; 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'] = {}; } extraContent['org.matrix.msc1767.audio'] = { 'duration': durationInMs, 'waveform': waveform, }; return sendFileEvent( audioFile, inReplyTo: replyTo, extraContent: extraContent, ); } }