diff --git a/lib/src/room.dart b/lib/src/room.dart index e0962762..04d3a362 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -942,11 +942,24 @@ class Room { Future _sendContent( String type, - Map sendMessageContent, { + Map content, { String? txid, }) async { txid ??= client.generateUniqueTransactionId(); + final mustEncrypt = encrypted && client.encryptionEnabled; + + final sendMessageContent = mustEncrypt + ? await client.encryption! + .encryptGroupMessagePayload(id, content, type: type) + : content; + + final utf8EncodedJsonLength = + utf8.encode(jsonEncode(sendMessageContent)).length; + + if (utf8EncodedJsonLength > maxPDUSize) { + throw EventTooLarge(utf8EncodedJsonLength); + } return await client.sendMessage( id, sendMessageContent.containsKey('ciphertext') @@ -1059,21 +1072,6 @@ class Room { } } final sentDate = DateTime.now(); - - final mustEncrypt = encrypted && client.encryptionEnabled; - - final sendMessageContent = mustEncrypt - ? await client.encryption! - .encryptGroupMessagePayload(id, content, type: type) - : content; - - final utf8EncodedJsonLength = - utf8.encode(jsonEncode(sendMessageContent)).length; - - if (utf8EncodedJsonLength > maxPDUSize) { - throw EventTooLarge(utf8EncodedJsonLength); - } - final syncUpdate = SyncUpdate( nextBatch: '', rooms: RoomsUpdate( @@ -1113,11 +1111,13 @@ class Room { try { res = await _sendContent( type, - sendMessageContent, + content, txid: messageID, ); } catch (e, s) { - if (e is MatrixException && + if (e is EventTooLarge) { + rethrow; + } else if (e is MatrixException && e.retryAfterMs != null && !DateTime.now() .add(Duration(milliseconds: e.retryAfterMs!)) diff --git a/lib/src/voip/call_session.dart b/lib/src/voip/call_session.dart index d16e420e..17aac5bf 100644 --- a/lib/src/voip/call_session.dart +++ b/lib/src/voip/call_session.dart @@ -1459,7 +1459,7 @@ class CallSession { if (capabilities != null) 'capabilities': capabilities.toJson(), if (metadata != null) sdpStreamMetadataKey: metadata.toJson(), }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberInvite : EventTypes.CallInvite, content, @@ -1487,7 +1487,7 @@ class CallSession { 'selected_party_id': selected_party_id, }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberSelectAnswer @@ -1510,7 +1510,7 @@ class CallSession { 'version': version, }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberReject : EventTypes.CallReject, content, @@ -1540,7 +1540,7 @@ class CallSession { if (capabilities != null) 'capabilities': capabilities.toJson(), if (metadata != null) sdpStreamMetadataKey: metadata.toJson(), }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberNegotiate @@ -1585,7 +1585,7 @@ class CallSession { 'version': version, 'candidates': candidates, }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberCandidates @@ -1617,7 +1617,7 @@ class CallSession { if (capabilities != null) 'capabilities': capabilities.toJson(), if (metadata != null) sdpStreamMetadataKey: metadata.toJson(), }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberAnswer : EventTypes.CallAnswer, content, @@ -1639,7 +1639,7 @@ class CallSession { 'version': version, if (hangupCause != null) 'reason': hangupCause, }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberHangup : EventTypes.CallHangup, content, @@ -1671,7 +1671,7 @@ class CallSession { 'version': version, sdpStreamMetadataKey: metadata.toJson(), }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberSDPStreamMetadataChanged @@ -1697,7 +1697,7 @@ class CallSession { 'version': version, ...callReplaces.toJson(), }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberReplaces @@ -1723,7 +1723,7 @@ class CallSession { 'version': version, 'asserted_identity': assertedIdentity.toJson(), }; - return await _sendCallContent( + return await _sendContent( room, isGroupCall ? EventTypes.GroupCallMemberAssertedIdentity @@ -1733,7 +1733,7 @@ class CallSession { ); } - Future _sendCallContent( + Future _sendContent( Room room, String type, Map content, {