fix: fully load analytics room member list in analytics request indicator (#3799)

pull/2245/head
ggurdin 2 months ago committed by GitHub
parent 994f684bce
commit b5fe810aa1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -26,23 +26,43 @@ class AnalyticsRequestIndicator extends StatefulWidget {
class AnalyticsRequestIndicatorState extends State<AnalyticsRequestIndicator> { class AnalyticsRequestIndicatorState extends State<AnalyticsRequestIndicator> {
AnalyticsRequestIndicatorState(); AnalyticsRequestIndicatorState();
Map<User, List<Room>> get _knockingAdmins { final Map<User, List<Room>> _knockingAdmins = {};
@override
void initState() {
super.initState();
_fetchKnockingAdmins();
}
@override
void didUpdateWidget(covariant AnalyticsRequestIndicator oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.room.id != widget.room.id) {
_fetchKnockingAdmins();
}
}
Future<void> _fetchKnockingAdmins() async {
setState(() => _knockingAdmins.clear());
final admins = final admins =
widget.room.getParticipants().where((u) => u.powerLevel >= 100); widget.room.getParticipants().where((u) => u.powerLevel >= 100);
final knockingAdmins = <User, List<Room>>{};
for (final analyticsRoom in widget.room.client.allMyAnalyticsRooms) { for (final analyticsRoom in widget.room.client.allMyAnalyticsRooms) {
final knocking = analyticsRoom.getParticipants([Membership.knock]); final knocking =
await analyticsRoom.requestParticipants([Membership.knock]);
if (knocking.isEmpty) continue; if (knocking.isEmpty) continue;
for (final admin in admins) { for (final admin in admins) {
if (knocking.any((u) => u.id == admin.id)) { if (knocking.any((u) => u.id == admin.id)) {
knockingAdmins.putIfAbsent(admin, () => []).add(analyticsRoom); _knockingAdmins.putIfAbsent(admin, () => []).add(analyticsRoom);
} }
} }
} }
return knockingAdmins; if (mounted) {
setState(() {});
}
} }
Future<void> _onTap(BuildContext context) async { Future<void> _onTap(BuildContext context) async {
@ -71,7 +91,7 @@ class AnalyticsRequestIndicatorState extends State<AnalyticsRequestIndicator> {
}, },
); );
if (mounted) setState(() {}); if (mounted) _fetchKnockingAdmins();
} }
@override @override

Loading…
Cancel
Save