Revert "moved timer sync logic to seperate function, don't hide bot messages …"

This commit is contained in:
ggurdin 2024-08-23 10:42:35 -04:00 committed by GitHub
parent 3195afe95c
commit a49105d298
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 28 additions and 44 deletions

View file

@ -123,7 +123,7 @@ class ChatController extends State<ChatPageWithRoom>
List<String> get completedRoundEventIds => gameRounds
.where((round) => round.isCompleted)
.map((round) => round.userMessageIDs)
.map((round) => round.messageIDs)
.expand((x) => x)
.toList();
// Pangea#

View file

@ -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';

View file

@ -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();

View file

@ -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<void> roundCompleter = Completer<void>();
@ -21,54 +20,42 @@ class GameRoundModel {
DateTime? endTime;
RoundState state = RoundState.notStarted;
StreamSubscription? syncSubscription;
final List<String> userMessageIDs = [];
final List<String> botMessageIDs = [];
final Set<String> 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();