event_handler.rs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. use crate::services::AppController;
  2. use crate::{
  3. entities::{
  4. trash::Trash,
  5. view::{
  6. CreateViewParams, CreateViewPayload, RepeatedViewId, UpdateViewParams, UpdateViewPayload, View, ViewId,
  7. },
  8. },
  9. errors::FlowyError,
  10. services::{TrashController, ViewController},
  11. };
  12. use flowy_folder_data_model::entities::view::{MoveFolderItemParams, MoveFolderItemPayload, MoveFolderItemType};
  13. use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
  14. use std::{convert::TryInto, sync::Arc};
  15. pub(crate) async fn create_view_handler(
  16. data: Data<CreateViewPayload>,
  17. controller: AppData<Arc<ViewController>>,
  18. ) -> DataResult<View, FlowyError> {
  19. let params: CreateViewParams = data.into_inner().try_into()?;
  20. let view = controller.create_view_from_params(params).await?;
  21. data_result(view)
  22. }
  23. pub(crate) async fn read_view_handler(
  24. data: Data<ViewId>,
  25. controller: AppData<Arc<ViewController>>,
  26. ) -> DataResult<View, FlowyError> {
  27. let view_id: ViewId = data.into_inner();
  28. let mut view = controller.read_view(view_id.clone()).await?;
  29. // For the moment, app and view can contains lots of views. Reading the view
  30. // belongings using the view_id.
  31. view.belongings = controller.read_views_belong_to(&view_id.value).await?;
  32. data_result(view)
  33. }
  34. #[tracing::instrument(level = "debug", skip(data, controller), err)]
  35. pub(crate) async fn update_view_handler(
  36. data: Data<UpdateViewPayload>,
  37. controller: AppData<Arc<ViewController>>,
  38. ) -> Result<(), FlowyError> {
  39. let params: UpdateViewParams = data.into_inner().try_into()?;
  40. let _ = controller.update_view(params).await?;
  41. Ok(())
  42. }
  43. pub(crate) async fn delete_view_handler(
  44. data: Data<RepeatedViewId>,
  45. view_controller: AppData<Arc<ViewController>>,
  46. trash_controller: AppData<Arc<TrashController>>,
  47. ) -> Result<(), FlowyError> {
  48. let params: RepeatedViewId = data.into_inner();
  49. for view_id in &params.items {
  50. let _ = view_controller.delete_view(view_id.into()).await;
  51. }
  52. let trash = view_controller
  53. .read_local_views(params.items)
  54. .await?
  55. .into_iter()
  56. .map(|view| view.into())
  57. .collect::<Vec<Trash>>();
  58. let _ = trash_controller.add(trash).await?;
  59. Ok(())
  60. }
  61. pub(crate) async fn set_latest_view_handler(
  62. data: Data<ViewId>,
  63. controller: AppData<Arc<ViewController>>,
  64. ) -> Result<(), FlowyError> {
  65. let view_id: ViewId = data.into_inner();
  66. let _ = controller.set_latest_view(&view_id.value)?;
  67. Ok(())
  68. }
  69. pub(crate) async fn close_view_handler(
  70. data: Data<ViewId>,
  71. controller: AppData<Arc<ViewController>>,
  72. ) -> Result<(), FlowyError> {
  73. let view_id: ViewId = data.into_inner();
  74. let _ = controller.close_view(&view_id.value).await?;
  75. Ok(())
  76. }
  77. #[tracing::instrument(level = "debug", skip_all, err)]
  78. pub(crate) async fn move_item_handler(
  79. data: Data<MoveFolderItemPayload>,
  80. view_controller: AppData<Arc<ViewController>>,
  81. app_controller: AppData<Arc<AppController>>,
  82. ) -> Result<(), FlowyError> {
  83. let params: MoveFolderItemParams = data.into_inner().try_into()?;
  84. match params.ty {
  85. MoveFolderItemType::MoveApp => {
  86. let _ = app_controller.move_app(&params.item_id, params.from, params.to).await?;
  87. }
  88. MoveFolderItemType::MoveView => {
  89. let _ = view_controller
  90. .move_view(&params.item_id, params.from, params.to)
  91. .await?;
  92. }
  93. }
  94. Ok(())
  95. }
  96. #[tracing::instrument(level = "debug", skip(data, controller), err)]
  97. pub(crate) async fn duplicate_view_handler(
  98. data: Data<ViewId>,
  99. controller: AppData<Arc<ViewController>>,
  100. ) -> Result<(), FlowyError> {
  101. let view_id: ViewId = data.into_inner();
  102. let _ = controller.duplicate_view(&view_id.value).await?;
  103. Ok(())
  104. }