From a49105d298139a2c169e5a7c4e0e97f833b4e10e Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:42:35 -0400 Subject: [PATCH] =?UTF-8?q?Revert=20"moved=20timer=20sync=20logic=20to=20s?= =?UTF-8?q?eperate=20function,=20don't=20hide=20bot=20messages=20=E2=80=A6?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/chat/chat.dart | 2 +- lib/pages/chat/chat_view.dart | 1 + .../extensions/sync_update_extension.dart | 4 +- .../pages/games/story_game/round_model.dart | 65 +++++++------------ 4 files changed, 28 insertions(+), 44 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 6e6a7487f..cbc5c8bf7 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -123,7 +123,7 @@ class ChatController extends State List get completedRoundEventIds => gameRounds .where((round) => round.isCompleted) - .map((round) => round.userMessageIDs) + .map((round) => round.messageIDs) .expand((x) => x) .toList(); // Pangea# diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index ce45043eb..c72866c86 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -13,6 +13,7 @@ import 'package:fluffychat/pangea/choreographer/widgets/it_bar.dart'; import 'package:fluffychat/pangea/choreographer/widgets/start_igc_button.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/widgets/chat/chat_floating_action_button.dart'; +import 'package:fluffychat/pangea/widgets/chat/round_timer.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; import 'package:fluffychat/widgets/connection_status_header.dart'; diff --git a/lib/pangea/extensions/sync_update_extension.dart b/lib/pangea/extensions/sync_update_extension.dart index 68c1f684a..412ca2b8f 100644 --- a/lib/pangea/extensions/sync_update_extension.dart +++ b/lib/pangea/extensions/sync_update_extension.dart @@ -10,9 +10,7 @@ extension MembershipUpdate on SyncUpdate { return rooms!.join![chat.id]!.timeline!.events! .where( - (event) => - event.type == EventTypes.Message && - !event.eventId.startsWith("Pangea Chat"), + (event) => event.type == EventTypes.Message, ) .map((event) => Event.fromMatrixEvent(event, chat)) .toList(); diff --git a/lib/pangea/pages/games/story_game/round_model.dart b/lib/pangea/pages/games/story_game/round_model.dart index c192c36a6..61beb6242 100644 --- a/lib/pangea/pages/games/story_game/round_model.dart +++ b/lib/pangea/pages/games/story_game/round_model.dart @@ -11,7 +11,6 @@ enum RoundState { notStarted, inProgress, completed } class GameRoundModel { static const int timerMaxSeconds = 180; - final String adminName = BotName.byEnvironment; final ChatController controller; final Completer roundCompleter = Completer(); @@ -21,54 +20,42 @@ class GameRoundModel { DateTime? endTime; RoundState state = RoundState.notStarted; StreamSubscription? syncSubscription; - final List userMessageIDs = []; - final List botMessageIDs = []; + final Set messageIDs = {}; GameRoundModel({ required this.controller, required this.timer, }) { createdAt = DateTime.now(); - syncSubscription ??= client.onSync.stream.listen(_handleSync); - } + debugPrint("timeline: ${controller.room.timeline}"); + syncSubscription ??= client.onSync.stream.listen((update) { + final newMessages = update.messages(controller.room); + final botMessages = newMessages + .where((msg) => msg.senderId == BotName.byEnvironment) + .toList(); - void _handleSync(SyncUpdate update) { - final newMessages = update - .messages(controller.room) - .where((msg) => msg.originServerTs.isAfter(createdAt)) - .toList(); - - final botMessages = - newMessages.where((msg) => msg.senderId == adminName).toList(); - final userMessages = - newMessages.where((msg) => msg.senderId != adminName).toList(); - - final hasNewBotMessage = botMessages.any( - (msg) => !botMessageIDs.contains(msg.eventId), - ); - - if (hasNewBotMessage) { - if (state == RoundState.notStarted) { - startRound(); - } else if (state == RoundState.inProgress) { - endRound(); - return; - } - } - - if (state == RoundState.inProgress) { - for (final message in botMessages) { - if (!botMessageIDs.contains(message.eventId)) { - botMessageIDs.add(message.eventId); + if (botMessages.isNotEmpty && + botMessages.any( + (msg) => + msg.originServerTs.isAfter(createdAt) && + !messageIDs.contains(msg.eventId), + )) { + if (state == RoundState.notStarted) { + startRound(); + } else if (state == RoundState.inProgress) { + endRound(); + return; } } - for (final message in userMessages) { - if (!userMessageIDs.contains(message.eventId)) { - userMessageIDs.add(message.eventId); + for (final message in newMessages) { + if (message.originServerTs.isAfter(createdAt) && + !messageIDs.contains(message.eventId) && + !message.eventId.startsWith("Pangea Chat")) { + messageIDs.add(message.eventId); } } - } + }); } Client get client => controller.pangeaController.matrixState.client; @@ -86,9 +73,7 @@ class GameRoundModel { } void endRound() { - debugPrint( - "ending round, user message IDs: $userMessageIDs, bot message IDs: $botMessageIDs", - ); + debugPrint("ending round, message IDs: $messageIDs"); endTime = DateTime.now(); state = RoundState.completed; controller.roundTimerStateKey.currentState?.resetTimer();