chore: if default power level is missing in power levels state event, show its default value (#2920)
This commit is contained in:
parent
844155b01e
commit
f619b3345e
2 changed files with 83 additions and 0 deletions
|
|
@ -7,6 +7,7 @@ import 'package:go_router/go_router.dart';
|
|||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings_view.dart';
|
||||
import 'package:fluffychat/pangea/chat/constants/default_power_level.dart';
|
||||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
import 'package:fluffychat/widgets/permission_slider_dialog.dart';
|
||||
|
|
@ -71,6 +72,59 @@ class ChatPermissionsSettingsController extends State<ChatPermissionsSettings> {
|
|||
false),
|
||||
);
|
||||
|
||||
// #Pangea
|
||||
Map<String, dynamic> get defaultPowerLevels {
|
||||
final chatPowerLevels = RoomDefaults.defaultPowerLevels(
|
||||
Matrix.of(context).client.userID!,
|
||||
).content;
|
||||
|
||||
final spacePowerLevels = RoomDefaults.defaultSpacePowerLevels(
|
||||
Matrix.of(context).client.userID!,
|
||||
).content;
|
||||
|
||||
if (roomId == null) return chatPowerLevels;
|
||||
final room = Matrix.of(context).client.getRoomById(roomId!);
|
||||
if (room == null) return chatPowerLevels;
|
||||
|
||||
return room.isSpace ? spacePowerLevels : chatPowerLevels;
|
||||
}
|
||||
|
||||
int getDefaultValue(
|
||||
String permissionKey, {
|
||||
String? category,
|
||||
}) {
|
||||
final room = Matrix.of(context).client.getRoomById(roomId!);
|
||||
if (room == null) return 0;
|
||||
final powerLevelsContent = Map<String, Object?>.from(
|
||||
room.getState(EventTypes.RoomPowerLevels)?.content ?? {},
|
||||
);
|
||||
|
||||
final powerLevels = Map<String, dynamic>.from(powerLevelsContent)
|
||||
..removeWhere((k, v) => v is! int);
|
||||
|
||||
if (category == null) {
|
||||
switch (permissionKey) {
|
||||
case 'users_default':
|
||||
case 'events_default':
|
||||
return powerLevels[permissionKey] ?? 0;
|
||||
case 'state_default':
|
||||
return powerLevels[permissionKey] ?? 50;
|
||||
case 'ban':
|
||||
case 'kick':
|
||||
case 'invite':
|
||||
return powerLevels[permissionKey] ?? 0;
|
||||
case 'redact':
|
||||
return powerLevels[permissionKey] ??
|
||||
powerLevels['events_default'] ??
|
||||
0;
|
||||
}
|
||||
} else if (category == 'events') {
|
||||
return room.powerForChangingStateEvent(permissionKey);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// Pangea#
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ChatPermissionsSettingsView(this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,6 +44,35 @@ class ChatPermissionsSettingsView extends StatelessWidget {
|
|||
final eventsPowerLevels = Map<String, int?>.from(
|
||||
powerLevelsContent.tryGetMap<String, int?>('events') ?? {},
|
||||
)..removeWhere((k, v) => v is! int);
|
||||
// #Pangea
|
||||
final defaults = Map<String, dynamic>.from(
|
||||
controller.defaultPowerLevels,
|
||||
);
|
||||
|
||||
Map<String, dynamic> missingPowerLevels = Map<String, dynamic>.from(
|
||||
defaults,
|
||||
)..removeWhere((k, v) => v is! int || powerLevels.containsKey(k));
|
||||
|
||||
missingPowerLevels = missingPowerLevels.map(
|
||||
(key, value) => MapEntry(key, controller.getDefaultValue(key)),
|
||||
);
|
||||
|
||||
Map<String, int?> missingEventsPowerLevels = Map<String, int?>.from(
|
||||
defaults.tryGetMap<String, int?>('events') ?? {},
|
||||
)..removeWhere(
|
||||
(k, v) => v is! int || eventsPowerLevels.containsKey(k),
|
||||
);
|
||||
|
||||
missingEventsPowerLevels = missingEventsPowerLevels.map(
|
||||
(key, value) => MapEntry(
|
||||
key,
|
||||
controller.getDefaultValue(key, category: 'events'),
|
||||
),
|
||||
);
|
||||
|
||||
powerLevels.addAll(missingPowerLevels);
|
||||
eventsPowerLevels.addAll(missingEventsPowerLevels);
|
||||
// Pangea#
|
||||
return Column(
|
||||
children: [
|
||||
ListTile(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue