use std::sync::Arc; use parking_lot::RwLock; use tokio::sync::mpsc; use flowy_database_deps::cloud::DatabaseCloudService; use flowy_document_deps::cloud::DocumentCloudService; use flowy_error::FlowyError; use flowy_folder_deps::cloud::FolderCloudService; use flowy_storage::FileStorageService; // use flowy_user::services::database::{ // get_user_profile, get_user_workspace, open_collab_db, open_user_db, // }; use flowy_user_deps::cloud::UserCloudService; use flowy_user_deps::entities::*; use crate::local_server::impls::{ LocalServerDatabaseCloudServiceImpl, LocalServerDocumentCloudServiceImpl, LocalServerFolderCloudServiceImpl, LocalServerUserAuthServiceImpl, }; use crate::AppFlowyServer; pub trait LocalServerDB: Send + Sync + 'static { fn get_user_profile(&self, uid: i64) -> Result; fn get_user_workspace(&self, uid: i64) -> Result, FlowyError>; } pub struct LocalServer { local_db: Arc, stop_tx: RwLock>>, } impl LocalServer { pub fn new(local_db: Arc) -> Self { Self { local_db, stop_tx: Default::default(), } } pub async fn stop(&self) { let sender = self.stop_tx.read().clone(); if let Some(stop_tx) = sender { let _ = stop_tx.send(()).await; } } } impl AppFlowyServer for LocalServer { fn user_service(&self) -> Arc { Arc::new(LocalServerUserAuthServiceImpl { db: self.local_db.clone(), }) } fn folder_service(&self) -> Arc { Arc::new(LocalServerFolderCloudServiceImpl { db: self.local_db.clone(), }) } fn database_service(&self) -> Arc { Arc::new(LocalServerDatabaseCloudServiceImpl()) } fn document_service(&self) -> Arc { Arc::new(LocalServerDocumentCloudServiceImpl()) } fn file_storage(&self) -> Option> { None } }