diff --git a/src/app/modules/main/chat_section/chat_content/messages/controller.nim b/src/app/modules/main/chat_section/chat_content/messages/controller.nim index f86543e156b..7304c0566b8 100644 --- a/src/app/modules/main/chat_section/chat_content/messages/controller.nim +++ b/src/app/modules/main/chat_section/chat_content/messages/controller.nim @@ -81,6 +81,10 @@ proc init*(self: Controller) = let args = EnvelopeSentArgs(e) self.delegate.onEnvelopeSent(args.messagesIds) + self.events.on(SIGNAL_ENVELOPE_EXPIRED) do(e:Args): + let args = EnvelopeExpiredArgs(e) + self.delegate.onEnvelopeExpired(args.messagesIds) + self.events.on(SIGNAL_MESSAGE_DELIVERED) do(e:Args): let args = MessageDeliveredArgs(e) if(self.chatId != args.chatId): diff --git a/src/app/modules/main/chat_section/chat_content/messages/io_interface.nim b/src/app/modules/main/chat_section/chat_content/messages/io_interface.nim index fbaf252ab31..f324992b8d2 100644 --- a/src/app/modules/main/chat_section/chat_content/messages/io_interface.nim +++ b/src/app/modules/main/chat_section/chat_content/messages/io_interface.nim @@ -56,6 +56,9 @@ method onSendingMessageError*(self: AccessInterface) {.base.} = method onEnvelopeSent*(self: AccessInterface, messagesIds: seq[string]) {.base.} = raise newException(ValueError, "No implementation available") +method onEnvelopeExpired*(self: AccessInterface, messagesIds: seq[string]) {.base.} = + raise newException(ValueError, "No implementation available") + method onMessageDelivered*(self: AccessInterface, messageId: string) {.base.} = raise newException(ValueError, "No implementation available") diff --git a/src/app/modules/main/chat_section/chat_content/messages/module.nim b/src/app/modules/main/chat_section/chat_content/messages/module.nim index 6d4a4feb549..d51943c4216 100644 --- a/src/app/modules/main/chat_section/chat_content/messages/module.nim +++ b/src/app/modules/main/chat_section/chat_content/messages/module.nim @@ -325,6 +325,10 @@ method onEnvelopeSent*(self: Module, messagesIds: seq[string]) = for messageId in messagesIds: self.view.model().itemSent(messageId) +method onEnvelopeExpired*(self: Module, messagesIds: seq[string]) = + for messageId in messagesIds: + self.view.model().itemExpired(messageId) + method onMessageDelivered*(self: Module, messageId: string) = self.view.model().itemDelivered(messageId) diff --git a/src/app/modules/shared_models/message_model.nim b/src/app/modules/shared_models/message_model.nim index 87b7f92b07d..d7d881c49e3 100644 --- a/src/app/modules/shared_models/message_model.nim +++ b/src/app/modules/shared_models/message_model.nim @@ -389,6 +389,9 @@ QtObject: proc itemDelivered*(self: Model, messageId: string) = self.setOutgoingStatus(messageId, PARSED_TEXT_OUTGOING_STATUS_DELIVERED) + proc itemExpired*(self: Model, messageId: string) = + self.setOutgoingStatus(messageId, PARSED_TEXT_OUTGOING_STATUS_EXPIRED) + proc addReaction*(self: Model, messageId: string, emojiId: EmojiId, didIReactWithThisEmoji: bool, userPublicKey: string, userDisplayName: string, reactionId: string) = let ind = self.findIndexForMessageId(messageId) diff --git a/src/app_service/service/message/dto/message.nim b/src/app_service/service/message/dto/message.nim index 4322192f55f..37e6e260d78 100644 --- a/src/app_service/service/message/dto/message.nim +++ b/src/app_service/service/message/dto/message.nim @@ -20,6 +20,7 @@ const PARSED_TEXT_CHILD_TYPE_LINK* = "link" const PARSED_TEXT_OUTGOING_STATUS_SENDING* = "sending" const PARSED_TEXT_OUTGOING_STATUS_SENT* = "sent" const PARSED_TEXT_OUTGOING_STATUS_DELIVERED* = "delivered" +const PARSED_TEXT_OUTGOING_STATUS_EXPIRED* = "expired" type ParsedText* = object `type`*: string diff --git a/src/app_service/service/message/service.nim b/src/app_service/service/message/service.nim index ca28321e781..ffc8b441077 100644 --- a/src/app_service/service/message/service.nim +++ b/src/app_service/service/message/service.nim @@ -51,6 +51,7 @@ const SIGNAL_MESSAGE_DELETION* = "messageDeleted" const SIGNAL_MESSAGE_DELIVERED* = "messageDelivered" const SIGNAL_MESSAGE_EDITED* = "messageEdited" const SIGNAL_ENVELOPE_SENT* = "envelopeSent" +const SIGNAL_ENVELOPE_EXPIRED* = "envelopeExpired" const SIGNAL_MESSAGE_LINK_PREVIEW_DATA_LOADED* = "messageLinkPreviewDataLoaded" const SIGNAL_MENTIONED_IN_EDITED_MESSAGE* = "mentionedInEditedMessage" const SIGNAL_RELOAD_MESSAGES* = "reloadMessages" @@ -101,6 +102,9 @@ type EnvelopeSentArgs* = ref object of Args messagesIds*: seq[string] + EnvelopeExpiredArgs* = ref object of Args + messagesIds*: seq[string] + MessageEditedArgs* = ref object of Args chatId*: string message*: MessageDto @@ -280,6 +284,12 @@ QtObject: let data = EnvelopeSentArgs(messagesIds: receivedData.messageIds) self.events.emit(SIGNAL_ENVELOPE_SENT, data) + self.events.on(SignalType.EnvelopeExpired.event) do(e: Args): + let receivedData = EnvelopeExpiredSignal(e) + let data = EnvelopeExpiredArgs(messagesIds: receivedData.messageIds) + self.events.emit(SIGNAL_ENVELOPE_EXPIRED, data) + + self.events.on(SignalType.Message.event) do(e: Args): var receivedData = MessageSignal(e) diff --git a/ui/imports/shared/views/chat/MessageView.qml b/ui/imports/shared/views/chat/MessageView.qml index bab36dbe820..bb2ae85f11a 100644 --- a/ui/imports/shared/views/chat/MessageView.qml +++ b/ui/imports/shared/views/chat/MessageView.qml @@ -108,7 +108,8 @@ Loader { property bool isMessage: isEmoji || isImage || isSticker || isText || isAudio || messageContentType === Constants.messageContentType.communityInviteType || messageContentType === Constants.messageContentType.transactionType - readonly property bool isExpired: (messageOutgoingStatus === "sending" && (Math.floor(messageTimestamp) + 180000) < Date.now()) + readonly property bool isExpired: (messageOutgoingStatus === "sending" && (Math.floor(messageTimestamp) + 180000) < Date.now()) || messageOutgoingStatus === "expired" + property int statusAgeEpoch: 0 signal imageClicked(var image)