Skip to content

Commit f758ca7

Browse files
committed
unreads [nfc]: Enhance performance in _removeAllInStreams
1 parent c71160e commit f758ca7

File tree

1 file changed

+11
-22
lines changed

1 file changed

+11
-22
lines changed

lib/model/unreads.dart

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ class Unreads extends ChangeNotifier {
355355
} else {
356356
final messageIdsSet = Set.of(event.messages);
357357
mentions.removeAll(messageIdsSet);
358-
_slowRemoveAllInStreams(messageIdsSet);
358+
_removeAllInStreams(messageIdsSet);
359359
_slowRemoveAllInDms(messageIdsSet);
360360
}
361361
case UpdateMessageFlagsRemoveEvent():
@@ -458,29 +458,18 @@ class Unreads extends ChangeNotifier {
458458
messageIds.map((messageId) => MapEntry(messageId, messageInfo)));
459459
}
460460

461-
// TODO use efficient model lookups
462-
void _slowRemoveAllInStreams(Set<int> idsToRemove) {
463-
final newlyEmptyStreams = <int>[];
464-
for (final MapEntry(key: streamId, value: topics) in streams.entries) {
465-
final newlyEmptyTopics = <String>[];
466-
for (final MapEntry(key: topic, value: messageIds) in topics.entries) {
467-
messageIds.removeWhere((id) => idsToRemove.contains(id));
468-
if (messageIds.isEmpty) {
469-
newlyEmptyTopics.add(topic);
461+
void _removeAllInStreams(Set<int> idsToRemove) {
462+
for (var messageId in idsToRemove) {
463+
final info = _reverseStreamsLookup.remove(messageId);
464+
if (info != null && streams[info.streamId]?[info.topic] != null) {
465+
streams[info.streamId]![info.topic]!.remove(messageId);
466+
if (streams[info.streamId]![info.topic]!.isEmpty) {
467+
streams[info.streamId]!.remove(info.topic);
468+
}
469+
if (streams[info.streamId]!.isEmpty) {
470+
streams.remove(info.streamId);
470471
}
471472
}
472-
for (final topic in newlyEmptyTopics) {
473-
topics.remove(topic);
474-
}
475-
if (topics.isEmpty) {
476-
newlyEmptyStreams.add(streamId);
477-
}
478-
}
479-
for (final streamId in newlyEmptyStreams) {
480-
streams.remove(streamId);
481-
}
482-
for (var messageId in idsToRemove) {
483-
_reverseStreamsLookup.remove(messageId);
484473
}
485474
}
486475

0 commit comments

Comments
 (0)