From 1dbb81ed833b2b61b99c2d71ad37e3a9cd8034c1 Mon Sep 17 00:00:00 2001 From: Krille Date: Fri, 10 May 2024 08:15:14 +0200 Subject: [PATCH] chore: Revert check message size before fake sync This lead to the huge problem that there is no user feedback between sending a message and seeing it in the timeline as it is encrypted before the first user feedback is shown. But the encryption step is async and also includes fetching devices if necessary so that can take seconds or even forever on bad internet connection. This reverts commit 981c3ea94dc1e99e365f0549becea3c77bfc0c25. --- lib/src/room.dart | 36 +++++++++++++++++----------------- lib/src/voip/call_session.dart | 22 ++++++++++----------- 2 files changed, 29 insertions(+), 29 deletions(-) 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, {