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]
name = "dart_ffi"
# this value will change depending on the target os
# default staticlib
crate-type = ["staticlib"]
# default cdylib
crate-type = ["cdylib"]
[dependencies]

View File

@ -1,8 +1,8 @@
use crate::queue::DocumentRevisionCompact;
use crate::web_socket::{make_document_ws_manager, EditorCommandSender};
use crate::queue::BlockRevisionCompact;
use crate::web_socket::{make_block_ws_manager, EditorCommandSender};
use crate::{
errors::FlowyError,
queue::{EditorCommand, EditorCommandQueue},
queue::{EditBlockQueue, EditorCommand},
BlockUser,
};
use bytes::Bytes;
@ -41,7 +41,7 @@ impl ClientBlockEditor {
cloud_service: Arc<dyn RevisionCloudService>,
) -> FlowyResult<Arc<Self>> {
let document_info = rev_manager
.load::<BlockInfoBuilder, DocumentRevisionCompact>(cloud_service)
.load::<BlockInfoBuilder, BlockRevisionCompact>(cloud_service)
.await?;
let delta = document_info.delta()?;
let rev_manager = Arc::new(rev_manager);
@ -49,7 +49,7 @@ impl ClientBlockEditor {
let user_id = user.user_id()?;
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(),
user_id.clone(),
edit_cmd_tx.clone(),
@ -176,7 +176,7 @@ impl ClientBlockEditor {
impl std::ops::Drop for ClientBlockEditor {
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,
) -> EditorCommandSender {
let (sender, receiver) = mpsc::channel(1000);
let actor = EditorCommandQueue::new(user, rev_manager, delta, receiver);
tokio::spawn(actor.run());
let edit_queue = EditBlockQueue::new(user, rev_manager, delta, receiver);
tokio::spawn(edit_queue.run());
sender
}

View File

@ -1,4 +1,4 @@
pub mod editor;
pub mod block_editor;
pub mod manager;
mod queue;
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 dashmap::DashMap;
use flowy_collaboration::entities::{
@ -22,27 +22,27 @@ pub trait BlockUser: Send + Sync {
pub struct BlockManager {
cloud_service: Arc<dyn BlockCloudService>,
rev_web_socket: Arc<dyn RevisionWebSocket>,
block_handlers: Arc<BlockEditorHandlers>,
document_user: Arc<dyn BlockUser>,
block_editors: Arc<BlockEditors>,
block_user: Arc<dyn BlockUser>,
}
impl BlockManager {
pub fn new(
cloud_service: Arc<dyn BlockCloudService>,
document_user: Arc<dyn BlockUser>,
block_user: Arc<dyn BlockUser>,
rev_web_socket: Arc<dyn RevisionWebSocket>,
) -> Self {
let block_handlers = Arc::new(BlockEditorHandlers::new());
let block_handlers = Arc::new(BlockEditors::new());
Self {
cloud_service,
rev_web_socket,
block_handlers,
document_user,
block_editors: block_handlers,
block_user,
}
}
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(())
}
@ -58,7 +58,7 @@ impl BlockManager {
pub fn close_block<T: AsRef<str>>(&self, block_id: T) -> Result<(), FlowyError> {
let block_id = block_id.as_ref();
tracing::Span::current().record("block_id", &block_id);
self.block_handlers.remove(block_id);
self.block_editors.remove(block_id);
Ok(())
}
@ -66,7 +66,7 @@ impl BlockManager {
pub fn delete<T: AsRef<str>>(&self, doc_id: T) -> Result<(), FlowyError> {
let doc_id = doc_id.as_ref();
tracing::Span::current().record("doc_id", &doc_id);
self.block_handlers.remove(doc_id);
self.block_editors.remove(doc_id);
Ok(())
}
@ -83,7 +83,7 @@ impl BlockManager {
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 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.reset_object(revisions).await?;
Ok(())
@ -92,7 +92,7 @@ impl BlockManager {
pub async fn receive_ws_data(&self, data: Bytes) {
let result: Result<ServerRevisionWSData, protobuf::ProtobufError> = data.try_into();
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),
Some(block_editor) => match block_editor.receive_ws_data(data).await {
Ok(_) => {}
@ -108,9 +108,9 @@ impl BlockManager {
impl BlockManager {
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 => {
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
}
Some(editor) => Ok(editor),
@ -122,32 +122,32 @@ impl BlockManager {
block_id: &str,
pool: Arc<ConnectionPool>,
) -> Result<Arc<ClientBlockEditor>, FlowyError> {
let user = self.document_user.clone();
let token = self.document_user.token()?;
let user = self.block_user.clone();
let token = self.block_user.token()?;
let rev_manager = self.make_rev_manager(block_id, pool.clone())?;
let cloud_service = Arc::new(DocumentRevisionCloudServiceImpl {
let cloud_service = Arc::new(BlockRevisionCloudService {
token,
server: self.cloud_service.clone(),
});
let doc_editor =
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)
}
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));
Ok(RevisionManager::new(&user_id, doc_id, rev_persistence))
}
}
struct DocumentRevisionCloudServiceImpl {
struct BlockRevisionCloudService {
token: String,
server: Arc<dyn BlockCloudService>,
}
impl RevisionCloudService for DocumentRevisionCloudServiceImpl {
impl RevisionCloudService for BlockRevisionCloudService {
#[tracing::instrument(level = "trace", skip(self))]
fn fetch_object(&self, user_id: &str, object_id: &str) -> FutureResult<Vec<Revision>, FlowyError> {
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>>,
}
impl BlockEditorHandlers {
impl BlockEditors {
fn new() -> Self {
Self { inner: DashMap::new() }
}
@ -207,7 +207,7 @@ impl BlockEditorHandlers {
}
#[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 {
let mut notify = web_socket.subscribe_state_changed().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
// serial.
pub(crate) struct EditorCommandQueue {
pub(crate) struct EditBlockQueue {
document: Arc<RwLock<ClientDocument>>,
user: Arc<dyn BlockUser>,
rev_manager: Arc<RevisionManager>,
receiver: Option<EditorCommandReceiver>,
}
impl EditorCommandQueue {
impl EditBlockQueue {
pub(crate) fn new(
user: Arc<dyn BlockUser>,
rev_manager: Arc<RevisionManager>,
@ -187,17 +187,17 @@ impl EditorCommandQueue {
);
let _ = self
.rev_manager
.add_local_revision::<DocumentRevisionCompact>(&revision)
.add_local_revision::<BlockRevisionCompact>(&revision)
.await?;
Ok(rev_id.into())
}
}
pub(crate) struct DocumentRevisionCompact();
impl RevisionCompact for DocumentRevisionCompact {
pub(crate) struct BlockRevisionCompact();
impl RevisionCompact for BlockRevisionCompact {
fn compact_revisions(user_id: &str, object_id: &str, mut revisions: Vec<Revision>) -> FlowyResult<Revision> {
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 {

View File

@ -22,7 +22,7 @@ use tokio::sync::{
pub(crate) type EditorCommandSender = Sender<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,
user_id: String,
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 ping_duration = Duration::from_millis(DOCUMENT_SYNC_INTERVAL_IN_MILLIS);
let ws_manager = Arc::new(RevisionWebSocketManager::new(
"Document",
"Block",
&doc_id,
rev_web_socket,
ws_data_sink,

View File

@ -1,5 +1,5 @@
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_test::{helper::ViewTest, FlowySDKTest};
use lib_ot::{core::Interval, rich_text::RichTextDelta};

View File

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

View File

@ -17,7 +17,7 @@ use lib_sqlite::ConnectionPool;
use parking_lot::RwLock;
use std::sync::Arc;
pub struct FolderEditor {
pub struct ClientFolderEditor {
user_id: String,
pub(crate) folder_id: FolderId,
pub(crate) folder: Arc<RwLock<FolderPad>>,
@ -25,7 +25,7 @@ pub struct FolderEditor {
ws_manager: Arc<RevisionWebSocketManager>,
}
impl FolderEditor {
impl ClientFolderEditor {
pub async fn new(
user_id: &str,
folder_id: &FolderId,
@ -35,7 +35,7 @@ impl FolderEditor {
) -> FlowyResult<Self> {
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 cloud = Arc::new(FolderRevisionCloudServiceImpl {
let cloud = Arc::new(FolderRevisionCloudService {
token: token.to_string(),
});
let folder = Arc::new(RwLock::new(
@ -109,12 +109,12 @@ impl RevisionObjectBuilder for FolderPadBuilder {
}
}
struct FolderRevisionCloudServiceImpl {
struct FolderRevisionCloudService {
#[allow(dead_code)]
token: String,
}
impl RevisionCloudService for FolderRevisionCloudServiceImpl {
impl RevisionCloudService for FolderRevisionCloudService {
#[tracing::instrument(level = "trace", skip(self))]
fn fetch_object(&self, _user_id: &str, _object_id: &str) -> FutureResult<Vec<Revision>, FlowyError> {
FutureResult::new(async move { Ok(vec![]) })
@ -122,7 +122,7 @@ impl RevisionCloudService for FolderRevisionCloudServiceImpl {
}
#[cfg(feature = "flowy_unit_test")]
impl FolderEditor {
impl ClientFolderEditor {
pub fn rev_manager(&self) -> Arc<RevisionManager> {
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::{
controller::FolderId,
event_map::WorkspaceDatabase,
services::{folder_editor::FolderEditor, persistence::migration::FolderMigration},
services::{folder_editor::ClientFolderEditor, persistence::migration::FolderMigration},
};
use flowy_error::{FlowyError, FlowyResult};
use flowy_folder_data_model::entities::{
@ -50,11 +50,14 @@ pub trait FolderPersistenceTransaction {
pub struct FolderPersistence {
database: Arc<dyn WorkspaceDatabase>,
folder_editor: Arc<RwLock<Option<Arc<FolderEditor>>>>,
folder_editor: Arc<RwLock<Option<Arc<ClientFolderEditor>>>>,
}
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 {
database,
folder_editor,

View File

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

View File

@ -1,6 +1,6 @@
use crate::helper::*;
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::{
app::{App, RepeatedApp},
trash::Trash,
@ -95,7 +95,7 @@ impl FolderTest {
pub async fn run_script(&mut self, script: FolderScript) {
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 cache = rev_manager.revision_cache().await;

View File

@ -24,7 +24,7 @@ impl DocumentDepsResolver {
user_session: Arc<UserSession>,
server_config: &ClientServerConfiguration,
) -> 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 cloud_service: Arc<dyn BlockCloudService> = match local_server {
None => Arc::new(BlockHttpCloudService::new(server_config.clone())),
@ -39,8 +39,8 @@ impl DocumentDepsResolver {
}
}
struct DocumentUserImpl(Arc<UserSession>);
impl BlockUser for DocumentUserImpl {
struct BlockUserImpl(Arc<UserSession>);
impl BlockUser for BlockUserImpl {
fn user_dir(&self) -> Result<String, FlowyError> {
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,
disk_cache: Arc<dyn RevisionDiskCache<Error = FlowyError>>,
memory_cache: Arc<RevisionMemoryCache>,
sync_seq: RwLock<SyncSequence>,
sync_seq: RwLock<RevisionSyncSequence>,
}
impl 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 object_id = object_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 {
user_id,
object_id,
@ -261,10 +261,10 @@ impl RevisionRecord {
}
#[derive(Default)]
struct SyncSequence(VecDeque<i64>);
impl SyncSequence {
struct RevisionSyncSequence(VecDeque<i64>);
impl RevisionSyncSequence {
fn new() -> Self {
SyncSequence::default()
RevisionSyncSequence::default()
}
fn add(&mut self, new_rev_id: i64) -> FlowyResult<()> {