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,
|
|
);
|
|
}
|
|
}
|