Merge pull request #443 from pangeachat/only-one-direct-parent
prevent adding a room to multiple spacespull/1384/head
commit
628871ed3d
@ -1,41 +0,0 @@
|
|||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue