diff --git a/lib/src/database/daos/messages.dao.dart b/lib/src/database/daos/messages.dao.dart index 1e41efc..71bf8d2 100644 --- a/lib/src/database/daos/messages.dao.dart +++ b/lib/src/database/daos/messages.dao.dart @@ -342,38 +342,6 @@ class MessagesDao extends DatabaseAccessor with _$MessagesDaoMixin { .getSingleOrNull(); } - Stream>> watchLastOpenedMessagePerContact( - String groupId, - ) { - const sql = ''' - SELECT m.*, c.* - FROM ( - SELECT ma.contact_id, ma.message_id, - ROW_NUMBER() OVER (PARTITION BY ma.contact_id - ORDER BY ma.action_at DESC, ma.message_id DESC) AS rn - FROM message_actions ma - WHERE ma.type = 'openedAt' - ) last_open - JOIN messages m ON m.message_id = last_open.message_id - JOIN contacts c ON c.user_id = last_open.contact_id - WHERE last_open.rn = 1 AND m.group_id = ?; - '''; - - return customSelect( - sql, - variables: [Variable.withString(groupId)], - readsFrom: {messages, messageActions, contacts}, - ).watch().map((rows) async { - final res = <(Message, Contact)>[]; - for (final row in rows) { - final message = await messages.mapFromRow(row); - final contact = await contacts.mapFromRow(row); - res.add((message, contact)); - } - return res; - }); - } - Future deleteMessagesById(String messageId) { return (delete(messages)..where((t) => t.messageId.equals(messageId))).go(); } diff --git a/lib/src/views/chats/chat_messages.view.dart b/lib/src/views/chats/chat_messages.view.dart index fab9358..422f18f 100644 --- a/lib/src/views/chats/chat_messages.view.dart +++ b/lib/src/views/chats/chat_messages.view.dart @@ -33,7 +33,6 @@ class ChatItem { const ChatItem._({ this.message, this.date, - this.lastOpenedPosition, this.groupAction, }); factory ChatItem.date(DateTime date) { @@ -42,20 +41,15 @@ class ChatItem { factory ChatItem.message(Message message) { return ChatItem._(message: message); } - factory ChatItem.lastOpenedPosition(List contacts) { - return ChatItem._(lastOpenedPosition: contacts); - } factory ChatItem.groupAction(GroupHistory groupAction) { return ChatItem._(groupAction: groupAction); } final GroupHistory? groupAction; final Message? message; final DateTime? date; - final List? lastOpenedPosition; bool get isMessage => message != null; bool get isDate => date != null; bool get isGroupAction => groupAction != null; - bool get isLastOpenedPosition => lastOpenedPosition != null; } /// Displays detailed information about a SampleItem. @@ -75,14 +69,11 @@ class _ChatMessagesViewState extends State { late StreamSubscription> messageSub; StreamSubscription>? groupActionsSub; StreamSubscription>? contactSub; - StreamSubscription>>? - lastOpenedMessageByContactSub; Map userIdToContact = {}; List messages = []; List allMessages = []; - List<(Message, Contact)> lastOpenedMessageByContact = []; List groupActions = []; List galleryItems = []; Message? quotesMessage; @@ -105,7 +96,6 @@ class _ChatMessagesViewState extends State { messageSub.cancel(); contactSub?.cancel(); groupActionsSub?.cancel(); - lastOpenedMessageByContactSub?.cancel(); super.dispose(); } @@ -121,19 +111,10 @@ class _ChatMessagesViewState extends State { }); if (!widget.group.isDirectChat) { - final lastOpenedStream = - twonlyDB.messagesDao.watchLastOpenedMessagePerContact(group.groupId); - lastOpenedMessageByContactSub = - lastOpenedStream.listen((lastActionsFuture) async { - final update = await lastActionsFuture; - lastOpenedMessageByContact = update; - await setMessages(allMessages, update, groupActions); - }); - final actionsStream = twonlyDB.groupsDao.watchGroupActions(group.groupId); groupActionsSub = actionsStream.listen((update) async { groupActions = update; - await setMessages(allMessages, lastOpenedMessageByContact, update); + await setMessages(allMessages, update); }); final contactsStream = twonlyDB.contactsDao.watchAllContacts(); @@ -154,14 +135,13 @@ class _ChatMessagesViewState extends State { // return; } await protectMessageUpdating.protect(() async { - await setMessages(update, lastOpenedMessageByContact, groupActions); + await setMessages(update, groupActions); }); }); } Future setMessages( List newMessages, - List<(Message, Contact)> lastOpenedMessageByContact, List groupActions, ) async { await flutterLocalNotificationsPlugin.cancelAll(); @@ -172,19 +152,7 @@ class _ChatMessagesViewState extends State { DateTime? lastDate; final openedMessages = >{}; - final lastOpenedMessageToContact = >{}; - final myLastMessageIndex = - newMessages.lastIndexWhere((t) => t.senderId == null); - - for (final opened in lastOpenedMessageByContact) { - if (!lastOpenedMessageToContact.containsKey(opened.$1.messageId)) { - lastOpenedMessageToContact[opened.$1.messageId] = [opened.$2]; - } else { - lastOpenedMessageToContact[opened.$1.messageId]!.add(opened.$2); - } - } - var index = 0; var groupHistoryIndex = 0; for (final msg in newMessages) { @@ -199,7 +167,6 @@ class _ChatMessagesViewState extends State { } } } - index += 1; if (msg.type != MessageType.media.name && msg.senderId != null && msg.openedAt == null) { @@ -221,16 +188,6 @@ class _ChatMessagesViewState extends State { lastDate = msg.createdAt; } chatItems.add(ChatItem.message(msg)); - - if (index <= myLastMessageIndex || index == newMessages.length) { - if (lastOpenedMessageToContact.containsKey(msg.messageId)) { - chatItems.add( - ChatItem.lastOpenedPosition( - lastOpenedMessageToContact[msg.messageId]!, - ), - ); - } - } } if (groupHistoryIndex < groupActions.length) { for (var i = groupHistoryIndex; i < groupActions.length; i++) { @@ -341,17 +298,6 @@ class _ChatMessagesViewState extends State { return ChatDateChip( item: messages[i], ); - } else if (messages[i].isLastOpenedPosition) { - return Wrap( - spacing: 8, - alignment: WrapAlignment.center, - children: messages[i].lastOpenedPosition!.map((w) { - return AvatarIcon( - contactId: w.userId, - fontSize: 12, - ); - }).toList(), - ); } else if (messages[i].isGroupAction) { return ChatGroupAction( key: Key(messages[i].groupAction!.groupHistoryId),