diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index b57e4bdd6..954a19c14 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -451,9 +451,22 @@ class _SpaceViewState extends State { // #Pangea Future loadChatCounts() async { - for (final Room room in Matrix.of(context).client.rooms) { - if (room.isSpace && !chatCounts.containsKey(room.id)) { - await loadHierarchy(null, room.id); + // if not in the call spaces view, don't load chat count yet + if (widget.controller.activeSpaceId != null) return; + + final List allSpaces = + Matrix.of(context).client.rooms.where((room) => room.isSpace).toList(); + + for (final Room space in allSpaces) { + // check if the space is visible in the all spaces list + final bool isRootSpace = !allSpaces.any( + (parentSpace) => + parentSpace.spaceChildren.any((child) => child.roomId == space.id), + ); + + // if it's visible, and it hasn't been loaded yet, load chat count + if (isRootSpace && !chatCounts.containsKey(space.id)) { + await loadHierarchy(null, space.id); } } } @@ -479,6 +492,7 @@ class _SpaceViewState extends State { event.isSpaceChildUpdate( widget.controller.activeSpaceId!, )) { + debugPrint("refresh on update"); await loadHierarchy(); } setState(() => refreshing = false); diff --git a/lib/widgets/unread_rooms_badge.dart b/lib/widgets/unread_rooms_badge.dart index 332fa42a1..9104b0f07 100644 --- a/lib/widgets/unread_rooms_badge.dart +++ b/lib/widgets/unread_rooms_badge.dart @@ -1,6 +1,6 @@ -import 'package:flutter/material.dart'; - import 'package:badges/badges.dart' as b; +import 'package:fluffychat/utils/stream_extension.dart'; +import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'matrix.dart'; @@ -24,7 +24,10 @@ class UnreadRoomsBadge extends StatelessWidget { .client .onSync .stream - .where((syncUpdate) => syncUpdate.hasRoomUpdate), + .where((syncUpdate) => syncUpdate.hasRoomUpdate) + // #Pangea + .rateLimit(const Duration(seconds: 1)), + // Pangea# builder: (context, _) { // #Pangea // final unreadCount = Matrix.of(context)