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 981c3ea94d.
This commit is contained in:
Krille 2024-05-10 08:15:14 +02:00
parent e89c9ac89b
commit 1dbb81ed83
No known key found for this signature in database
GPG Key ID: E067ECD60F1A0652
2 changed files with 29 additions and 29 deletions

View File

@ -942,11 +942,24 @@ class Room {
Future<String?> _sendContent( Future<String?> _sendContent(
String type, String type,
Map<String, dynamic> sendMessageContent, { Map<String, dynamic> content, {
String? txid, String? txid,
}) async { }) async {
txid ??= client.generateUniqueTransactionId(); 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( return await client.sendMessage(
id, id,
sendMessageContent.containsKey('ciphertext') sendMessageContent.containsKey('ciphertext')
@ -1059,21 +1072,6 @@ class Room {
} }
} }
final sentDate = DateTime.now(); 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( final syncUpdate = SyncUpdate(
nextBatch: '', nextBatch: '',
rooms: RoomsUpdate( rooms: RoomsUpdate(
@ -1113,11 +1111,13 @@ class Room {
try { try {
res = await _sendContent( res = await _sendContent(
type, type,
sendMessageContent, content,
txid: messageID, txid: messageID,
); );
} catch (e, s) { } catch (e, s) {
if (e is MatrixException && if (e is EventTooLarge) {
rethrow;
} else if (e is MatrixException &&
e.retryAfterMs != null && e.retryAfterMs != null &&
!DateTime.now() !DateTime.now()
.add(Duration(milliseconds: e.retryAfterMs!)) .add(Duration(milliseconds: e.retryAfterMs!))

View File

@ -1459,7 +1459,7 @@ class CallSession {
if (capabilities != null) 'capabilities': capabilities.toJson(), if (capabilities != null) 'capabilities': capabilities.toJson(),
if (metadata != null) sdpStreamMetadataKey: metadata.toJson(), if (metadata != null) sdpStreamMetadataKey: metadata.toJson(),
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall ? EventTypes.GroupCallMemberInvite : EventTypes.CallInvite, isGroupCall ? EventTypes.GroupCallMemberInvite : EventTypes.CallInvite,
content, content,
@ -1487,7 +1487,7 @@ class CallSession {
'selected_party_id': selected_party_id, 'selected_party_id': selected_party_id,
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall isGroupCall
? EventTypes.GroupCallMemberSelectAnswer ? EventTypes.GroupCallMemberSelectAnswer
@ -1510,7 +1510,7 @@ class CallSession {
'version': version, 'version': version,
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall ? EventTypes.GroupCallMemberReject : EventTypes.CallReject, isGroupCall ? EventTypes.GroupCallMemberReject : EventTypes.CallReject,
content, content,
@ -1540,7 +1540,7 @@ class CallSession {
if (capabilities != null) 'capabilities': capabilities.toJson(), if (capabilities != null) 'capabilities': capabilities.toJson(),
if (metadata != null) sdpStreamMetadataKey: metadata.toJson(), if (metadata != null) sdpStreamMetadataKey: metadata.toJson(),
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall isGroupCall
? EventTypes.GroupCallMemberNegotiate ? EventTypes.GroupCallMemberNegotiate
@ -1585,7 +1585,7 @@ class CallSession {
'version': version, 'version': version,
'candidates': candidates, 'candidates': candidates,
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall isGroupCall
? EventTypes.GroupCallMemberCandidates ? EventTypes.GroupCallMemberCandidates
@ -1617,7 +1617,7 @@ class CallSession {
if (capabilities != null) 'capabilities': capabilities.toJson(), if (capabilities != null) 'capabilities': capabilities.toJson(),
if (metadata != null) sdpStreamMetadataKey: metadata.toJson(), if (metadata != null) sdpStreamMetadataKey: metadata.toJson(),
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall ? EventTypes.GroupCallMemberAnswer : EventTypes.CallAnswer, isGroupCall ? EventTypes.GroupCallMemberAnswer : EventTypes.CallAnswer,
content, content,
@ -1639,7 +1639,7 @@ class CallSession {
'version': version, 'version': version,
if (hangupCause != null) 'reason': hangupCause, if (hangupCause != null) 'reason': hangupCause,
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall ? EventTypes.GroupCallMemberHangup : EventTypes.CallHangup, isGroupCall ? EventTypes.GroupCallMemberHangup : EventTypes.CallHangup,
content, content,
@ -1671,7 +1671,7 @@ class CallSession {
'version': version, 'version': version,
sdpStreamMetadataKey: metadata.toJson(), sdpStreamMetadataKey: metadata.toJson(),
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall isGroupCall
? EventTypes.GroupCallMemberSDPStreamMetadataChanged ? EventTypes.GroupCallMemberSDPStreamMetadataChanged
@ -1697,7 +1697,7 @@ class CallSession {
'version': version, 'version': version,
...callReplaces.toJson(), ...callReplaces.toJson(),
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall isGroupCall
? EventTypes.GroupCallMemberReplaces ? EventTypes.GroupCallMemberReplaces
@ -1723,7 +1723,7 @@ class CallSession {
'version': version, 'version': version,
'asserted_identity': assertedIdentity.toJson(), 'asserted_identity': assertedIdentity.toJson(),
}; };
return await _sendCallContent( return await _sendContent(
room, room,
isGroupCall isGroupCall
? EventTypes.GroupCallMemberAssertedIdentity ? EventTypes.GroupCallMemberAssertedIdentity
@ -1733,7 +1733,7 @@ class CallSession {
); );
} }
Future<String?> _sendCallContent( Future<String?> _sendContent(
Room room, Room room,
String type, String type,
Map<String, Object> content, { Map<String, Object> content, {