From 67557dfb26ac472b9417d9290aba66c4d660718a Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Tue, 5 Mar 2024 11:58:59 -0500 Subject: [PATCH] widened criteria for bot DM rooms and prevent new one from being created if one is already present --- lib/pangea/controllers/pangea_controller.dart | 7 ++++- lib/pangea/extensions/client_extension.dart | 11 ++++++++ .../extensions/pangea_room_extension.dart | 3 ++ lib/pangea/pages/p_user_age/p_user_age.dart | 28 ++++++++++--------- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/lib/pangea/controllers/pangea_controller.dart b/lib/pangea/controllers/pangea_controller.dart index 79006aa9d..86946f314 100644 --- a/lib/pangea/controllers/pangea_controller.dart +++ b/lib/pangea/controllers/pangea_controller.dart @@ -14,6 +14,7 @@ import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/controllers/text_to_speech_controller.dart'; import 'package:fluffychat/pangea/controllers/user_controller.dart'; import 'package:fluffychat/pangea/controllers/word_net_controller.dart'; +import 'package:fluffychat/pangea/extensions/client_extension.dart'; import 'package:fluffychat/pangea/guard/p_vguard.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; @@ -164,7 +165,11 @@ class PangeaController { void startChatWithBotIfNotPresent() { Future.delayed(const Duration(milliseconds: 10000), () async { // check if user is logged in - if (!matrixState.client.isLogged()) return; + if (!matrixState.client.isLogged() || + (await matrixState.client.hasBotDM)) { + return; + } + try { await matrixState.client.startDirectChat( BotName.byEnvironment, diff --git a/lib/pangea/extensions/client_extension.dart b/lib/pangea/extensions/client_extension.dart index 98353d29b..ea0c709d7 100644 --- a/lib/pangea/extensions/client_extension.dart +++ b/lib/pangea/extensions/client_extension.dart @@ -168,4 +168,15 @@ extension PangeaClient on Client { ) .firstOrNull ?.classSettings; + + Future get hasBotDM async { + final List chats = rooms + .where((room) => !room.isSpace && room.membership == Membership.join) + .toList(); + + for (final Room chat in chats) { + if (await chat.isBotDM) return true; + } + return false; + } } diff --git a/lib/pangea/extensions/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension.dart index 1b6370ce1..96b5711a3 100644 --- a/lib/pangea/extensions/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension.dart @@ -995,6 +995,9 @@ extension PangeaRoom on Room { ); } + Future get isBotDM async => + (await isBotRoom) && getParticipants().length == 2; + BotOptionsModel? get botOptions { if (isSpace) return null; return BotOptionsModel.fromJson( diff --git a/lib/pangea/pages/p_user_age/p_user_age.dart b/lib/pangea/pages/p_user_age/p_user_age.dart index 9d59e84b5..3cb1fccc5 100644 --- a/lib/pangea/pages/p_user_age/p_user_age.dart +++ b/lib/pangea/pages/p_user_age/p_user_age.dart @@ -2,6 +2,7 @@ import 'dart:developer'; import 'package:fluffychat/pangea/constants/age_limits.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/extensions/client_extension.dart'; import 'package:fluffychat/pangea/pages/p_user_age/p_user_age_view.dart'; import 'package:fluffychat/pangea/utils/p_extension.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; @@ -34,19 +35,20 @@ class PUserAgeController extends State { @override void initState() { super.initState(); - Future.delayed( - Duration.zero, - () => Matrix.of(context) - .client - .startDirectChat( - BotName.byEnvironment, - enableEncryption: false, - ) - .onError( - (error, stackTrace) => - ErrorHandler.logError(e: error, s: stackTrace), - ), - ); + Future.delayed(Duration.zero, () async { + if (!(await Matrix.of(context).client.hasBotDM)) { + Matrix.of(context) + .client + .startDirectChat( + BotName.byEnvironment, + enableEncryption: false, + ) + .onError( + (error, stackTrace) => + ErrorHandler.logError(e: error, s: stackTrace), + ); + } + }); } String? dobValidator() {