diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 6c1eb16af..bb98b8acb 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -2305,6 +2305,36 @@ class ChatController extends State ); } } + + Future onLeave() async { + final parentSpaceId = room.courseParent?.id; + final confirmed = await showOkCancelAlertDialog( + context: context, + title: L10n.of(context).areYouSure, + message: L10n.of(context).leaveRoomDescription, + okLabel: L10n.of(context).leave, + cancelLabel: L10n.of(context).cancel, + isDestructive: true, + ); + if (confirmed != OkCancelResult.ok) return; + final result = await showFutureLoadingDialog( + context: context, + future: widget.room.leave, + ); + + if (result.isError) return; + final r = Matrix.of(context).client.getRoomById(widget.room.id); + if (r != null && r.membership != Membership.leave) { + await Matrix.of(context).client.waitForRoomInSync( + widget.room.id, + leave: true, + ); + } + + context.go( + parentSpaceId != null ? '/rooms/spaces/$parentSpaceId' : '/rooms', + ); + } // Pangea# late final ValueNotifier _displayChatDetailsColumn; diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index f44442636..6a22938c5 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -147,7 +147,10 @@ class ChatView extends StatelessWidget { if (controller.room.showActivityChatUI) { return [ ActivityMenuButton(controller: controller), - ActivitySessionPopupMenu(controller.room), + ActivitySessionPopupMenu( + controller.room, + onLeave: controller.onLeave, + ), ]; } diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart index c0826cace..e45f9adfb 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart @@ -6,15 +6,14 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_details/chat_download_provider.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; enum ActivityPopupMenuActions { invite, leave, download } class ActivitySessionPopupMenu extends StatefulWidget { final Room room; + final VoidCallback onLeave; - const ActivitySessionPopupMenu(this.room, {super.key}); + const ActivitySessionPopupMenu(this.room, {required this.onLeave, super.key}); @override ActivitySessionPopupMenuState createState() => @@ -30,28 +29,7 @@ class ActivitySessionPopupMenuState extends State onSelected: (choice) async { switch (choice) { case ActivityPopupMenuActions.leave: - final parentSpaceId = widget.room.courseParent?.id; - final router = GoRouter.of(context); - final confirmed = await showOkCancelAlertDialog( - context: context, - title: L10n.of(context).areYouSure, - message: L10n.of(context).leaveRoomDescription, - okLabel: L10n.of(context).leave, - cancelLabel: L10n.of(context).cancel, - isDestructive: true, - ); - if (confirmed != OkCancelResult.ok) return; - final result = await showFutureLoadingDialog( - context: context, - future: () => widget.room.leave(), - ); - if (result.error == null) { - router.go( - parentSpaceId != null - ? '/rooms/spaces/$parentSpaceId' - : '/rooms', - ); - } + widget.onLeave(); break; case ActivityPopupMenuActions.invite: context.go( diff --git a/lib/pangea/analytics_misc/put_analytics_controller.dart b/lib/pangea/analytics_misc/put_analytics_controller.dart index 40243ccd8..11e82a6df 100644 --- a/lib/pangea/analytics_misc/put_analytics_controller.dart +++ b/lib/pangea/analytics_misc/put_analytics_controller.dart @@ -57,14 +57,6 @@ class PutAnalyticsController { } void initialize() { - final Room? analyticsRoom = _client.analyticsRoomLocal( - _pangeaController.languageController.userL2!, - ); - - if (analyticsRoom != null) { - savedActivitiesNotifier.value = analyticsRoom.activityRoomIds; - } - _languageStream ??= _pangeaController.userController.languageStream.stream .listen(_onUpdateLanguages); _refreshAnalyticsIfOutdated();