diff --git a/lib/pages/chat_list.dart b/lib/pages/chat_list.dart index 054f7de4..438f8d56 100644 --- a/lib/pages/chat_list.dart +++ b/lib/pages/chat_list.dart @@ -177,6 +177,28 @@ class ChatListController extends State { super.dispose(); } + bool roomCheck(Room room) { + if (room.isSpace) return false; + if (activeSpaceId != null) { + final space = Matrix.of(context).client.getRoomById(activeSpaceId); + if (space.spaceChildren.any((child) => child.roomId == room.id)) { + return true; + } + if (room.spaceParents.any((parent) => parent.roomId == activeSpaceId)) { + return true; + } + if (room.isDirectChat && + room.summary.mHeroes.any((userId) { + final user = space.getState(EventTypes.RoomMember, userId)?.asUser; + return user != null && user.membership == Membership.join; + })) { + return true; + } + return false; + } + return true; + } + void toggleSelection(String roomId) { setState(() => selectedRoomIds.contains(roomId) ? selectedRoomIds.remove(roomId) diff --git a/lib/pages/views/chat_list_view.dart b/lib/pages/views/chat_list_view.dart index e0b88d17..bbdc5151 100644 --- a/lib/pages/views/chat_list_view.dart +++ b/lib/pages/views/chat_list_view.dart @@ -252,12 +252,8 @@ class _ChatListViewBody extends StatelessWidget { builder: (BuildContext context, snapshot) { if (Matrix.of(context).client.prevBatch != null) { final rooms = List.from(Matrix.of(context).client.rooms) - .where((r) => !r.isSpace) + .where(controller.roomCheck) .toList(); - if (controller.activeSpaceId != null) { - rooms.removeWhere((room) => !room.spaceParents.any( - (parent) => parent.roomId == controller.activeSpaceId)); - } rooms.removeWhere((room) => room.lastEvent == null); if (rooms.isEmpty) { return Column(