Skip to content

Commit c71160e

Browse files
committed
unreads: Enhance performance in _isPresentInStreams
1 parent 276971b commit c71160e

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

lib/model/unreads.dart

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ class Unreads extends ChangeNotifier {
259259
final bool isRead = event.flags.contains(MessageFlag.read);
260260
assert(() {
261261
if (!oldUnreadsMissing && !event.messageIds.every((messageId) {
262-
final isUnreadLocally = _slowIsPresentInDms(messageId) || _slowIsPresentInStreams(messageId);
262+
final isUnreadLocally = _slowIsPresentInDms(messageId) || _isPresentInStreams(messageId);
263263
return isUnreadLocally == !isRead;
264264
})) {
265265
// If this happens, then either:
@@ -335,7 +335,7 @@ class Unreads extends ChangeNotifier {
335335
case UpdateMessageFlagsAddEvent():
336336
mentions.addAll(
337337
event.messages.where(
338-
(messageId) => _slowIsPresentInStreams(messageId) || _slowIsPresentInDms(messageId),
338+
(messageId) => _isPresentInStreams(messageId) || _slowIsPresentInDms(messageId),
339339
),
340340
);
341341

@@ -434,13 +434,8 @@ class Unreads extends ChangeNotifier {
434434
notifyListeners();
435435
}
436436

437-
// TODO use efficient lookups
438-
bool _slowIsPresentInStreams(int messageId) {
439-
return streams.values.any(
440-
(topics) => topics.values.any(
441-
(messageIds) => messageIds.contains(messageId),
442-
),
443-
);
437+
bool _isPresentInStreams(int messageId) {
438+
return _reverseStreamsLookup.containsKey(messageId);
444439
}
445440

446441
void _addLastInStreamTopic(int messageId, int streamId, String topic) {

0 commit comments

Comments
 (0)