mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: Import appflowy data (#4236)
* refactor: traits * feat: import data * chore: track database view * fix: import * refactor: collab doc state * refactor: get collab doc state * feat: batch create collab object * fix: test * ci: run docker compose if the server is not up * chore: bump collab * chore: update ci * chore: update ci * chore: update ci * chore: implement ui * chore: implement ui * chore: implement ui
This commit is contained in:
@ -1,13 +1,13 @@
|
||||
use std::collections::HashMap;
|
||||
use std::num::NonZeroUsize;
|
||||
use std::sync::{Arc, Weak};
|
||||
|
||||
use collab::core::collab::{CollabRawData, MutexCollab};
|
||||
use collab::core::collab::{CollabDocState, MutexCollab};
|
||||
use collab_database::blocks::BlockEvent;
|
||||
use collab_database::database::{DatabaseData, MutexDatabase, YrsDocAction};
|
||||
use collab_database::error::DatabaseError;
|
||||
use collab_database::user::{
|
||||
CollabFuture, CollabObjectUpdate, CollabObjectUpdateByOid, DatabaseCollabService,
|
||||
WorkspaceDatabase,
|
||||
CollabDocStateByOid, CollabFuture, DatabaseCollabService, WorkspaceDatabase,
|
||||
};
|
||||
use collab_database::views::{CreateDatabaseParams, CreateViewParams, DatabaseLayout};
|
||||
use collab_entity::CollabType;
|
||||
@ -95,14 +95,14 @@ impl DatabaseManager {
|
||||
cloud_service: self.cloud_service.clone(),
|
||||
};
|
||||
let config = CollabPersistenceConfig::new().snapshot_per_update(10);
|
||||
let mut collab_raw_data = CollabRawData::default();
|
||||
let mut collab_raw_data = CollabDocState::default();
|
||||
|
||||
// If the workspace database not exist in disk, try to fetch from remote.
|
||||
if !self.is_collab_exist(uid, &collab_db, &database_views_aggregate_id) {
|
||||
trace!("workspace database not exist, try to fetch from remote");
|
||||
match self
|
||||
.cloud_service
|
||||
.get_collab_update(
|
||||
.get_collab_doc_state_db(
|
||||
&database_views_aggregate_id,
|
||||
CollabType::WorkspaceDatabase,
|
||||
&workspace_id,
|
||||
@ -172,6 +172,19 @@ impl DatabaseManager {
|
||||
RepeatedDatabaseDescriptionPB { items }
|
||||
}
|
||||
|
||||
pub async fn track_database(
|
||||
&self,
|
||||
view_ids_by_database_id: HashMap<String, Vec<String>>,
|
||||
) -> FlowyResult<()> {
|
||||
let wdb = self.get_workspace_database().await?;
|
||||
view_ids_by_database_id
|
||||
.into_iter()
|
||||
.for_each(|(database_id, view_ids)| {
|
||||
wdb.track_database(&database_id, view_ids);
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn get_database_with_view_id(&self, view_id: &str) -> FlowyResult<Arc<DatabaseEditor>> {
|
||||
let database_id = self.get_database_id_with_view_id(view_id).await?;
|
||||
self.get_database(&database_id).await
|
||||
@ -394,11 +407,11 @@ struct UserDatabaseCollabServiceImpl {
|
||||
}
|
||||
|
||||
impl DatabaseCollabService for UserDatabaseCollabServiceImpl {
|
||||
fn get_collab_update(
|
||||
fn get_collab_doc_state(
|
||||
&self,
|
||||
object_id: &str,
|
||||
object_ty: CollabType,
|
||||
) -> CollabFuture<Result<CollabObjectUpdate, DatabaseError>> {
|
||||
) -> CollabFuture<Result<CollabDocState, DatabaseError>> {
|
||||
let workspace_id = self.workspace_id.clone();
|
||||
let object_id = object_id.to_string();
|
||||
let weak_cloud_service = Arc::downgrade(&self.cloud_service);
|
||||
@ -410,7 +423,7 @@ impl DatabaseCollabService for UserDatabaseCollabServiceImpl {
|
||||
},
|
||||
Some(cloud_service) => {
|
||||
let updates = cloud_service
|
||||
.get_collab_update(&object_id, object_ty, &workspace_id)
|
||||
.get_collab_doc_state_db(&object_id, object_ty, &workspace_id)
|
||||
.await?;
|
||||
Ok(updates)
|
||||
},
|
||||
@ -422,18 +435,18 @@ impl DatabaseCollabService for UserDatabaseCollabServiceImpl {
|
||||
&self,
|
||||
object_ids: Vec<String>,
|
||||
object_ty: CollabType,
|
||||
) -> CollabFuture<Result<CollabObjectUpdateByOid, DatabaseError>> {
|
||||
) -> CollabFuture<Result<CollabDocStateByOid, DatabaseError>> {
|
||||
let workspace_id = self.workspace_id.clone();
|
||||
let weak_cloud_service = Arc::downgrade(&self.cloud_service);
|
||||
Box::pin(async move {
|
||||
match weak_cloud_service.upgrade() {
|
||||
None => {
|
||||
tracing::warn!("Cloud service is dropped");
|
||||
Ok(CollabObjectUpdateByOid::default())
|
||||
Ok(CollabDocStateByOid::default())
|
||||
},
|
||||
Some(cloud_service) => {
|
||||
let updates = cloud_service
|
||||
.batch_get_collab_updates(object_ids, object_ty, &workspace_id)
|
||||
.batch_get_collab_doc_state_db(object_ids, object_ty, &workspace_id)
|
||||
.await?;
|
||||
Ok(updates)
|
||||
},
|
||||
@ -447,7 +460,7 @@ impl DatabaseCollabService for UserDatabaseCollabServiceImpl {
|
||||
object_id: &str,
|
||||
object_type: CollabType,
|
||||
collab_db: Weak<RocksCollabDB>,
|
||||
collab_raw_data: CollabRawData,
|
||||
collab_raw_data: CollabDocState,
|
||||
config: &CollabPersistenceConfig,
|
||||
) -> Arc<MutexCollab> {
|
||||
block_on(self.collab_builder.build_with_config(
|
||||
|
Reference in New Issue
Block a user