fix: Logic which rooms belong to a space

This commit is contained in:
Christian Pauly 2021-08-01 15:33:26 +02:00
parent 648e690a0d
commit bb7c095ae3
2 changed files with 23 additions and 5 deletions

View File

@ -177,6 +177,28 @@ class ChatListController extends State<ChatList> {
super.dispose(); 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) { void toggleSelection(String roomId) {
setState(() => selectedRoomIds.contains(roomId) setState(() => selectedRoomIds.contains(roomId)
? selectedRoomIds.remove(roomId) ? selectedRoomIds.remove(roomId)

View File

@ -252,12 +252,8 @@ class _ChatListViewBody extends StatelessWidget {
builder: (BuildContext context, snapshot) { builder: (BuildContext context, snapshot) {
if (Matrix.of(context).client.prevBatch != null) { if (Matrix.of(context).client.prevBatch != null) {
final rooms = List<Room>.from(Matrix.of(context).client.rooms) final rooms = List<Room>.from(Matrix.of(context).client.rooms)
.where((r) => !r.isSpace) .where(controller.roomCheck)
.toList(); .toList();
if (controller.activeSpaceId != null) {
rooms.removeWhere((room) => !room.spaceParents.any(
(parent) => parent.roomId == controller.activeSpaceId));
}
rooms.removeWhere((room) => room.lastEvent == null); rooms.removeWhere((room) => room.lastEvent == null);
if (rooms.isEmpty) { if (rooms.isEmpty) {
return Column( return Column(