refactor: rename structs

This commit is contained in:
appflowy 2022-02-26 11:03:42 +08:00
parent 6078e46d3d
commit 01985848f9
14 changed files with 72 additions and 69 deletions

View file

@ -7,8 +7,8 @@ edition = "2018"
[lib] [lib]
name = "dart_ffi" name = "dart_ffi"
# this value will change depending on the target os # this value will change depending on the target os
# default staticlib # default cdylib
crate-type = ["staticlib"] crate-type = ["cdylib"]
[dependencies] [dependencies]

View file

@ -1,8 +1,8 @@
use crate::queue::DocumentRevisionCompact; use crate::queue::BlockRevisionCompact;
use crate::web_socket::{make_document_ws_manager, EditorCommandSender}; use crate::web_socket::{make_block_ws_manager, EditorCommandSender};
use crate::{ use crate::{
errors::FlowyError, errors::FlowyError,
queue::{EditorCommand, EditorCommandQueue}, queue::{EditBlockQueue, EditorCommand},
BlockUser, BlockUser,
}; };
use bytes::Bytes; use bytes::Bytes;
@ -41,7 +41,7 @@ impl ClientBlockEditor {
cloud_service: Arc<dyn RevisionCloudService>, cloud_service: Arc<dyn RevisionCloudService>,
) -> FlowyResult<Arc<Self>> { ) -> FlowyResult<Arc<Self>> {
let document_info = rev_manager let document_info = rev_manager
.load::<BlockInfoBuilder, DocumentRevisionCompact>(cloud_service) .load::<BlockInfoBuilder, BlockRevisionCompact>(cloud_service)
.await?; .await?;
let delta = document_info.delta()?; let delta = document_info.delta()?;
let rev_manager = Arc::new(rev_manager); let rev_manager = Arc::new(rev_manager);
@ -49,7 +49,7 @@ impl ClientBlockEditor {
let user_id = user.user_id()?; let user_id = user.user_id()?;
let edit_cmd_tx = spawn_edit_queue(user, rev_manager.clone(), delta); let edit_cmd_tx = spawn_edit_queue(user, rev_manager.clone(), delta);
let ws_manager = make_document_ws_manager( let ws_manager = make_block_ws_manager(
doc_id.clone(), doc_id.clone(),
user_id.clone(), user_id.clone(),
edit_cmd_tx.clone(), edit_cmd_tx.clone(),
@ -176,7 +176,7 @@ impl ClientBlockEditor {
impl std::ops::Drop for ClientBlockEditor { impl std::ops::Drop for ClientBlockEditor {
fn drop(&mut self) { fn drop(&mut self) {
tracing::trace!("{} ClientDocumentEditor was dropped", self.doc_id) tracing::trace!("{} ClientBlockEditor was dropped", self.doc_id)
} }
} }
@ -187,8 +187,8 @@ fn spawn_edit_queue(
delta: RichTextDelta, delta: RichTextDelta,
) -> EditorCommandSender { ) -> EditorCommandSender {
let (sender, receiver) = mpsc::channel(1000); let (sender, receiver) = mpsc::channel(1000);
let actor = EditorCommandQueue::new(user, rev_manager, delta, receiver); let edit_queue = EditBlockQueue::new(user, rev_manager, delta, receiver);
tokio::spawn(actor.run()); tokio::spawn(edit_queue.run());
sender sender
} }

View file

@ -1,4 +1,4 @@
pub mod editor; pub mod block_editor;
pub mod manager; pub mod manager;
mod queue; mod queue;
mod web_socket; mod web_socket;

View file

@ -1,4 +1,4 @@
use crate::{editor::ClientBlockEditor, errors::FlowyError, BlockCloudService}; use crate::{block_editor::ClientBlockEditor, errors::FlowyError, BlockCloudService};
use bytes::Bytes; use bytes::Bytes;
use dashmap::DashMap; use dashmap::DashMap;
use flowy_collaboration::entities::{ use flowy_collaboration::entities::{
@ -22,27 +22,27 @@ pub trait BlockUser: Send + Sync {
pub struct BlockManager { pub struct BlockManager {
cloud_service: Arc<dyn BlockCloudService>, cloud_service: Arc<dyn BlockCloudService>,
rev_web_socket: Arc<dyn RevisionWebSocket>, rev_web_socket: Arc<dyn RevisionWebSocket>,
block_handlers: Arc<BlockEditorHandlers>, block_editors: Arc<BlockEditors>,
document_user: Arc<dyn BlockUser>, block_user: Arc<dyn BlockUser>,
} }
impl BlockManager { impl BlockManager {
pub fn new( pub fn new(
cloud_service: Arc<dyn BlockCloudService>, cloud_service: Arc<dyn BlockCloudService>,
document_user: Arc<dyn BlockUser>, block_user: Arc<dyn BlockUser>,
rev_web_socket: Arc<dyn RevisionWebSocket>, rev_web_socket: Arc<dyn RevisionWebSocket>,
) -> Self { ) -> Self {
let block_handlers = Arc::new(BlockEditorHandlers::new()); let block_handlers = Arc::new(BlockEditors::new());
Self { Self {
cloud_service, cloud_service,
rev_web_socket, rev_web_socket,
block_handlers, block_editors: block_handlers,
document_user, block_user,
} }
} }
pub fn init(&self) -> FlowyResult<()> { pub fn init(&self) -> FlowyResult<()> {
listen_ws_state_changed(self.rev_web_socket.clone(), self.block_handlers.clone()); listen_ws_state_changed(self.rev_web_socket.clone(), self.block_editors.clone());
Ok(()) Ok(())
} }
@ -58,7 +58,7 @@ impl BlockManager {
pub fn close_block<T: AsRef<str>>(&self, block_id: T) -> Result<(), FlowyError> { pub fn close_block<T: AsRef<str>>(&self, block_id: T) -> Result<(), FlowyError> {
let block_id = block_id.as_ref(); let block_id = block_id.as_ref();
tracing::Span::current().record("block_id", &block_id); tracing::Span::current().record("block_id", &block_id);
self.block_handlers.remove(block_id); self.block_editors.remove(block_id);
Ok(()) Ok(())
} }
@ -66,7 +66,7 @@ impl BlockManager {
pub fn delete<T: AsRef<str>>(&self, doc_id: T) -> Result<(), FlowyError> { pub fn delete<T: AsRef<str>>(&self, doc_id: T) -> Result<(), FlowyError> {
let doc_id = doc_id.as_ref(); let doc_id = doc_id.as_ref();
tracing::Span::current().record("doc_id", &doc_id); tracing::Span::current().record("doc_id", &doc_id);
self.block_handlers.remove(doc_id); self.block_editors.remove(doc_id);
Ok(()) Ok(())
} }
@ -83,7 +83,7 @@ impl BlockManager {
pub async fn reset_with_revisions<T: AsRef<str>>(&self, doc_id: T, revisions: RepeatedRevision) -> FlowyResult<()> { pub async fn reset_with_revisions<T: AsRef<str>>(&self, doc_id: T, revisions: RepeatedRevision) -> FlowyResult<()> {
let doc_id = doc_id.as_ref().to_owned(); let doc_id = doc_id.as_ref().to_owned();
let db_pool = self.document_user.db_pool()?; let db_pool = self.block_user.db_pool()?;
let rev_manager = self.make_rev_manager(&doc_id, db_pool)?; let rev_manager = self.make_rev_manager(&doc_id, db_pool)?;
let _ = rev_manager.reset_object(revisions).await?; let _ = rev_manager.reset_object(revisions).await?;
Ok(()) Ok(())
@ -92,7 +92,7 @@ impl BlockManager {
pub async fn receive_ws_data(&self, data: Bytes) { pub async fn receive_ws_data(&self, data: Bytes) {
let result: Result<ServerRevisionWSData, protobuf::ProtobufError> = data.try_into(); let result: Result<ServerRevisionWSData, protobuf::ProtobufError> = data.try_into();
match result { match result {
Ok(data) => match self.block_handlers.get(&data.object_id) { Ok(data) => match self.block_editors.get(&data.object_id) {
None => tracing::error!("Can't find any source handler for {:?}-{:?}", data.object_id, data.ty), None => tracing::error!("Can't find any source handler for {:?}-{:?}", data.object_id, data.ty),
Some(block_editor) => match block_editor.receive_ws_data(data).await { Some(block_editor) => match block_editor.receive_ws_data(data).await {
Ok(_) => {} Ok(_) => {}
@ -108,9 +108,9 @@ impl BlockManager {
impl BlockManager { impl BlockManager {
async fn get_block_editor(&self, block_id: &str) -> FlowyResult<Arc<ClientBlockEditor>> { async fn get_block_editor(&self, block_id: &str) -> FlowyResult<Arc<ClientBlockEditor>> {
match self.block_handlers.get(block_id) { match self.block_editors.get(block_id) {
None => { None => {
let db_pool = self.document_user.db_pool()?; let db_pool = self.block_user.db_pool()?;
self.make_block_editor(block_id, db_pool).await self.make_block_editor(block_id, db_pool).await
} }
Some(editor) => Ok(editor), Some(editor) => Ok(editor),
@ -122,32 +122,32 @@ impl BlockManager {
block_id: &str, block_id: &str,
pool: Arc<ConnectionPool>, pool: Arc<ConnectionPool>,
) -> Result<Arc<ClientBlockEditor>, FlowyError> { ) -> Result<Arc<ClientBlockEditor>, FlowyError> {
let user = self.document_user.clone(); let user = self.block_user.clone();
let token = self.document_user.token()?; let token = self.block_user.token()?;
let rev_manager = self.make_rev_manager(block_id, pool.clone())?; let rev_manager = self.make_rev_manager(block_id, pool.clone())?;
let cloud_service = Arc::new(DocumentRevisionCloudServiceImpl { let cloud_service = Arc::new(BlockRevisionCloudService {
token, token,
server: self.cloud_service.clone(), server: self.cloud_service.clone(),
}); });
let doc_editor = let doc_editor =
ClientBlockEditor::new(block_id, user, rev_manager, self.rev_web_socket.clone(), cloud_service).await?; ClientBlockEditor::new(block_id, user, rev_manager, self.rev_web_socket.clone(), cloud_service).await?;
self.block_handlers.insert(block_id, &doc_editor); self.block_editors.insert(block_id, &doc_editor);
Ok(doc_editor) Ok(doc_editor)
} }
fn make_rev_manager(&self, doc_id: &str, pool: Arc<ConnectionPool>) -> Result<RevisionManager, FlowyError> { fn make_rev_manager(&self, doc_id: &str, pool: Arc<ConnectionPool>) -> Result<RevisionManager, FlowyError> {
let user_id = self.document_user.user_id()?; let user_id = self.block_user.user_id()?;
let rev_persistence = Arc::new(RevisionPersistence::new(&user_id, doc_id, pool)); let rev_persistence = Arc::new(RevisionPersistence::new(&user_id, doc_id, pool));
Ok(RevisionManager::new(&user_id, doc_id, rev_persistence)) Ok(RevisionManager::new(&user_id, doc_id, rev_persistence))
} }
} }
struct DocumentRevisionCloudServiceImpl { struct BlockRevisionCloudService {
token: String, token: String,
server: Arc<dyn BlockCloudService>, server: Arc<dyn BlockCloudService>,
} }
impl RevisionCloudService for DocumentRevisionCloudServiceImpl { impl RevisionCloudService for BlockRevisionCloudService {
#[tracing::instrument(level = "trace", skip(self))] #[tracing::instrument(level = "trace", skip(self))]
fn fetch_object(&self, user_id: &str, object_id: &str) -> FutureResult<Vec<Revision>, FlowyError> { fn fetch_object(&self, user_id: &str, object_id: &str) -> FutureResult<Vec<Revision>, FlowyError> {
let params: BlockId = object_id.to_string().into(); let params: BlockId = object_id.to_string().into();
@ -170,11 +170,11 @@ impl RevisionCloudService for DocumentRevisionCloudServiceImpl {
} }
} }
pub struct BlockEditorHandlers { pub struct BlockEditors {
inner: DashMap<String, Arc<ClientBlockEditor>>, inner: DashMap<String, Arc<ClientBlockEditor>>,
} }
impl BlockEditorHandlers { impl BlockEditors {
fn new() -> Self { fn new() -> Self {
Self { inner: DashMap::new() } Self { inner: DashMap::new() }
} }
@ -207,7 +207,7 @@ impl BlockEditorHandlers {
} }
#[tracing::instrument(level = "trace", skip(web_socket, handlers))] #[tracing::instrument(level = "trace", skip(web_socket, handlers))]
fn listen_ws_state_changed(web_socket: Arc<dyn RevisionWebSocket>, handlers: Arc<BlockEditorHandlers>) { fn listen_ws_state_changed(web_socket: Arc<dyn RevisionWebSocket>, handlers: Arc<BlockEditors>) {
tokio::spawn(async move { tokio::spawn(async move {
let mut notify = web_socket.subscribe_state_changed().await; let mut notify = web_socket.subscribe_state_changed().await;
while let Ok(state) = notify.recv().await { while let Ok(state) = notify.recv().await {

View file

@ -19,14 +19,14 @@ use tokio::sync::{oneshot, RwLock};
// The EditorCommandQueue executes each command that will alter the document in // The EditorCommandQueue executes each command that will alter the document in
// serial. // serial.
pub(crate) struct EditorCommandQueue { pub(crate) struct EditBlockQueue {
document: Arc<RwLock<ClientDocument>>, document: Arc<RwLock<ClientDocument>>,
user: Arc<dyn BlockUser>, user: Arc<dyn BlockUser>,
rev_manager: Arc<RevisionManager>, rev_manager: Arc<RevisionManager>,
receiver: Option<EditorCommandReceiver>, receiver: Option<EditorCommandReceiver>,
} }
impl EditorCommandQueue { impl EditBlockQueue {
pub(crate) fn new( pub(crate) fn new(
user: Arc<dyn BlockUser>, user: Arc<dyn BlockUser>,
rev_manager: Arc<RevisionManager>, rev_manager: Arc<RevisionManager>,
@ -187,17 +187,17 @@ impl EditorCommandQueue {
); );
let _ = self let _ = self
.rev_manager .rev_manager
.add_local_revision::<DocumentRevisionCompact>(&revision) .add_local_revision::<BlockRevisionCompact>(&revision)
.await?; .await?;
Ok(rev_id.into()) Ok(rev_id.into())
} }
} }
pub(crate) struct DocumentRevisionCompact(); pub(crate) struct BlockRevisionCompact();
impl RevisionCompact for DocumentRevisionCompact { impl RevisionCompact for BlockRevisionCompact {
fn compact_revisions(user_id: &str, object_id: &str, mut revisions: Vec<Revision>) -> FlowyResult<Revision> { fn compact_revisions(user_id: &str, object_id: &str, mut revisions: Vec<Revision>) -> FlowyResult<Revision> {
if revisions.is_empty() { if revisions.is_empty() {
return Err(FlowyError::internal().context("Can't compact the empty document's revisions")); return Err(FlowyError::internal().context("Can't compact the empty block's revisions"));
} }
if revisions.len() == 1 { if revisions.len() == 1 {

View file

@ -22,7 +22,7 @@ use tokio::sync::{
pub(crate) type EditorCommandSender = Sender<EditorCommand>; pub(crate) type EditorCommandSender = Sender<EditorCommand>;
pub(crate) type EditorCommandReceiver = Receiver<EditorCommand>; pub(crate) type EditorCommandReceiver = Receiver<EditorCommand>;
pub(crate) async fn make_document_ws_manager( pub(crate) async fn make_block_ws_manager(
doc_id: String, doc_id: String,
user_id: String, user_id: String,
edit_cmd_tx: EditorCommandSender, edit_cmd_tx: EditorCommandSender,
@ -41,7 +41,7 @@ pub(crate) async fn make_document_ws_manager(
let ws_data_sink = Arc::new(BlockWSDataSink(ws_data_provider)); let ws_data_sink = Arc::new(BlockWSDataSink(ws_data_provider));
let ping_duration = Duration::from_millis(DOCUMENT_SYNC_INTERVAL_IN_MILLIS); let ping_duration = Duration::from_millis(DOCUMENT_SYNC_INTERVAL_IN_MILLIS);
let ws_manager = Arc::new(RevisionWebSocketManager::new( let ws_manager = Arc::new(RevisionWebSocketManager::new(
"Document", "Block",
&doc_id, &doc_id,
rev_web_socket, rev_web_socket,
ws_data_sink, ws_data_sink,

View file

@ -1,5 +1,5 @@
use flowy_collaboration::entities::revision::RevisionState; use flowy_collaboration::entities::revision::RevisionState;
use flowy_document::editor::ClientBlockEditor; use flowy_document::block_editor::ClientBlockEditor;
use flowy_document::DOCUMENT_SYNC_INTERVAL_IN_MILLIS; use flowy_document::DOCUMENT_SYNC_INTERVAL_IN_MILLIS;
use flowy_test::{helper::ViewTest, FlowySDKTest}; use flowy_test::{helper::ViewTest, FlowySDKTest};
use lib_ot::{core::Interval, rich_text::RichTextDelta}; use lib_ot::{core::Interval, rich_text::RichTextDelta};

View file

@ -17,7 +17,7 @@ use crate::{
errors::FlowyResult, errors::FlowyResult,
event_map::{FolderCouldServiceV1, WorkspaceDatabase, WorkspaceUser}, event_map::{FolderCouldServiceV1, WorkspaceDatabase, WorkspaceUser},
services::{ services::{
folder_editor::FolderEditor, persistence::FolderPersistence, set_current_workspace, AppController, folder_editor::ClientFolderEditor, persistence::FolderPersistence, set_current_workspace, AppController,
TrashController, ViewController, WorkspaceController, TrashController, ViewController, WorkspaceController,
}, },
}; };
@ -63,7 +63,7 @@ pub struct FolderManager {
pub(crate) view_controller: Arc<ViewController>, pub(crate) view_controller: Arc<ViewController>,
pub(crate) trash_controller: Arc<TrashController>, pub(crate) trash_controller: Arc<TrashController>,
web_socket: Arc<dyn RevisionWebSocket>, web_socket: Arc<dyn RevisionWebSocket>,
folder_editor: Arc<TokioRwLock<Option<Arc<FolderEditor>>>>, folder_editor: Arc<TokioRwLock<Option<Arc<ClientFolderEditor>>>>,
} }
impl FolderManager { impl FolderManager {
@ -162,7 +162,7 @@ impl FolderManager {
let _ = self.persistence.initialize(user_id, &folder_id).await?; let _ = self.persistence.initialize(user_id, &folder_id).await?;
let pool = self.persistence.db_pool()?; let pool = self.persistence.db_pool()?;
let folder_editor = FolderEditor::new(user_id, &folder_id, token, pool, self.web_socket.clone()).await?; let folder_editor = ClientFolderEditor::new(user_id, &folder_id, token, pool, self.web_socket.clone()).await?;
*self.folder_editor.write().await = Some(Arc::new(folder_editor)); *self.folder_editor.write().await = Some(Arc::new(folder_editor));
let _ = self.app_controller.initialize()?; let _ = self.app_controller.initialize()?;
@ -219,7 +219,7 @@ impl DefaultFolderBuilder {
#[cfg(feature = "flowy_unit_test")] #[cfg(feature = "flowy_unit_test")]
impl FolderManager { impl FolderManager {
pub async fn folder_editor(&self) -> Arc<FolderEditor> { pub async fn folder_editor(&self) -> Arc<ClientFolderEditor> {
self.folder_editor.read().await.clone().unwrap() self.folder_editor.read().await.clone().unwrap()
} }
} }

View file

@ -17,7 +17,7 @@ use lib_sqlite::ConnectionPool;
use parking_lot::RwLock; use parking_lot::RwLock;
use std::sync::Arc; use std::sync::Arc;
pub struct FolderEditor { pub struct ClientFolderEditor {
user_id: String, user_id: String,
pub(crate) folder_id: FolderId, pub(crate) folder_id: FolderId,
pub(crate) folder: Arc<RwLock<FolderPad>>, pub(crate) folder: Arc<RwLock<FolderPad>>,
@ -25,7 +25,7 @@ pub struct FolderEditor {
ws_manager: Arc<RevisionWebSocketManager>, ws_manager: Arc<RevisionWebSocketManager>,
} }
impl FolderEditor { impl ClientFolderEditor {
pub async fn new( pub async fn new(
user_id: &str, user_id: &str,
folder_id: &FolderId, folder_id: &FolderId,
@ -35,7 +35,7 @@ impl FolderEditor {
) -> FlowyResult<Self> { ) -> FlowyResult<Self> {
let rev_persistence = Arc::new(RevisionPersistence::new(user_id, folder_id.as_ref(), pool)); let rev_persistence = Arc::new(RevisionPersistence::new(user_id, folder_id.as_ref(), pool));
let mut rev_manager = RevisionManager::new(user_id, folder_id.as_ref(), rev_persistence); let mut rev_manager = RevisionManager::new(user_id, folder_id.as_ref(), rev_persistence);
let cloud = Arc::new(FolderRevisionCloudServiceImpl { let cloud = Arc::new(FolderRevisionCloudService {
token: token.to_string(), token: token.to_string(),
}); });
let folder = Arc::new(RwLock::new( let folder = Arc::new(RwLock::new(
@ -109,12 +109,12 @@ impl RevisionObjectBuilder for FolderPadBuilder {
} }
} }
struct FolderRevisionCloudServiceImpl { struct FolderRevisionCloudService {
#[allow(dead_code)] #[allow(dead_code)]
token: String, token: String,
} }
impl RevisionCloudService for FolderRevisionCloudServiceImpl { impl RevisionCloudService for FolderRevisionCloudService {
#[tracing::instrument(level = "trace", skip(self))] #[tracing::instrument(level = "trace", skip(self))]
fn fetch_object(&self, _user_id: &str, _object_id: &str) -> FutureResult<Vec<Revision>, FlowyError> { fn fetch_object(&self, _user_id: &str, _object_id: &str) -> FutureResult<Vec<Revision>, FlowyError> {
FutureResult::new(async move { Ok(vec![]) }) FutureResult::new(async move { Ok(vec![]) })
@ -122,7 +122,7 @@ impl RevisionCloudService for FolderRevisionCloudServiceImpl {
} }
#[cfg(feature = "flowy_unit_test")] #[cfg(feature = "flowy_unit_test")]
impl FolderEditor { impl ClientFolderEditor {
pub fn rev_manager(&self) -> Arc<RevisionManager> { pub fn rev_manager(&self) -> Arc<RevisionManager> {
self.rev_manager.clone() self.rev_manager.clone()
} }

View file

@ -13,7 +13,7 @@ pub use version_1::{app_sql::*, trash_sql::*, v1_impl::V1Transaction, view_sql::
use crate::{ use crate::{
controller::FolderId, controller::FolderId,
event_map::WorkspaceDatabase, event_map::WorkspaceDatabase,
services::{folder_editor::FolderEditor, persistence::migration::FolderMigration}, services::{folder_editor::ClientFolderEditor, persistence::migration::FolderMigration},
}; };
use flowy_error::{FlowyError, FlowyResult}; use flowy_error::{FlowyError, FlowyResult};
use flowy_folder_data_model::entities::{ use flowy_folder_data_model::entities::{
@ -50,11 +50,14 @@ pub trait FolderPersistenceTransaction {
pub struct FolderPersistence { pub struct FolderPersistence {
database: Arc<dyn WorkspaceDatabase>, database: Arc<dyn WorkspaceDatabase>,
folder_editor: Arc<RwLock<Option<Arc<FolderEditor>>>>, folder_editor: Arc<RwLock<Option<Arc<ClientFolderEditor>>>>,
} }
impl FolderPersistence { impl FolderPersistence {
pub fn new(database: Arc<dyn WorkspaceDatabase>, folder_editor: Arc<RwLock<Option<Arc<FolderEditor>>>>) -> Self { pub fn new(
database: Arc<dyn WorkspaceDatabase>,
folder_editor: Arc<RwLock<Option<Arc<ClientFolderEditor>>>>,
) -> Self {
Self { Self {
database, database,
folder_editor, folder_editor,

View file

@ -1,5 +1,5 @@
use crate::services::{ use crate::services::{
folder_editor::FolderEditor, folder_editor::ClientFolderEditor,
persistence::{AppChangeset, FolderPersistenceTransaction, ViewChangeset, WorkspaceChangeset}, persistence::{AppChangeset, FolderPersistenceTransaction, ViewChangeset, WorkspaceChangeset},
}; };
use flowy_error::{FlowyError, FlowyResult}; use flowy_error::{FlowyError, FlowyResult};
@ -11,7 +11,7 @@ use flowy_folder_data_model::entities::{
}; };
use std::sync::Arc; use std::sync::Arc;
impl FolderPersistenceTransaction for FolderEditor { impl FolderPersistenceTransaction for ClientFolderEditor {
fn create_workspace(&self, _user_id: &str, workspace: Workspace) -> FlowyResult<()> { fn create_workspace(&self, _user_id: &str, workspace: Workspace) -> FlowyResult<()> {
if let Some(change) = self.folder.write().create_workspace(workspace)? { if let Some(change) = self.folder.write().create_workspace(workspace)? {
let _ = self.apply_change(change)?; let _ = self.apply_change(change)?;

View file

@ -1,6 +1,6 @@
use crate::helper::*; use crate::helper::*;
use flowy_collaboration::entities::{document_info::BlockInfo, revision::RevisionState}; use flowy_collaboration::entities::{document_info::BlockInfo, revision::RevisionState};
use flowy_folder::{errors::ErrorCode, services::folder_editor::FolderEditor}; use flowy_folder::{errors::ErrorCode, services::folder_editor::ClientFolderEditor};
use flowy_folder_data_model::entities::{ use flowy_folder_data_model::entities::{
app::{App, RepeatedApp}, app::{App, RepeatedApp},
trash::Trash, trash::Trash,
@ -95,7 +95,7 @@ impl FolderTest {
pub async fn run_script(&mut self, script: FolderScript) { pub async fn run_script(&mut self, script: FolderScript) {
let sdk = &self.sdk; let sdk = &self.sdk;
let folder_editor: Arc<FolderEditor> = sdk.folder_manager.folder_editor().await; let folder_editor: Arc<ClientFolderEditor> = sdk.folder_manager.folder_editor().await;
let rev_manager = folder_editor.rev_manager(); let rev_manager = folder_editor.rev_manager();
let cache = rev_manager.revision_cache().await; let cache = rev_manager.revision_cache().await;

View file

@ -24,7 +24,7 @@ impl DocumentDepsResolver {
user_session: Arc<UserSession>, user_session: Arc<UserSession>,
server_config: &ClientServerConfiguration, server_config: &ClientServerConfiguration,
) -> Arc<BlockManager> { ) -> Arc<BlockManager> {
let user = Arc::new(DocumentUserImpl(user_session)); let user = Arc::new(BlockUserImpl(user_session));
let ws_sender = Arc::new(BlockWebSocket(ws_conn.clone())); let ws_sender = Arc::new(BlockWebSocket(ws_conn.clone()));
let cloud_service: Arc<dyn BlockCloudService> = match local_server { let cloud_service: Arc<dyn BlockCloudService> = match local_server {
None => Arc::new(BlockHttpCloudService::new(server_config.clone())), None => Arc::new(BlockHttpCloudService::new(server_config.clone())),
@ -39,8 +39,8 @@ impl DocumentDepsResolver {
} }
} }
struct DocumentUserImpl(Arc<UserSession>); struct BlockUserImpl(Arc<UserSession>);
impl BlockUser for DocumentUserImpl { impl BlockUser for BlockUserImpl {
fn user_dir(&self) -> Result<String, FlowyError> { fn user_dir(&self) -> Result<String, FlowyError> {
let dir = self.0.user_dir().map_err(|e| FlowyError::unauthorized().context(e))?; let dir = self.0.user_dir().map_err(|e| FlowyError::unauthorized().context(e))?;

View file

@ -23,7 +23,7 @@ pub struct RevisionPersistence {
object_id: String, object_id: String,
disk_cache: Arc<dyn RevisionDiskCache<Error = FlowyError>>, disk_cache: Arc<dyn RevisionDiskCache<Error = FlowyError>>,
memory_cache: Arc<RevisionMemoryCache>, memory_cache: Arc<RevisionMemoryCache>,
sync_seq: RwLock<SyncSequence>, sync_seq: RwLock<RevisionSyncSequence>,
} }
impl RevisionPersistence { impl RevisionPersistence {
pub fn new(user_id: &str, object_id: &str, pool: Arc<ConnectionPool>) -> RevisionPersistence { pub fn new(user_id: &str, object_id: &str, pool: Arc<ConnectionPool>) -> RevisionPersistence {
@ -31,7 +31,7 @@ impl RevisionPersistence {
let memory_cache = Arc::new(RevisionMemoryCache::new(object_id, Arc::new(disk_cache.clone()))); let memory_cache = Arc::new(RevisionMemoryCache::new(object_id, Arc::new(disk_cache.clone())));
let object_id = object_id.to_owned(); let object_id = object_id.to_owned();
let user_id = user_id.to_owned(); let user_id = user_id.to_owned();
let sync_seq = RwLock::new(SyncSequence::new()); let sync_seq = RwLock::new(RevisionSyncSequence::new());
Self { Self {
user_id, user_id,
object_id, object_id,
@ -261,10 +261,10 @@ impl RevisionRecord {
} }
#[derive(Default)] #[derive(Default)]
struct SyncSequence(VecDeque<i64>); struct RevisionSyncSequence(VecDeque<i64>);
impl SyncSequence { impl RevisionSyncSequence {
fn new() -> Self { fn new() -> Self {
SyncSequence::default() RevisionSyncSequence::default()
} }
fn add(&mut self, new_rev_id: i64) -> FlowyResult<()> { fn add(&mut self, new_rev_id: i64) -> FlowyResult<()> {