Merge pull request #1791 from famedly/krille/cache-direct-chat-matrix-id

refactor: Cache direct chat matrix ID
This commit is contained in:
Krille-chan 2024-05-10 11:01:40 +02:00 committed by GitHub
commit 9cc7c0e581
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 15 additions and 3 deletions

View File

@ -356,15 +356,27 @@ class Room {
}); });
} }
String? _cachedDirectChatMatrixId;
/// If this room is a direct chat, this is the matrix ID of the user. /// If this room is a direct chat, this is the matrix ID of the user.
/// Returns null otherwise. /// Returns null otherwise.
String? get directChatMatrixID { String? get directChatMatrixID {
// Calculating the directChatMatrixId can be expensive. We cache it and
// validate the cache instead every time.
final cache = _cachedDirectChatMatrixId;
if (cache != null) {
final roomIds = client.directChats[cache];
if (roomIds is List && roomIds.contains(id)) {
return cache;
}
}
if (membership == Membership.invite) { if (membership == Membership.invite) {
final userID = client.userID; final userID = client.userID;
if (userID == null) return null; if (userID == null) return null;
final invitation = getState(EventTypes.RoomMember, userID); final invitation = getState(EventTypes.RoomMember, userID);
if (invitation != null && invitation.content['is_direct'] == true) { if (invitation != null && invitation.content['is_direct'] == true) {
return invitation.senderId; return _cachedDirectChatMatrixId = invitation.senderId;
} }
} }
@ -373,8 +385,8 @@ class Room {
final roomIds = e.value; final roomIds = e.value;
return roomIds is List<dynamic> && roomIds.contains(id); return roomIds is List<dynamic> && roomIds.contains(id);
})?.key; })?.key;
if (mxId?.isValidMatrixId == true) return mxId; if (mxId?.isValidMatrixId == true) return _cachedDirectChatMatrixId = mxId;
return null; return _cachedDirectChatMatrixId = null;
} }
/// Wheither this is a direct chat or not /// Wheither this is a direct chat or not