view_handler.rs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. use crate::{
  2. entities::{
  3. trash::Trash,
  4. view::{
  5. CreateViewParams,
  6. CreateViewRequest,
  7. QueryViewRequest,
  8. UpdateViewParams,
  9. UpdateViewRequest,
  10. View,
  11. ViewIdentifier,
  12. ViewIdentifiers,
  13. },
  14. },
  15. errors::WorkspaceError,
  16. services::{TrashCan, ViewController},
  17. };
  18. use flowy_dispatch::prelude::{data_result, Data, DataResult, Unit};
  19. use flowy_document::entities::doc::DocDelta;
  20. use std::{convert::TryInto, sync::Arc};
  21. pub(crate) async fn create_view_handler(
  22. data: Data<CreateViewRequest>,
  23. controller: Unit<Arc<ViewController>>,
  24. ) -> DataResult<View, WorkspaceError> {
  25. let params: CreateViewParams = data.into_inner().try_into()?;
  26. let view = controller.create_view(params).await?;
  27. data_result(view)
  28. }
  29. pub(crate) async fn read_view_handler(
  30. data: Data<QueryViewRequest>,
  31. controller: Unit<Arc<ViewController>>,
  32. ) -> DataResult<View, WorkspaceError> {
  33. let params: ViewIdentifier = data.into_inner().try_into()?;
  34. let mut view = controller.read_view(params.clone()).await?;
  35. view.belongings = controller.read_views_belong_to(&params.view_id).await?;
  36. data_result(view)
  37. }
  38. #[tracing::instrument(skip(data, controller), err)]
  39. pub(crate) async fn update_view_handler(
  40. data: Data<UpdateViewRequest>,
  41. controller: Unit<Arc<ViewController>>,
  42. ) -> Result<(), WorkspaceError> {
  43. let params: UpdateViewParams = data.into_inner().try_into()?;
  44. let _ = controller.update_view(params).await?;
  45. Ok(())
  46. }
  47. pub(crate) async fn apply_doc_delta_handler(
  48. data: Data<DocDelta>,
  49. controller: Unit<Arc<ViewController>>,
  50. ) -> DataResult<DocDelta, WorkspaceError> {
  51. // let params: DocDelta = data.into_inner().try_into()?;
  52. let doc = controller.apply_doc_delta(data.into_inner()).await?;
  53. data_result(doc)
  54. }
  55. pub(crate) async fn delete_view_handler(
  56. data: Data<QueryViewRequest>,
  57. controller: Unit<Arc<ViewController>>,
  58. trash_can: Unit<Arc<TrashCan>>,
  59. ) -> Result<(), WorkspaceError> {
  60. let params: ViewIdentifiers = data.into_inner().try_into()?;
  61. for view_id in &params.view_ids {
  62. let _ = controller.close_view(view_id.into()).await;
  63. }
  64. let trash = controller
  65. .read_view_tables(params.view_ids)?
  66. .into_iter()
  67. .map(|view_table| view_table.into())
  68. .collect::<Vec<Trash>>();
  69. let _ = trash_can.add(trash).await?;
  70. Ok(())
  71. }
  72. pub(crate) async fn open_view_handler(
  73. data: Data<QueryViewRequest>,
  74. controller: Unit<Arc<ViewController>>,
  75. ) -> DataResult<DocDelta, WorkspaceError> {
  76. let params: ViewIdentifier = data.into_inner().try_into()?;
  77. let doc = controller.open_view(params.into()).await?;
  78. data_result(doc)
  79. }
  80. pub(crate) async fn close_view_handler(
  81. data: Data<QueryViewRequest>,
  82. controller: Unit<Arc<ViewController>>,
  83. ) -> Result<(), WorkspaceError> {
  84. let params: ViewIdentifier = data.into_inner().try_into()?;
  85. let _ = controller.close_view(params.into()).await?;
  86. Ok(())
  87. }
  88. #[tracing::instrument(skip(data, controller), err)]
  89. pub(crate) async fn duplicate_view_handler(
  90. data: Data<QueryViewRequest>,
  91. controller: Unit<Arc<ViewController>>,
  92. ) -> Result<(), WorkspaceError> {
  93. let params: ViewIdentifier = data.into_inner().try_into()?;
  94. let _ = controller.duplicate_view(params.into()).await?;
  95. Ok(())
  96. }