doc_handler.rs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. use crate::{
  2. entities::doc::*,
  3. errors::EditorError,
  4. services::{doc_controller::DocController, file_manager::FileManager},
  5. };
  6. use flowy_dispatch::prelude::*;
  7. use std::{convert::TryInto, path::Path};
  8. use tokio::sync::RwLock;
  9. #[tracing::instrument(name = "create_doc", skip(data, controller, manager))]
  10. pub async fn create_doc(
  11. data: Data<CreateDocRequest>,
  12. controller: Unit<DocController>,
  13. manager: Unit<RwLock<FileManager>>,
  14. ) -> ResponseResult<DocInfo, EditorError> {
  15. let params: CreateDocParams = data.into_inner().try_into()?;
  16. let dir = manager.read().await.user.user_doc_dir()?;
  17. let path = manager
  18. .write()
  19. .await
  20. .create_file(&params.id, &dir, &params.text)?;
  21. let doc_desc = controller
  22. .create_doc(params, path.to_str().unwrap())
  23. .await?;
  24. response_ok(doc_desc)
  25. }
  26. #[tracing::instrument(name = "read_doc", skip(data, controller, manager))]
  27. pub async fn read_doc(
  28. data: Data<QueryDocRequest>,
  29. controller: Unit<DocController>,
  30. manager: Unit<RwLock<FileManager>>,
  31. ) -> ResponseResult<DocInfo, EditorError> {
  32. let params: QueryDocParams = data.into_inner().try_into()?;
  33. let doc_info = controller.read_doc(&params.doc_id).await?;
  34. let _ = manager
  35. .write()
  36. .await
  37. .open(Path::new(&doc_info.path), doc_info.id.clone())?;
  38. response_ok(doc_info)
  39. }
  40. #[tracing::instrument(name = "read_doc_data", skip(data, manager))]
  41. pub async fn read_doc_data(
  42. data: Data<QueryDocDataRequest>,
  43. manager: Unit<RwLock<FileManager>>,
  44. ) -> ResponseResult<DocData, EditorError> {
  45. let params: QueryDocDataParams = data.into_inner().try_into()?;
  46. let text = manager
  47. .write()
  48. .await
  49. .open(Path::new(&params.path), params.doc_id)?;
  50. response_ok(DocData { text })
  51. }
  52. pub async fn update_doc(
  53. data: Data<UpdateDocRequest>,
  54. controller: Unit<DocController>,
  55. manager: Unit<RwLock<FileManager>>,
  56. ) -> Result<(), EditorError> {
  57. let mut params: UpdateDocParams = data.into_inner().try_into()?;
  58. if let Some(s) = params.text.take() {
  59. let doc_desc = controller.read_doc(&params.id).await?;
  60. manager
  61. .write()
  62. .await
  63. .save(Path::new(&doc_desc.path), &s, params.id.clone())
  64. .unwrap();
  65. }
  66. if params.name.is_some() || params.desc.is_some() {
  67. let _ = controller.update_doc(params).await?;
  68. }
  69. Ok(())
  70. }