From f6a45323e03188496a64020e67bcc5411e923bbc Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 8 May 2024 14:26:34 -0400 Subject: [PATCH] make join_with_link work for users who are logged in or logged out --- lib/config/routes.dart | 17 +++--- lib/pages/chat_list/space_view.dart | 16 ++++-- lib/pangea/controllers/class_controller.dart | 60 +++++++++++--------- lib/pangea/utils/class_code.dart | 17 ++---- lib/pangea/widgets/class/join_with_link.dart | 46 +++++++-------- 5 files changed, 79 insertions(+), 77 deletions(-) diff --git a/lib/config/routes.dart b/lib/config/routes.dart index bf3f0fe7e..8b69aca1e 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -113,6 +113,14 @@ abstract class AppRoutes { ), ), // #Pangea + GoRoute( + path: '/join_with_link', + pageBuilder: (context, state) => defaultPageBuilder( + context, + state, + const JoinClassWithLink(), + ), + ), GoRoute( path: '/user_age', pageBuilder: (context, state) => defaultPageBuilder( @@ -154,15 +162,6 @@ abstract class AppRoutes { ), redirect: loggedOutRedirect, ), - GoRoute( - path: '/join_with_link', - pageBuilder: (context, state) => defaultPageBuilder( - context, - state, - const JoinClassWithLink(), - ), - redirect: loggedOutRedirect, - ), // Pangea# GoRoute( path: '/rooms', diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index c82838f12..e7d793e3d 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -81,17 +81,25 @@ class _SpaceViewState extends State { nextBatch: null, ); } + + setState(() { + error = null; + loading = true; + }); // Pangea# + final activeSpaceId = widget.controller.activeSpaceId!; final client = Matrix.of(context).client; final activeSpace = client.getRoomById(activeSpaceId); await activeSpace?.postLoad(); - setState(() { - error = null; - loading = true; - }); + // #Pangea + // setState(() { + // error = null; + // loading = true; + // }); + // Pangea# try { final response = await client.getSpaceHierarchy( diff --git a/lib/pangea/controllers/class_controller.dart b/lib/pangea/controllers/class_controller.dart index 2c684b459..7706d2194 100644 --- a/lib/pangea/controllers/class_controller.dart +++ b/lib/pangea/controllers/class_controller.dart @@ -105,36 +105,44 @@ class ClassController extends BaseController { } Future joinClasswithCode(BuildContext context, String classCode) async { - final QueryPublicRoomsResponse queryPublicRoomsResponse = - await Matrix.of(context).client.queryPublicRooms( - limit: 1, - filter: PublicRoomQueryFilter(genericSearchTerm: classCode), - ); - - final PublicRoomsChunk? classChunk = - queryPublicRoomsResponse.chunk.firstWhereOrNull((element) { - return element.canonicalAlias?.replaceAll("#", "").split(":")[0] == - classCode; - }); - - if (classChunk == null) { - ClassCodeUtil.messageSnack(context, L10n.of(context)!.unableToFindClass); - return; - } + try { + final QueryPublicRoomsResponse queryPublicRoomsResponse = + await Matrix.of(context).client.queryPublicRooms( + limit: 1, + filter: PublicRoomQueryFilter(genericSearchTerm: classCode), + ); + + final PublicRoomsChunk? classChunk = + queryPublicRoomsResponse.chunk.firstWhereOrNull((element) { + return element.canonicalAlias?.replaceAll("#", "").split(":")[0] == + classCode; + }); + + if (classChunk == null) { + ClassCodeUtil.messageSnack( + context, L10n.of(context)!.unableToFindClass); + return; + } + + if (Matrix.of(context) + .client + .rooms + .any((room) => room.id == classChunk.roomId)) { + setActiveSpaceIdInChatListController(classChunk.roomId); + ClassCodeUtil.messageSnack(context, L10n.of(context)!.alreadyInClass); + return; + } + await _pangeaController.matrixState.client.joinRoom(classChunk.roomId); - if (Matrix.of(context) - .client - .rooms - .any((room) => room.id == classChunk.roomId)) { setActiveSpaceIdInChatListController(classChunk.roomId); - ClassCodeUtil.messageSnack(context, L10n.of(context)!.alreadyInClass); + GoogleAnalytics.joinClass(classCode); return; + } catch (err) { + ClassCodeUtil.messageSnack( + context, + ErrorCopy(context, err).body, + ); } - await _pangeaController.matrixState.client.joinRoom(classChunk.roomId); - - setActiveSpaceIdInChatListController(classChunk.roomId); - GoogleAnalytics.joinClass(classCode); - return; // P-EPIC // prereq - server needs ability to invite to private room. how? // does server api have ability with admin token? diff --git a/lib/pangea/utils/class_code.dart b/lib/pangea/utils/class_code.dart index b4e0671d6..ca783f755 100644 --- a/lib/pangea/utils/class_code.dart +++ b/lib/pangea/utils/class_code.dart @@ -1,7 +1,6 @@ import 'dart:math'; import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -35,18 +34,10 @@ class ClassCodeUtil { ], ); if (classCode == null || classCode.single.isEmpty) return; - - try { - await pangeaController.classController.joinClasswithCode( - context, - classCode.first, - ); - } catch (err) { - messageSnack( - context, - ErrorCopy(context, err).body, - ); - } + await pangeaController.classController.joinClasswithCode( + context, + classCode.first, + ); } static messageDialog( diff --git a/lib/pangea/widgets/class/join_with_link.dart b/lib/pangea/widgets/class/join_with_link.dart index 15b52bd41..00020e78d 100644 --- a/lib/pangea/widgets/class/join_with_link.dart +++ b/lib/pangea/widgets/class/join_with_link.dart @@ -1,7 +1,6 @@ import 'package:fluffychat/pangea/constants/url_query_parameter_keys.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/utils/class_code.dart'; -import 'package:fluffychat/widgets/layouts/empty_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; @@ -28,7 +27,7 @@ class _JoinClassWithLinkState extends State { void initState() { super.initState(); - Future.delayed(Duration.zero, () { + Future.delayed(Duration.zero, () async { classCode = GoRouterState.of(context) .uri .queryParameters[UrlQueryParameterKeys.classCode]; @@ -42,35 +41,32 @@ class _JoinClassWithLinkState extends State { } if (!Matrix.of(context).client.isLogged()) { - return ClassCodeUtil.messageDialog( - context, L10n.of(context)!.pleaseLoginFirst, () async { - await _pangeaController.pStoreService.save( - PLocalKey.cachedClassCodeToJoin, - classCode, - addClientIdToKey: false, - local: true, - ); - context.go("/home"); - }); + await _pangeaController.pStoreService.save( + PLocalKey.cachedClassCodeToJoin, + classCode, + addClientIdToKey: false, + local: true, + ); + context.go("/home"); + return; } _pangeaController.classController .joinClasswithCode( - context, - classCode!, - ) - .onError( - (error, stackTrace) => ClassCodeUtil.messageSnack( - context, - ErrorCopy(context, error).body, - ), - ) - .whenComplete( - () => context.go("/rooms"), - ); + context, + classCode!, + ) + .onError((error, stackTrace) { + ClassCodeUtil.messageSnack( + context, + ErrorCopy(context, error).body, + ); + }).whenComplete( + () => context.go("/rooms"), + ); }); } @override - Widget build(BuildContext context) => const EmptyPage(); + Widget build(BuildContext context) => const SizedBox(); }