From c6f042830f583d25ad278512c6eaecb3d0fcc7d7 Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Tue, 15 Oct 2024 23:55:27 +0800 Subject: [PATCH] fix: import document that contains refs (#6551) * fix: import document that contains refs * chore: clippy --- frontend/appflowy_flutter/pubspec.lock | 12 +- .../tests/asset/data_ref_doc.zip | Bin 0 -> 99082 bytes .../import_af_data_folder_test.rs | 87 +++++++++++ frontend/rust-lib/flowy-folder/src/manager.rs | 6 +- .../data_import/appflowy_data_import.rs | 146 +++++++++++++++--- 5 files changed, 219 insertions(+), 32 deletions(-) create mode 100644 frontend/rust-lib/event-integration-test/tests/asset/data_ref_doc.zip diff --git a/frontend/appflowy_flutter/pubspec.lock b/frontend/appflowy_flutter/pubspec.lock index 2805904da8..e090c4eb05 100644 --- a/frontend/appflowy_flutter/pubspec.lock +++ b/frontend/appflowy_flutter/pubspec.lock @@ -1535,10 +1535,10 @@ packages: dependency: transitive description: name: platform - sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.5" + version: "3.1.4" plugin_platform_interface: dependency: "direct dev" description: @@ -1933,10 +1933,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.2.0" string_validator: dependency: "direct main" description: @@ -2238,10 +2238,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "14.2.5" + version: "14.2.1" watcher: dependency: transitive description: diff --git a/frontend/rust-lib/event-integration-test/tests/asset/data_ref_doc.zip b/frontend/rust-lib/event-integration-test/tests/asset/data_ref_doc.zip new file mode 100644 index 0000000000000000000000000000000000000000..43fc7dde2f0bde39c165afb2b256cc0f32658081 GIT binary patch literal 99082 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

UzK;deS`4&;2o;>RP^yKQ%) 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 S08|FpPZ+F3*V+*gcJ?3GqJsAT literal 0 HcmV?d00001 diff --git a/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/import_af_data_folder_test.rs b/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/import_af_data_folder_test.rs index eb48fb6c0e..87b2679da8 100644 --- a/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/import_af_data_folder_test.rs +++ b/frontend/rust-lib/event-integration-test/tests/user/af_cloud_test/import_af_data_folder_test.rs @@ -1,13 +1,100 @@ use crate::util::unzip; use assert_json_diff::assert_json_include; +use collab::core::collab::DataSource; +use collab::core::origin::CollabOrigin; +use collab::preclude::{Any, Collab}; use collab_database::rows::database_row_document_id_from_row_id; +use collab_document::blocks::TextDelta; +use collab_document::document::Document; use event_integration_test::user_event::use_localhost_af_cloud; use event_integration_test::EventIntegrationTest; use flowy_core::DEFAULT_NAME; +use flowy_folder::entities::ViewLayoutPB; use flowy_user::errors::ErrorCode; use serde_json::{json, Value}; use std::env::temp_dir; +#[tokio::test] +async fn import_appflowy_data_with_ref_views_test() { + let import_container_name = "data_ref_doc".to_string(); + let (_cleaner, user_db_path) = unzip("./tests/asset", &import_container_name).unwrap(); + use_localhost_af_cloud().await; + let test = EventIntegrationTest::new_with_name(DEFAULT_NAME).await; + let _ = test.af_cloud_sign_up().await; + let views = test.get_all_workspace_views().await; + let shared_space_id = views[1].id.clone(); + test + .import_appflowy_data( + user_db_path.to_str().unwrap().to_string(), + Some(import_container_name.clone()), + ) + .await + .unwrap(); + + let general_space = test.get_view(&shared_space_id).await; + let shared_sub_views = &general_space.child_views; + assert_eq!(shared_sub_views.len(), 1); + assert_eq!(shared_sub_views[0].name, import_container_name); + + let imported_view_id = shared_sub_views[0].id.clone(); + let imported_sub_views = test.get_view(&imported_view_id).await.child_views; + assert_eq!(imported_sub_views.len(), 1); + + let imported_get_started_view_id = imported_sub_views[0].id.clone(); + let doc_state = test + .get_document_doc_state(&imported_get_started_view_id) + .await; + let collab = Collab::new_with_source( + CollabOrigin::Empty, + &imported_get_started_view_id, + DataSource::DocStateV1(doc_state), + vec![], + false, + ) + .unwrap(); + let document = Document::open(collab).unwrap(); + + let page_id = document.get_page_id().unwrap(); + let block_ids = document.get_block_children_ids(&page_id); + let mut page_ids = vec![]; + let mut link_ids = vec![]; + for block_id in block_ids.iter() { + // Process block deltas + if let Some(mut block_deltas) = document.get_block_delta(block_id).map(|t| t.1) { + for d in block_deltas.iter_mut() { + if let TextDelta::Inserted(_, Some(attrs)) = d { + if let Some(Any::Map(mention)) = attrs.get_mut("mention") { + if let Some(page_id) = mention.get("page_id").map(|v| v.to_string()) { + page_ids.push(page_id); + } + } + } + } + } + + if let Some((_, data)) = document.get_block_data(block_id) { + if let Some(link_view_id) = data.get("view_id").and_then(|v| v.as_str()) { + link_ids.push(link_view_id.to_string()); + } + } + } + + assert_eq!(page_ids.len(), 1); + for page_id in page_ids { + let view = test.get_view(&page_id).await; + assert_eq!(view.name, "1"); + let data = serde_json::to_string(&test.get_document_data(&view.id).await).unwrap(); + assert!(data.contains("hello world")); + } + + assert_eq!(link_ids.len(), 1); + for link_id in link_ids { + let database_view = test.get_view(&link_id).await; + assert_eq!(database_view.layout, ViewLayoutPB::Grid); + assert_eq!(database_view.name, "Untitled"); + } +} + #[tokio::test] async fn import_appflowy_data_folder_into_new_view_test() { let import_container_name = "040_local".to_string(); diff --git a/frontend/rust-lib/flowy-folder/src/manager.rs b/frontend/rust-lib/flowy-folder/src/manager.rs index 5fec20d4ea..285c817d0c 100644 --- a/frontend/rust-lib/flowy-folder/src/manager.rs +++ b/frontend/rust-lib/flowy-folder/src/manager.rs @@ -44,7 +44,7 @@ use std::collections::HashMap; use std::fmt::{Display, Formatter}; use std::sync::{Arc, Weak}; use tokio::sync::RwLockWriteGuard; -use tracing::{error, info, instrument, warn}; +use tracing::{error, info, instrument}; pub trait FolderUser: Send + Sync { fn user_id(&self) -> Result; @@ -399,7 +399,7 @@ impl FolderManager { // Set the parent view ID for the child views. if let Some(parent_view_id) = parent_view_id { // If a valid parent_view_id is provided, set it for each child view. - if folder.get_view(&parent_view_id).is_some() { + if folder.get_view(parent_view_id).is_some() { info!( "[AppFlowyData]: Attach parent-child views with the latest view: {:?}", parent_view_id @@ -427,7 +427,7 @@ impl FolderManager { #[instrument(level = "info", skip_all, err)] fn insert_into_latest_view( - views: &mut Vec, + views: &mut [ParentChildViews], folder: &mut RwLockWriteGuard, ) -> Result<(), FlowyError> { let workspace_id = folder diff --git a/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs b/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs index ed9a198838..57c4b64d20 100644 --- a/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs +++ b/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs @@ -11,7 +11,7 @@ use collab::core::origin::CollabOrigin; use collab::preclude::updates::decoder::Decode; use collab::preclude::updates::encoder::Encode; -use collab::preclude::{Collab, Doc, ReadTxn, StateVector, Transact, Update}; +use collab::preclude::{Any, Collab, Doc, ReadTxn, StateVector, Transact, Update}; use collab_database::database::{ is_database_collab, mut_database_views_with_collab, reset_inline_view_id, }; @@ -35,6 +35,9 @@ use flowy_user_pub::session::Session; use rayon::prelude::*; use std::collections::{HashMap, HashSet}; +use collab_document::blocks::TextDelta; +use collab_document::document::Document; +use serde_json::json; use std::ops::{Deref, DerefMut}; use std::path::Path; use std::sync::{Arc, Weak}; @@ -274,7 +277,7 @@ pub(crate) fn generate_import_data( } } - let gen_collabs = all_imported_object_ids + let gen_document_collabs = all_imported_object_ids .par_iter() .filter_map(|object_id| { let f = || { @@ -285,6 +288,7 @@ pub(crate) fn generate_import_data( new_object_id, imported_collab, CollabType::Document, + &old_to_new_id_map, ) }; match f() { @@ -301,9 +305,9 @@ pub(crate) fn generate_import_data( }) .collect::>(); - for gen_collab in gen_collabs { - document_object_ids.insert(gen_collab.object_id.clone()); - write_gen_collab(gen_collab, current_collab_db_write_txn); + for document_collab in gen_document_collabs { + document_object_ids.insert(document_collab.object_id.clone()); + write_gen_collab(document_collab, current_collab_db_write_txn); } let (mut views, orphan_views) = match imported_folder.source { @@ -639,6 +643,7 @@ where new_object_id, imported_collab, CollabType::Document, + old_to_new_id_map, ) }) .collect::>(); @@ -706,7 +711,7 @@ where } }); - let gen_collabs = imported_row_ids + let gen_database_row_collabs = imported_row_ids .par_iter() .filter_map(|imported_row_id| { let imported_collab = imported_collab_by_oid.get(imported_row_id)?; @@ -723,12 +728,13 @@ where new_row_id, imported_collab, CollabType::DatabaseRow, + old_to_new_id_map, ), } }) .collect::>(); - for gen_collab in gen_collabs { + for gen_collab in gen_database_row_collabs { write_gen_collab(gen_collab, collab_write_txn); } } @@ -806,29 +812,55 @@ fn gen_sv_and_doc_state( object_id: &str, collab: &Collab, collab_type: CollabType, + ids_map: &OldToNewIdMap, ) -> Option { let encoded_collab = collab .encode_collab_v1(|collab| collab_type.validate_require_data(collab)) .ok()?; - let update = Update::decode_v1(&encoded_collab.doc_state).ok()?; - let doc = Doc::new(); - let mut txn = doc.transact_mut(); - if let Err(e) = txn.apply_update(update) { - error!( - "Collab {} failed to apply update: {}", - collab.object_id(), - e - ); - return None; - } - drop(txn); - let txn = doc.transact(); - let state_vector = txn.state_vector(); - let doc_state = txn.encode_state_as_update_v1(&StateVector::default()); + let (state_vector, doc_state) = match collab_type { + CollabType::Document => { + let collab = Collab::new_with_source( + CollabOrigin::Empty, + object_id, + encoded_collab.into(), + vec![], + false, + ) + .ok()?; + let mut document = Document::open(collab).ok()?; + if let Err(err) = replace_document_ref_ids(&mut document, ids_map) { + error!("[AppFlowyData]: replace document ref ids failed: {}", err); + } + let encode_collab = document.encode_collab().ok()?; + ( + encode_collab.state_vector.to_vec(), + encode_collab.doc_state.to_vec(), + ) + }, + _ => { + let update = Update::decode_v1(&encoded_collab.doc_state).ok()?; + let doc = Doc::new(); + let mut txn = doc.transact_mut(); + if let Err(e) = txn.apply_update(update) { + error!( + "Collab {} failed to apply update: {}", + collab.object_id(), + e + ); + return None; + } + drop(txn); + let txn = doc.transact(); + let state_vector = txn.state_vector(); + let doc_state = txn.encode_state_as_update_v1(&StateVector::default()); + (state_vector.encode_v1(), doc_state) + }, + }; + Some(GenCollab { uid, - sv: state_vector.encode_v1(), + sv: state_vector, doc_state, object_id: object_id.to_string(), }) @@ -1069,6 +1101,7 @@ impl OldToNewIdMap { Self::default() } fn exchange_new_id(&mut self, old_id: &str) -> String { + println!("old_id: {}", old_id); let view_id = self .0 .entry(old_id.to_string()) @@ -1238,3 +1271,70 @@ where }) .collect() } + +fn replace_document_ref_ids( + document: &mut Document, + ids_map: &OldToNewIdMap, +) -> Result<(), anyhow::Error> { + if let Some(page_id) = document.get_page_id() { + // Get all block children and process them + let block_ids = document.get_block_children_ids(&page_id); + + for block_id in block_ids.iter() { + // Process block deltas + + let block_delta = document.get_block_delta(block_id).map(|t| t.1); + if let Some(mut block_deltas) = block_delta { + let mut is_change = false; + for d in block_deltas.iter_mut() { + if let TextDelta::Inserted(_, Some(attrs)) = d { + if let Some(Any::Map(mention)) = attrs.get_mut("mention") { + if let Some(page_id) = mention.get("page_id").map(|v| v.to_string()) { + if let Some(new_page_id) = ids_map.get_exchanged_id(&page_id) { + let mention = Arc::make_mut(mention); + mention.insert("page_id".to_string(), Any::from(new_page_id.clone())); + is_change = true; + } + } + } + } + } + + if is_change { + let _ = document.set_block_delta(block_id, block_deltas); + } + } + + // Process block data + if let Some((_block_type, mut data)) = document.get_block_data(block_id) { + println!("block data: {:?}", data); + let mut updated = false; + if let Some(view_id) = data.get("view_id").and_then(|v| v.as_str()) { + if let Some(new_view_id) = ids_map.get_exchanged_id(view_id) { + data.insert("view_id".to_string(), json!(new_view_id)); + updated = true; + } + } + + if let Some(parent_id) = data.get("parent_id").and_then(|v| v.as_str()) { + if let Some(new_parent_id) = ids_map.get_exchanged_id(parent_id) { + data.insert("parent_id".to_string(), json!(new_parent_id)); + updated = true; + } + } + + // Apply updates only if any changes were made + if updated { + println!("update block data: {:?}", data); + document.update_block(block_id, data).map_err(|err| { + anyhow::Error::msg(format!( + "[AppFlowyData]: update document block data: {}", + err + )) + })?; + } + } + } + } + Ok(()) +}