From 21d703d640d0465bd6b5223c676dc9c803c216d5 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 21 May 2025 10:10:13 -0400 Subject: [PATCH] chore: wait for space default rooms in sync before adding them to space (#2861) --- assets/l10n/intl_en.arb | 4 +- lib/pages/new_group/new_group.dart | 27 ++-------- .../spaces/utils/client_spaces_extension.dart | 15 +++++- lib/widgets/navigation_rail.dart | 50 +++++++++++-------- 4 files changed, 51 insertions(+), 45 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index d51ebb769..53efbf38c 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -4952,5 +4952,7 @@ "inviteOtherUsersToRoom": "Invite other users", "changeTheNameOfTheSpace": "Change the name of the space", "changeTheDescription": "Change the description", - "changeThePermissions": "Change the permissions" + "changeThePermissions": "Change the permissions", + "introductions": "Introductions", + "announcements": "Announcements" } diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index bcb397fd7..b2146b55f 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -7,7 +7,6 @@ import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart' as sdk; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/new_group/new_group_view.dart'; import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; import 'package:fluffychat/pangea/chat/constants/default_power_level.dart'; @@ -188,10 +187,8 @@ class NewGroupController extends State { ); } } - // if a timeout happened, don't redirect to the chat - if (error != null) return; - // Pangea# context.go('/rooms/$roomId/invite?filter=groups'); + // Pangea# } Future _createSpace() async { @@ -220,6 +217,8 @@ class NewGroupController extends State { // context.pop(spaceId); final spaceId = await Matrix.of(context).client.createPangeaSpace( name: nameController.text, + introChatName: L10n.of(context).introductions, + announcementsChatName: L10n.of(context).announcements, visibility: groupCanBeFound ? sdk.Visibility.public : sdk.Visibility.private, joinRules: @@ -237,8 +236,6 @@ class NewGroupController extends State { GoogleAnalytics.createClass(room.name, spaceCode); } - // if a timeout happened, don't redirect to the space - if (error != null) return; context.go("/rooms?spaceId=$spaceId"); // Pangea# } @@ -273,23 +270,9 @@ class NewGroupController extends State { switch (createGroupType) { case CreateGroupType.group: - // #Pangea - // await _createGroup(); - await _createGroup().timeout( - const Duration( - seconds: AppConfig.roomCreationTimeoutSeconds, - ), - ); - // Pangea# + await _createGroup(); case CreateGroupType.space: - // #Pangea - // await _createSpace(); - await _createSpace().timeout( - const Duration( - seconds: AppConfig.roomCreationTimeoutSeconds, - ), - ); - // Pangea# + await _createSpace(); } } catch (e, s) { sdk.Logs().d('Unable to create group', e, s); diff --git a/lib/pangea/spaces/utils/client_spaces_extension.dart b/lib/pangea/spaces/utils/client_spaces_extension.dart index 055485339..fe1345768 100644 --- a/lib/pangea/spaces/utils/client_spaces_extension.dart +++ b/lib/pangea/spaces/utils/client_spaces_extension.dart @@ -11,6 +11,8 @@ import 'package:fluffychat/pangea/spaces/utils/space_code.dart'; extension SpacesClientExtension on Client { Future createPangeaSpace({ required String name, + required String introChatName, + required String announcementsChatName, Visibility visibility = Visibility.private, JoinRules joinRules = JoinRules.public, Uint8List? avatar, @@ -39,7 +41,11 @@ extension SpacesClientExtension on Client { final space = await _waitForRoom(roomId); if (space == null) return roomId; - await _addDefaultSpaceChats(space: space); + await _addDefaultSpaceChats( + space: space, + introductionsName: introChatName, + announcementsName: announcementsChatName, + ); return roomId; } @@ -109,6 +115,13 @@ extension SpacesClientExtension on Client { throw Exception('Failed to create default space chats'); } + for (final roomId in roomIds) { + final room = getRoomById(roomId); + if (room == null) { + await waitForRoomInSync(roomId, join: true); + } + } + final addIntroChatFuture = space.pangeaSetSpaceChild( roomIds[0], ); diff --git a/lib/widgets/navigation_rail.dart b/lib/widgets/navigation_rail.dart index 3e04d61b9..7ae9665b5 100644 --- a/lib/widgets/navigation_rail.dart +++ b/lib/widgets/navigation_rail.dart @@ -41,6 +41,7 @@ class SpacesNavigationRail extends StatelessWidget { .uri .path .contains('homepage'); + final isColumnMode = FluffyThemes.isColumnMode(context); // Pangea# return StreamBuilder( key: ValueKey( @@ -63,7 +64,7 @@ class SpacesNavigationRail extends StatelessWidget { return SizedBox( // #Pangea // width: FluffyThemes.navRailWidth, - width: FluffyThemes.isColumnMode(context) + width: isColumnMode ? FluffyThemes.navRailWidth : FluffyThemes.navRailWidth * 0.75, // Pangea# @@ -80,8 +81,12 @@ class SpacesNavigationRail extends StatelessWidget { // #Pangea if (i == 0) { return NaviRailItem( - isSelected: isHomepage, - onTap: () => context.go("/rooms/homepage"), + isSelected: isColumnMode + ? activeSpaceId == null && !isSettings + : isHomepage, + onTap: () => isColumnMode + ? onGoToChats() + : context.go("/rooms/homepage"), icon: const Padding( padding: EdgeInsets.all(10.0), child: Icon(Icons.home_outlined), @@ -97,24 +102,27 @@ class SpacesNavigationRail extends StatelessWidget { i--; // Pangea# if (i == 0) { - return NaviRailItem( - // #Pangea - // isSelected: activeSpaceId == null && !isSettings, - isSelected: - activeSpaceId == null && !isSettings && !isHomepage, - // Pangea# - onTap: onGoToChats, - icon: const Padding( - padding: EdgeInsets.all(10.0), - child: Icon(Icons.forum_outlined), - ), - selectedIcon: const Padding( - padding: EdgeInsets.all(10.0), - child: Icon(Icons.forum), - ), - toolTip: L10n.of(context).chats, - unreadBadgeFilter: (room) => true, - ); + return isColumnMode + ? const SizedBox() + : NaviRailItem( + // #Pangea + // isSelected: activeSpaceId == null && !isSettings, + isSelected: activeSpaceId == null && + !isSettings && + !isHomepage, + // Pangea# + onTap: onGoToChats, + icon: const Padding( + padding: EdgeInsets.all(10.0), + child: Icon(Icons.forum_outlined), + ), + selectedIcon: const Padding( + padding: EdgeInsets.all(10.0), + child: Icon(Icons.forum), + ), + toolTip: L10n.of(context).chats, + unreadBadgeFilter: (room) => true, + ); } i--; if (i == rootSpaces.length) {