event_handler.rs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. use crate::entities::view::{MoveFolderItemParams, MoveFolderItemPayloadPB, MoveFolderItemType};
  2. use crate::entities::ViewInfoPB;
  3. use crate::manager::FolderManager;
  4. use crate::services::{notify_workspace_setting_did_change, AppController};
  5. use crate::{
  6. entities::{
  7. trash::TrashPB,
  8. view::{
  9. CreateViewParams, CreateViewPayloadPB, RepeatedViewIdPB, UpdateViewParams, UpdateViewPayloadPB, ViewIdPB,
  10. ViewPB,
  11. },
  12. },
  13. errors::FlowyError,
  14. services::{TrashController, ViewController},
  15. };
  16. use flowy_folder_data_model::revision::TrashRevision;
  17. use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
  18. use std::{convert::TryInto, sync::Arc};
  19. pub(crate) async fn create_view_handler(
  20. data: Data<CreateViewPayloadPB>,
  21. controller: AppData<Arc<ViewController>>,
  22. ) -> DataResult<ViewPB, FlowyError> {
  23. let params: CreateViewParams = data.into_inner().try_into()?;
  24. let view_rev = controller.create_view_from_params(params).await?;
  25. data_result(view_rev.into())
  26. }
  27. pub(crate) async fn read_view_handler(
  28. data: Data<ViewIdPB>,
  29. controller: AppData<Arc<ViewController>>,
  30. ) -> DataResult<ViewPB, FlowyError> {
  31. let view_id: ViewIdPB = data.into_inner();
  32. let view_rev = controller.read_view(view_id.clone()).await?;
  33. data_result(view_rev.into())
  34. }
  35. pub(crate) async fn read_view_info_handler(
  36. data: Data<ViewIdPB>,
  37. controller: AppData<Arc<ViewController>>,
  38. ) -> DataResult<ViewInfoPB, FlowyError> {
  39. let view_id: ViewIdPB = data.into_inner();
  40. let view_info = controller.read_view_info(view_id.clone()).await?;
  41. data_result(view_info)
  42. }
  43. #[tracing::instrument(level = "debug", skip(data, controller), err)]
  44. pub(crate) async fn update_view_handler(
  45. data: Data<UpdateViewPayloadPB>,
  46. controller: AppData<Arc<ViewController>>,
  47. ) -> Result<(), FlowyError> {
  48. let params: UpdateViewParams = data.into_inner().try_into()?;
  49. let _ = controller.update_view(params).await?;
  50. Ok(())
  51. }
  52. pub(crate) async fn delete_view_handler(
  53. data: Data<RepeatedViewIdPB>,
  54. view_controller: AppData<Arc<ViewController>>,
  55. trash_controller: AppData<Arc<TrashController>>,
  56. ) -> Result<(), FlowyError> {
  57. let params: RepeatedViewIdPB = data.into_inner();
  58. for view_id in &params.items {
  59. let _ = view_controller.delete_view(view_id.into()).await;
  60. }
  61. let trash = view_controller
  62. .read_local_views(params.items)
  63. .await?
  64. .into_iter()
  65. .map(|view| {
  66. let trash_rev: TrashRevision = view.into();
  67. trash_rev.into()
  68. })
  69. .collect::<Vec<TrashPB>>();
  70. let _ = trash_controller.add(trash).await?;
  71. Ok(())
  72. }
  73. pub(crate) async fn set_latest_view_handler(
  74. data: Data<ViewIdPB>,
  75. folder: AppData<Arc<FolderManager>>,
  76. controller: AppData<Arc<ViewController>>,
  77. ) -> Result<(), FlowyError> {
  78. let view_id: ViewIdPB = data.into_inner();
  79. let _ = controller.set_latest_view(&view_id.value)?;
  80. let _ = notify_workspace_setting_did_change(&folder, &view_id).await?;
  81. Ok(())
  82. }
  83. pub(crate) async fn close_view_handler(
  84. data: Data<ViewIdPB>,
  85. controller: AppData<Arc<ViewController>>,
  86. ) -> Result<(), FlowyError> {
  87. let view_id: ViewIdPB = data.into_inner();
  88. let _ = controller.close_view(&view_id.value).await?;
  89. Ok(())
  90. }
  91. #[tracing::instrument(level = "debug", skip_all, err)]
  92. pub(crate) async fn move_item_handler(
  93. data: Data<MoveFolderItemPayloadPB>,
  94. view_controller: AppData<Arc<ViewController>>,
  95. app_controller: AppData<Arc<AppController>>,
  96. ) -> Result<(), FlowyError> {
  97. let params: MoveFolderItemParams = data.into_inner().try_into()?;
  98. match params.ty {
  99. MoveFolderItemType::MoveApp => {
  100. let _ = app_controller.move_app(&params.item_id, params.from, params.to).await?;
  101. }
  102. MoveFolderItemType::MoveView => {
  103. let _ = view_controller
  104. .move_view(&params.item_id, params.from, params.to)
  105. .await?;
  106. }
  107. }
  108. Ok(())
  109. }
  110. #[tracing::instrument(level = "debug", skip(data, controller), err)]
  111. pub(crate) async fn duplicate_view_handler(
  112. data: Data<ViewIdPB>,
  113. controller: AppData<Arc<ViewController>>,
  114. ) -> Result<(), FlowyError> {
  115. let view_id: ViewIdPB = data.into_inner();
  116. let _ = controller.duplicate_view(&view_id.value).await?;
  117. Ok(())
  118. }