make join_with_link work for users who are logged in or logged out

pull/1116/head
ggurdin 2 years ago
parent c8fc3dbca8
commit f6a45323e0

@ -113,6 +113,14 @@ abstract class AppRoutes {
), ),
), ),
// #Pangea // #Pangea
GoRoute(
path: '/join_with_link',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const JoinClassWithLink(),
),
),
GoRoute( GoRoute(
path: '/user_age', path: '/user_age',
pageBuilder: (context, state) => defaultPageBuilder( pageBuilder: (context, state) => defaultPageBuilder(
@ -154,15 +162,6 @@ abstract class AppRoutes {
), ),
redirect: loggedOutRedirect, redirect: loggedOutRedirect,
), ),
GoRoute(
path: '/join_with_link',
pageBuilder: (context, state) => defaultPageBuilder(
context,
state,
const JoinClassWithLink(),
),
redirect: loggedOutRedirect,
),
// Pangea# // Pangea#
GoRoute( GoRoute(
path: '/rooms', path: '/rooms',

@ -81,17 +81,25 @@ class _SpaceViewState extends State<SpaceView> {
nextBatch: null, nextBatch: null,
); );
} }
setState(() {
error = null;
loading = true;
});
// Pangea# // Pangea#
final activeSpaceId = widget.controller.activeSpaceId!; final activeSpaceId = widget.controller.activeSpaceId!;
final client = Matrix.of(context).client; final client = Matrix.of(context).client;
final activeSpace = client.getRoomById(activeSpaceId); final activeSpace = client.getRoomById(activeSpaceId);
await activeSpace?.postLoad(); await activeSpace?.postLoad();
setState(() { // #Pangea
error = null; // setState(() {
loading = true; // error = null;
}); // loading = true;
// });
// Pangea#
try { try {
final response = await client.getSpaceHierarchy( final response = await client.getSpaceHierarchy(

@ -105,36 +105,44 @@ class ClassController extends BaseController {
} }
Future<void> joinClasswithCode(BuildContext context, String classCode) async { Future<void> joinClasswithCode(BuildContext context, String classCode) async {
final QueryPublicRoomsResponse queryPublicRoomsResponse = try {
await Matrix.of(context).client.queryPublicRooms( final QueryPublicRoomsResponse queryPublicRoomsResponse =
limit: 1, await Matrix.of(context).client.queryPublicRooms(
filter: PublicRoomQueryFilter(genericSearchTerm: classCode), limit: 1,
); filter: PublicRoomQueryFilter(genericSearchTerm: classCode),
);
final PublicRoomsChunk? classChunk =
queryPublicRoomsResponse.chunk.firstWhereOrNull((element) { final PublicRoomsChunk? classChunk =
return element.canonicalAlias?.replaceAll("#", "").split(":")[0] == queryPublicRoomsResponse.chunk.firstWhereOrNull((element) {
classCode; return element.canonicalAlias?.replaceAll("#", "").split(":")[0] ==
}); classCode;
});
if (classChunk == null) {
ClassCodeUtil.messageSnack(context, L10n.of(context)!.unableToFindClass); if (classChunk == null) {
return; 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); setActiveSpaceIdInChatListController(classChunk.roomId);
ClassCodeUtil.messageSnack(context, L10n.of(context)!.alreadyInClass); GoogleAnalytics.joinClass(classCode);
return; 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 // P-EPIC
// prereq - server needs ability to invite to private room. how? // prereq - server needs ability to invite to private room. how?
// does server api have ability with admin token? // does server api have ability with admin token?

@ -1,7 +1,6 @@
import 'dart:math'; import 'dart:math';
import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
@ -35,18 +34,10 @@ class ClassCodeUtil {
], ],
); );
if (classCode == null || classCode.single.isEmpty) return; if (classCode == null || classCode.single.isEmpty) return;
await pangeaController.classController.joinClasswithCode(
try { context,
await pangeaController.classController.joinClasswithCode( classCode.first,
context, );
classCode.first,
);
} catch (err) {
messageSnack(
context,
ErrorCopy(context, err).body,
);
}
} }
static messageDialog( static messageDialog(

@ -1,7 +1,6 @@
import 'package:fluffychat/pangea/constants/url_query_parameter_keys.dart'; import 'package:fluffychat/pangea/constants/url_query_parameter_keys.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/utils/class_code.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/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
@ -28,7 +27,7 @@ class _JoinClassWithLinkState extends State<JoinClassWithLink> {
void initState() { void initState() {
super.initState(); super.initState();
Future.delayed(Duration.zero, () { Future.delayed(Duration.zero, () async {
classCode = GoRouterState.of(context) classCode = GoRouterState.of(context)
.uri .uri
.queryParameters[UrlQueryParameterKeys.classCode]; .queryParameters[UrlQueryParameterKeys.classCode];
@ -42,35 +41,32 @@ class _JoinClassWithLinkState extends State<JoinClassWithLink> {
} }
if (!Matrix.of(context).client.isLogged()) { if (!Matrix.of(context).client.isLogged()) {
return ClassCodeUtil.messageDialog( await _pangeaController.pStoreService.save(
context, L10n.of(context)!.pleaseLoginFirst, () async { PLocalKey.cachedClassCodeToJoin,
await _pangeaController.pStoreService.save( classCode,
PLocalKey.cachedClassCodeToJoin, addClientIdToKey: false,
classCode, local: true,
addClientIdToKey: false, );
local: true, context.go("/home");
); return;
context.go("/home");
});
} }
_pangeaController.classController _pangeaController.classController
.joinClasswithCode( .joinClasswithCode(
context, context,
classCode!, classCode!,
) )
.onError( .onError((error, stackTrace) {
(error, stackTrace) => ClassCodeUtil.messageSnack( ClassCodeUtil.messageSnack(
context, context,
ErrorCopy(context, error).body, ErrorCopy(context, error).body,
), );
) }).whenComplete(
.whenComplete( () => context.go("/rooms"),
() => context.go("/rooms"), );
);
}); });
} }
@override @override
Widget build(BuildContext context) => const EmptyPage(); Widget build(BuildContext context) => const SizedBox();
} }

Loading…
Cancel
Save