You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
Dart
42 lines
1.4 KiB
Dart
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
|
|
import 'package:fluffychat/widgets/matrix.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|
import 'package:matrix/matrix.dart';
|
|
|
|
bool canAddToSpace(Room space, PangeaController pangeaController) {
|
|
final bool pangeaPermission =
|
|
pangeaController.permissionsController.canUserGroupChat(roomID: space.id);
|
|
final Map<String, dynamic> powerLevelsMap =
|
|
space.getState(EventTypes.RoomPowerLevels)?.content ?? {};
|
|
final pl = powerLevelsMap
|
|
.tryGetMap<String, dynamic>('events')
|
|
?.tryGet<int>(EventTypes.SpaceChild) ??
|
|
powerLevelsMap.tryGet<int>('events_default') ??
|
|
50;
|
|
return space.ownPowerLevel >= pl && pangeaPermission;
|
|
}
|
|
|
|
bool chatIsInSpace(Room chat, Room space) {
|
|
return chat.spaceParents.map((e) => e.roomId).toList().contains(space.id);
|
|
}
|
|
|
|
Future<void> pangeaAddToSpace(
|
|
Room space,
|
|
List<String> selectedRoomIds,
|
|
BuildContext context,
|
|
PangeaController pangeaController, {
|
|
bool suggested = true,
|
|
}) async {
|
|
if (!canAddToSpace(space, pangeaController)) {
|
|
throw L10n.of(context)!.noAddToSpacePermissions;
|
|
}
|
|
for (final roomId in selectedRoomIds) {
|
|
final Room? room = Matrix.of(context).client.getRoomById(roomId);
|
|
if (room != null && chatIsInSpace(room, space)) {
|
|
throw L10n.of(context)!.alreadyInSpace;
|
|
}
|
|
await space.setSpaceChild(roomId, suggested: suggested);
|
|
}
|
|
}
|