diff --git a/presage/src/manager/registered.rs b/presage/src/manager/registered.rs index 0f5cb3313..4571a5fe9 100644 --- a/presage/src/manager/registered.rs +++ b/presage/src/manager/registered.rs @@ -869,9 +869,10 @@ impl Manager { .profile_key .get_or_insert(self.state.data.profile_key().get_bytes().to_vec()); message.required_protocol_version = Some(0); - message.timestamp = Some(timestamp); } + ensure_data_message_timestamp(&mut content_body, timestamp); + sender .send_message( &recipient, @@ -936,6 +937,7 @@ impl Manager { let thread = Thread::Group(master_key_bytes); self.restore_thread_timer(&thread, &mut content_body).await; + ensure_data_message_timestamp(&mut content_body, timestamp); let mut sender = self.new_message_sender().await?; @@ -1304,6 +1306,32 @@ impl Manager { } } +/// Set the timestamp in any DataMessage so it matches its envelope's +fn ensure_data_message_timestamp(content_body: &mut ContentBody, timestamp: u64) { + match content_body { + ContentBody::DataMessage(message) => { + message.timestamp = Some(timestamp); + } + ContentBody::EditMessage(EditMessage { + data_message: Some(data_message), + .. + }) => { + data_message.timestamp = Some(timestamp); + } + ContentBody::SynchronizeMessage(SyncMessage { + sent: + Some(sync_message::Sent { + message: Some(data_message), + .. + }), + .. + }) => { + data_message.timestamp = Some(timestamp); + } + _ => (), + } +} + /// The mode receiving messages stream #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)] pub enum ReceivingMode {