From dafa7603d8169128fd5a74655da65c60c2ed1fc3 Mon Sep 17 00:00:00 2001 From: otsmr Date: Thu, 30 Jul 2026 09:54:57 +0200 Subject: [PATCH] fix time issue --- lib/src/database/daos/groups.dao.dart | 18 ++++++++++++++ lib/src/database/daos/messages.dao.dart | 24 ++++++++++++------- .../last_message_time.comp.dart | 9 ++----- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/lib/src/database/daos/groups.dao.dart b/lib/src/database/daos/groups.dao.dart index aa5d69c4..f70abe50 100644 --- a/lib/src/database/daos/groups.dao.dart +++ b/lib/src/database/daos/groups.dao.dart @@ -340,6 +340,24 @@ class GroupsDao extends DatabaseAccessor with _$GroupsDaoMixin { .write(GroupsCompanion(lastMessageExchange: Value(clampedLastMessage))); } + Future increaseMemberLastMessage( + String groupId, + int contactId, + DateTime newLastMessage, + ) async { + final now = clock.now(); + final clampedLastMessage = + newLastMessage.isAfter(now) ? now : newLastMessage; + await (update(groupMembers)..where( + (t) => + t.groupId.equals(groupId) & + t.contactId.equals(contactId) & + (t.lastMessage.isNull() | + t.lastMessage.isSmallerThanValue(clampedLastMessage)), + )) + .write(GroupMembersCompanion(lastMessage: Value(clampedLastMessage))); + } + Stream> watchNonDirectGroupsForMember(int contactId) { final query = select(groups).join([ diff --git a/lib/src/database/daos/messages.dao.dart b/lib/src/database/daos/messages.dao.dart index a336d0ca..1d70728a 100644 --- a/lib/src/database/daos/messages.dao.dart +++ b/lib/src/database/daos/messages.dao.dart @@ -489,22 +489,28 @@ class MessagesDao extends DatabaseAccessor with _$MessagesDaoMixin { await into(messages).insertOnConflictUpdate(insertMessage); + final msgTime = insertMessage.createdAt.present + ? insertMessage.createdAt.value + : clock.now(); + await twonlyDB.groupsDao.updateGroup( message.groupId.value, - GroupsCompanion( - lastMessageExchange: Value(clock.now()), - archived: const Value(false), - deletedContent: const Value(false), + const GroupsCompanion( + archived: Value(false), + deletedContent: Value(false), ), ); - if (message.senderId.present) { - await twonlyDB.groupsDao.updateMember( + await twonlyDB.groupsDao.increaseLastMessageExchange( + message.groupId.value, + msgTime, + ); + + if (message.senderId.present && message.senderId.value != null) { + await twonlyDB.groupsDao.increaseMemberLastMessage( message.groupId.value, message.senderId.value!, - GroupMembersCompanion( - lastMessage: Value(clock.now()), - ), + msgTime, ); } diff --git a/lib/src/visual/views/chats/chat_list_components/last_message_time.comp.dart b/lib/src/visual/views/chats/chat_list_components/last_message_time.comp.dart index 3dd52298..a4bcc65f 100644 --- a/lib/src/visual/views/chats/chat_list_components/last_message_time.comp.dart +++ b/lib/src/visual/views/chats/chat_list_components/last_message_time.comp.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:clock/clock.dart'; import 'package:flutter/material.dart'; -import 'package:twonly/locator.dart'; import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/utils/misc.dart'; @@ -42,12 +41,8 @@ class _LastMessageTimeCompState extends State { _actionSubscription = null; if (widget.message != null) { - _actionSubscription = twonlyDB.messagesDao - .watchLastMessageAction(widget.message!.messageId) - .listen((lastAction) { - targetTime = lastAction?.actionAt ?? widget.message!.createdAt; - _updateSeconds(); - }); + targetTime = widget.message!.openedAt ?? widget.message!.createdAt; + _updateSeconds(); } else if (widget.dateTime != null) { targetTime = widget.dateTime; _updateSeconds();