Revert "moved timer sync logic to seperate function, don't hide bot messages …"
This commit is contained in:
parent
3195afe95c
commit
a49105d298
4 changed files with 28 additions and 44 deletions
|
|
@ -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#
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue