make join_with_link work for users who are logged in or logged out
This commit is contained in:
parent
c8fc3dbca8
commit
f6a45323e0
5 changed files with 77 additions and 75 deletions
|
|
@ -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),
|
||||
);
|
||||
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;
|
||||
});
|
||||
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 (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…
Add table
Reference in a new issue