module.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. use crate::{
  2. entities::doc::{CreateDocParams, DocDelta, DocIdentifier},
  3. errors::DocError,
  4. services::{
  5. doc::{doc_controller::DocController, edit::ClientEditDoc},
  6. server::construct_doc_server,
  7. ws::WsDocumentManager,
  8. },
  9. };
  10. use flowy_database::ConnectionPool;
  11. use flowy_net::config::ServerConfig;
  12. use std::sync::Arc;
  13. pub trait DocumentUser: Send + Sync {
  14. fn user_dir(&self) -> Result<String, DocError>;
  15. fn user_id(&self) -> Result<String, DocError>;
  16. fn token(&self) -> Result<String, DocError>;
  17. }
  18. pub struct FlowyDocument {
  19. doc_ctrl: Arc<DocController>,
  20. }
  21. impl FlowyDocument {
  22. pub fn new(
  23. user: Arc<dyn DocumentUser>,
  24. ws_manager: Arc<WsDocumentManager>,
  25. server_config: &ServerConfig,
  26. ) -> FlowyDocument {
  27. let server = construct_doc_server(server_config);
  28. let controller = Arc::new(DocController::new(server.clone(), user.clone(), ws_manager.clone()));
  29. Self { doc_ctrl: controller }
  30. }
  31. pub fn init(&self) -> Result<(), DocError> {
  32. let _ = self.doc_ctrl.init()?;
  33. Ok(())
  34. }
  35. pub fn create(&self, params: CreateDocParams) -> Result<(), DocError> {
  36. let _ = self.doc_ctrl.create(params)?;
  37. Ok(())
  38. }
  39. pub fn delete(&self, params: DocIdentifier) -> Result<(), DocError> {
  40. let _ = self.doc_ctrl.delete(params)?;
  41. Ok(())
  42. }
  43. pub async fn open(&self, params: DocIdentifier, pool: Arc<ConnectionPool>) -> Result<Arc<ClientEditDoc>, DocError> {
  44. let edit_context = self.doc_ctrl.open(params, pool).await?;
  45. Ok(edit_context)
  46. }
  47. pub async fn apply_doc_delta(&self, params: DocDelta) -> Result<DocDelta, DocError> {
  48. // workaround: compare the rust's delta with flutter's delta. Will be removed
  49. // very soon
  50. let doc = self.doc_ctrl.edit_doc(params.clone()).await?;
  51. Ok(doc)
  52. }
  53. }