42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			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,
 | |
|     );
 | |
|   }
 | |
| }
 |