diff --git a/libs/client-api/src/collab_sync/plugin.rs b/libs/client-api/src/collab_sync/plugin.rs index d908e784..31ed3c63 100644 --- a/libs/client-api/src/collab_sync/plugin.rs +++ b/libs/client-api/src/collab_sync/plugin.rs @@ -186,7 +186,7 @@ where _event: &Event, update: &AwarenessUpdate, ) { - let payload = Message::Awareness(update.clone()).encode_v1(); + let payload = Message::Awareness(update.encode_v1()).encode_v1(); self.sync_queue.queue_msg(|msg_id| { let update_sync = UpdateSync::new(origin.clone(), object_id.to_string(), payload, msg_id); if cfg!(feature = "sync_verbose_log") { diff --git a/services/appflowy-collaborate/src/group/group_init.rs b/services/appflowy-collaborate/src/group/group_init.rs index 7abf99e6..6e0c2b51 100644 --- a/services/appflowy-collaborate/src/group/group_init.rs +++ b/services/appflowy-collaborate/src/group/group_init.rs @@ -1073,21 +1073,35 @@ impl CollabPersister { } async fn load_collab_full(&self, keep_history: bool) -> Result { - let params = QueryCollabParams::new( - self.object_id.clone(), - self.collab_type.clone(), - self.workspace_id.clone(), - ); - let encoded_collab = self - .storage - .get_encode_collab(GetCollabOrigin::Server, params, false) - .await - .map_err(|err| RealtimeError::Internal(err.into()))?; + let doc_state = if keep_history { + // if we want history-keeping variant, we need to get a snapshot + let snapshot = self + .storage + .get_collab_snapshot(&self.workspace_id, &self.object_id, &1) + .await + .map_err(|err| RealtimeError::Internal(err.into()))?; + let encoded_collab = EncodedCollab::decode_from_bytes(&snapshot.encoded_collab_v1) + .map_err(|err| RealtimeError::Internal(err.into()))?; + encoded_collab.doc_state + } else { + // if we want a lightweight variant, we need to get a collab + let params = QueryCollabParams::new( + self.object_id.clone(), + self.collab_type.clone(), + self.workspace_id.clone(), + ); + self + .storage + .get_encode_collab(GetCollabOrigin::Server, params, false) + .await + .map_err(|err| RealtimeError::Internal(err.into()))? + .doc_state + }; let collab: Collab = Collab::new_with_source( CollabOrigin::Server, &self.object_id, - DataSource::DocStateV1(encoded_collab.doc_state.into()), + DataSource::DocStateV1(doc_state.into()), vec![], keep_history, // should we use history-remembering version (true) or lightweight one (false)? )?;