doc_handler.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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::{
  8. convert::TryInto,
  9. path::Path,
  10. sync::{Arc, RwLock},
  11. };
  12. pub async fn create_doc(
  13. data: Data<CreateDocRequest>,
  14. controller: Unit<DocController>,
  15. manager: Unit<RwLock<FileManager>>,
  16. ) -> ResponseResult<DocDescription, EditorError> {
  17. let params: CreateDocParams = data.into_inner().try_into()?;
  18. let path = manager.read().unwrap().make_file_path(&params.id);
  19. let doc_desc = controller
  20. .create_doc(params, path.to_str().unwrap())
  21. .await?;
  22. response_ok(doc_desc)
  23. }
  24. pub async fn read_doc(
  25. data: Data<QueryDocRequest>,
  26. controller: Unit<DocController>,
  27. manager: Unit<RwLock<FileManager>>,
  28. ) -> ResponseResult<Doc, EditorError> {
  29. let params: QueryDocParams = data.into_inner().try_into()?;
  30. let desc = controller.read_doc(&params.doc_id).await?;
  31. let content = manager
  32. .write()
  33. .unwrap()
  34. .open(Path::new(&desc.path), desc.id.clone())?;
  35. let doc = Doc { desc, content };
  36. response_ok(doc)
  37. }
  38. pub async fn update_doc(
  39. data: Data<UpdateDocRequest>,
  40. controller: Unit<DocController>,
  41. manager: Unit<RwLock<FileManager>>,
  42. ) -> Result<(), EditorError> {
  43. let mut params: UpdateDocParams = data.into_inner().try_into()?;
  44. match params.content.take() {
  45. None => {},
  46. Some(s) => {
  47. let doc_desc = controller.read_doc(&params.id).await?;
  48. manager
  49. .write()
  50. .unwrap()
  51. .save(Path::new(&doc_desc.path), &s, params.id.clone());
  52. },
  53. }
  54. if params.name.is_some() || params.desc.is_some() {
  55. let _ = controller.update_doc(params).await?;
  56. }
  57. Ok(())
  58. }