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
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',

@ -81,17 +81,25 @@ class _SpaceViewState extends State<SpaceView> {
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(

@ -105,36 +105,44 @@ class ClassController extends BaseController {
}
Future<void> 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?

@ -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(

@ -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<JoinClassWithLink> {
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<JoinClassWithLink> {
}
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();
}

Loading…
Cancel
Save