Skip to content

Commit 5420cb8

Browse files
authored
fix: if membership gets out of sync on join space with code, get true value from matrix (#2188)
1 parent 4c4bd78 commit 5420cb8

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

lib/pangea/spaces/controllers/space_controller.dart

+14-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:convert';
33

44
import 'package:flutter/material.dart';
55

6+
import 'package:collection/collection.dart';
67
import 'package:flutter_gen/gen_l10n/l10n.dart';
78
import 'package:get_storage/get_storage.dart';
89
import 'package:go_router/go_router.dart';
@@ -170,10 +171,22 @@ class ClassController extends BaseController {
170171

171172
GoogleAnalytics.joinClass(classCode);
172173

173-
if (room.client.getRoomById(room.id)?.membership != Membership.join) {
174+
if (room.membership != Membership.join) {
174175
await room.client.waitForRoomInSync(room.id, join: true);
175176
}
176177

178+
// Sometimes, the invite event comes through after the join event and
179+
// replaces it, so membership gets out of sync. In this case,
180+
// load the true value from the server.
181+
// Related github issue: https://github.com/pangeachat/client/issues/2098
182+
if (room.membership !=
183+
room
184+
.getParticipants()
185+
.firstWhereOrNull((u) => u.id == room?.client.userID)
186+
?.membership) {
187+
await room.requestParticipants();
188+
}
189+
177190
context.push("/rooms/${room.id}/details");
178191
} catch (e, s) {
179192
ErrorHandler.logError(

0 commit comments

Comments
 (0)