2021-04-15 06:48:26 +00:00
|
|
|
import 'dart:developer';
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
2021-10-26 16:50:34 +00:00
|
|
|
|
2021-04-15 06:48:26 +00:00
|
|
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
2021-10-26 16:50:34 +00:00
|
|
|
import 'package:future_loading_dialog/future_loading_dialog.dart';
|
2023-08-02 10:08:23 +00:00
|
|
|
import 'package:go_router/go_router.dart';
|
2021-06-18 08:29:48 +00:00
|
|
|
import 'package:matrix/matrix.dart';
|
2021-04-15 06:48:26 +00:00
|
|
|
|
2021-11-09 20:32:16 +00:00
|
|
|
import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings_view.dart';
|
2021-10-26 16:50:34 +00:00
|
|
|
import 'package:fluffychat/widgets/matrix.dart';
|
2024-04-15 07:50:50 +00:00
|
|
|
import 'package:fluffychat/widgets/permission_slider_dialog.dart';
|
2021-10-26 16:50:34 +00:00
|
|
|
|
2021-04-15 06:48:26 +00:00
|
|
|
class ChatPermissionsSettings extends StatefulWidget {
|
2023-10-28 11:03:16 +00:00
|
|
|
const ChatPermissionsSettings({super.key});
|
2021-04-15 06:48:26 +00:00
|
|
|
|
|
|
|
@override
|
|
|
|
ChatPermissionsSettingsController createState() =>
|
|
|
|
ChatPermissionsSettingsController();
|
|
|
|
}
|
|
|
|
|
|
|
|
class ChatPermissionsSettingsController extends State<ChatPermissionsSettings> {
|
2023-08-07 16:40:02 +00:00
|
|
|
String? get roomId => GoRouterState.of(context).pathParameters['roomid'];
|
2023-03-02 09:57:52 +00:00
|
|
|
void editPowerLevel(
|
|
|
|
BuildContext context,
|
|
|
|
String key,
|
|
|
|
int currentLevel, {
|
2024-04-15 07:32:06 +00:00
|
|
|
int? newLevel,
|
2023-03-02 09:57:52 +00:00
|
|
|
String? category,
|
|
|
|
}) async {
|
2022-01-29 11:35:03 +00:00
|
|
|
final room = Matrix.of(context).client.getRoomById(roomId!)!;
|
2021-04-15 06:48:26 +00:00
|
|
|
if (!room.canSendEvent(EventTypes.RoomPowerLevels)) {
|
2022-01-29 11:35:03 +00:00
|
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
2023-03-02 09:57:52 +00:00
|
|
|
SnackBar(content: Text(L10n.of(context)!.noPermission)),
|
|
|
|
);
|
2021-04-15 06:48:26 +00:00
|
|
|
return;
|
|
|
|
}
|
2024-04-15 07:50:50 +00:00
|
|
|
newLevel ??= await showPermissionChooser(
|
|
|
|
context,
|
|
|
|
currentLevel: currentLevel,
|
2022-07-30 06:36:17 +00:00
|
|
|
);
|
2021-04-15 06:48:26 +00:00
|
|
|
if (newLevel == null) return;
|
|
|
|
final content = Map<String, dynamic>.from(
|
2023-03-02 09:57:52 +00:00
|
|
|
room.getState(EventTypes.RoomPowerLevels)!.content,
|
|
|
|
);
|
2021-04-15 06:48:26 +00:00
|
|
|
if (category != null) {
|
|
|
|
if (!content.containsKey(category)) {
|
|
|
|
content[category] = <String, dynamic>{};
|
|
|
|
}
|
|
|
|
content[category][key] = newLevel;
|
|
|
|
} else {
|
|
|
|
content[key] = newLevel;
|
|
|
|
}
|
|
|
|
inspect(content);
|
|
|
|
await showFutureLoadingDialog(
|
|
|
|
context: context,
|
2021-08-18 15:24:59 +00:00
|
|
|
future: () => room.client.setRoomStateWithKey(
|
|
|
|
room.id,
|
|
|
|
EventTypes.RoomPowerLevels,
|
|
|
|
'',
|
|
|
|
content,
|
|
|
|
),
|
2021-04-15 06:48:26 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Stream get onChanged => Matrix.of(context).client.onSync.stream.where(
|
|
|
|
(e) =>
|
2022-01-29 11:35:03 +00:00
|
|
|
(e.rooms?.join?.containsKey(roomId) ?? false) &&
|
|
|
|
(e.rooms!.join![roomId!]?.timeline?.events
|
2021-04-15 06:48:26 +00:00
|
|
|
?.any((s) => s.type == EventTypes.RoomPowerLevels) ??
|
|
|
|
false),
|
|
|
|
);
|
|
|
|
|
|
|
|
@override
|
2021-05-22 07:13:47 +00:00
|
|
|
Widget build(BuildContext context) => ChatPermissionsSettingsView(this);
|
2021-04-15 06:48:26 +00:00
|
|
|
}
|