diff --git a/lib/src/components/message_send_state_icon.dart b/lib/src/components/message_send_state_icon.dart index 1985a27..ee6237d 100644 --- a/lib/src/components/message_send_state_icon.dart +++ b/lib/src/components/message_send_state_icon.dart @@ -85,18 +85,25 @@ class _MessageSendStateIconState extends State { for (final message in widget.messages) { if (icons.length == 2) break; - if (message.contentJson == null) continue; + + MessageSendState state = messageSendStateFromMessage(message); + late Color color; + + if (message.contentJson == null) { + color = + getMessageColorFromType(TextMessageContent(text: ""), twonlyColor); + } else { + MessageContent? content = MessageContent.fromJson( + message.kind, jsonDecode(message.contentJson!)); + if (content == null) continue; + color = getMessageColorFromType(content, twonlyColor); + } + if (kindsAlreadyShown.contains(message.kind)) continue; kindsAlreadyShown.add(message.kind); Widget icon = Placeholder(); - MessageSendState state = messageSendStateFromMessage(message); - MessageContent? content = MessageContent.fromJson( - message.kind, jsonDecode(message.contentJson!)); - if (content == null) continue; - Color color = getMessageColorFromType(content, twonlyColor); - switch (state) { case MessageSendState.receivedOpened: icon = Icon(Icons.crop_square, size: 14, color: color); diff --git a/lib/src/database/database.dart b/lib/src/database/database.dart index 6e86ca6..22ef32c 100644 --- a/lib/src/database/database.dart +++ b/lib/src/database/database.dart @@ -54,11 +54,25 @@ class TwonlyDatabase extends _$TwonlyDatabase { Stream> watchAllMessagesFrom(int contactId) { return (select(messages) - ..where((t) => t.contactId.equals(contactId)) + ..where((t) => + t.contactId.equals(contactId) & + t.contentJson.isNotNull() & + (t.openedAt.isNull() | + t.openedAt.isBiggerThanValue( + DateTime.now().subtract(Duration(days: 1))))) ..orderBy([(t) => OrderingTerm.desc(t.sendAt)])) .watch(); } + Future removeOldMessages() { + return (update(messages) + ..where((t) => + t.openedAt.isSmallerThanValue( + DateTime.now().subtract(Duration(days: 1))) & + t.kind.equals(MessageKind.textMessage.name))) + .write(MessagesCompanion(contentJson: Value(null))); + } + Future> getAllMessagesPendingDownloading() { return (select(messages) ..where( @@ -201,28 +215,12 @@ class TwonlyDatabase extends _$TwonlyDatabase { flameCounter: Value(flameCounter), ), ); - - // twonlyDatabase.updateContact( - // fromUserId, - // ContactsCompanion( - // lastMessageReceived: Value(message.timestamp), - // ), - // ); } SingleOrNullSelectable getContactByUserId(int userId) { return select(contacts)..where((t) => t.userId.equals(userId)); } - // Stream getMaxTotalMediaCounter() { - // return customSelect( - // 'SELECT MAX(totalMediaCounter) AS maxTotal FROM contacts', - // readsFrom: {contacts}, - // ).watchSingle().asyncMap((result) { - // return result.read('maxTotal'); - // }); - // } - Future deleteContactByUserId(int userId) { return (delete(contacts)..where((t) => t.userId.equals(userId))).go(); } diff --git a/lib/src/views/chats/chat_item_details_view.dart b/lib/src/views/chats/chat_item_details_view.dart index 1a334c5..2accfe3 100644 --- a/lib/src/views/chats/chat_item_details_view.dart +++ b/lib/src/views/chats/chat_item_details_view.dart @@ -158,6 +158,7 @@ class _ChatItemDetailsViewState extends State { } Future initStreams() async { + await twonlyDatabase.removeOldMessages(); Stream contact = twonlyDatabase.watchContact(widget.userid); userSub = contact.listen((contact) { setState(() {