use anyhow::Error; use client_api::entity::QueryCollabParams; use collab::core::origin::CollabOrigin; use collab_define::CollabType; use flowy_folder_deps::cloud::{Folder, FolderCloudService, FolderData, FolderSnapshot, Workspace}; use lib_infra::future::FutureResult; use crate::af_cloud::AFServer; pub(crate) struct AFCloudFolderCloudServiceImpl(pub T); impl FolderCloudService for AFCloudFolderCloudServiceImpl where T: AFServer, { fn create_workspace(&self, _uid: i64, _name: &str) -> FutureResult { FutureResult::new(async move { todo!() }) } fn get_folder_data(&self, workspace_id: &str) -> FutureResult, Error> { let workspace_id = workspace_id.to_string(); let try_get_client = self.0.try_get_client(); FutureResult::new(async move { let params = QueryCollabParams { object_id: workspace_id.clone(), collab_type: CollabType::Folder, }; let updates = vec![try_get_client?.get_collab(params).await?]; let folder = Folder::from_collab_raw_data(CollabOrigin::Empty, updates, &workspace_id, vec![])?; Ok(folder.get_folder_data()) }) } fn get_folder_snapshots( &self, _workspace_id: &str, _limit: usize, ) -> FutureResult, Error> { FutureResult::new(async move { Ok(vec![]) }) } fn get_folder_updates(&self, workspace_id: &str, _uid: i64) -> FutureResult>, Error> { let workspace_id = workspace_id.to_string(); let try_get_client = self.0.try_get_client(); FutureResult::new(async move { let params = QueryCollabParams { object_id: workspace_id, collab_type: CollabType::Folder, }; let updates = vec![try_get_client?.get_collab(params).await?]; Ok(updates) }) } fn service_name(&self) -> String { "AppFlowy Cloud".to_string() } }