event_map.rs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. use crate::{
  2. entities::{
  3. app::{AppIdPB, CreateAppParams, UpdateAppParams},
  4. trash::RepeatedTrashIdPB,
  5. view::{CreateViewParams, RepeatedViewIdPB, UpdateViewParams, ViewIdPB},
  6. workspace::{CreateWorkspaceParams, UpdateWorkspaceParams, WorkspaceIdPB},
  7. },
  8. errors::FlowyError,
  9. manager::FolderManager,
  10. services::{
  11. app::event_handler::*, trash::event_handler::*, view::event_handler::*,
  12. workspace::event_handler::*,
  13. },
  14. };
  15. use flowy_derive::{Flowy_Event, ProtoBuf_Enum};
  16. use flowy_sqlite::{ConnectionPool, DBConnection};
  17. use folder_model::{AppRevision, TrashRevision, ViewRevision, WorkspaceRevision};
  18. use lib_dispatch::prelude::*;
  19. use lib_infra::future::FutureResult;
  20. use std::sync::Arc;
  21. use strum_macros::Display;
  22. pub trait WorkspaceDeps: WorkspaceUser + WorkspaceDatabase {}
  23. pub trait WorkspaceUser: Send + Sync {
  24. fn user_id(&self) -> Result<String, FlowyError>;
  25. fn token(&self) -> Result<String, FlowyError>;
  26. }
  27. pub trait WorkspaceDatabase: Send + Sync {
  28. fn db_pool(&self) -> Result<Arc<ConnectionPool>, FlowyError>;
  29. fn db_connection(&self) -> Result<DBConnection, FlowyError> {
  30. let pool = self.db_pool()?;
  31. let conn = pool.get().map_err(|e| FlowyError::internal().context(e))?;
  32. Ok(conn)
  33. }
  34. }
  35. pub fn init(folder: Arc<FolderManager>) -> AFPlugin {
  36. let mut plugin = AFPlugin::new()
  37. .name("Flowy-Workspace")
  38. .state(folder.workspace_controller.clone())
  39. .state(folder.app_controller.clone())
  40. .state(folder.view_controller.clone())
  41. .state(folder.trash_controller.clone())
  42. .state(folder.clone());
  43. // Workspace
  44. plugin = plugin
  45. .event(FolderEvent::CreateWorkspace, create_workspace_handler)
  46. .event(
  47. FolderEvent::ReadCurrentWorkspace,
  48. read_cur_workspace_handler,
  49. )
  50. .event(FolderEvent::ReadWorkspaces, read_workspaces_handler)
  51. .event(FolderEvent::OpenWorkspace, open_workspace_handler)
  52. .event(FolderEvent::ReadWorkspaceApps, read_workspace_apps_handler);
  53. // App
  54. plugin = plugin
  55. .event(FolderEvent::CreateApp, create_app_handler)
  56. .event(FolderEvent::ReadApp, read_app_handler)
  57. .event(FolderEvent::UpdateApp, update_app_handler)
  58. .event(FolderEvent::DeleteApp, delete_app_handler);
  59. // View
  60. plugin = plugin
  61. .event(FolderEvent::CreateView, create_view_handler)
  62. .event(FolderEvent::ReadView, read_view_handler)
  63. .event(FolderEvent::UpdateView, update_view_handler)
  64. .event(FolderEvent::DeleteView, delete_view_handler)
  65. .event(FolderEvent::DuplicateView, duplicate_view_handler)
  66. .event(FolderEvent::SetLatestView, set_latest_view_handler)
  67. .event(FolderEvent::CloseView, close_view_handler)
  68. .event(FolderEvent::MoveItem, move_item_handler);
  69. // Trash
  70. plugin = plugin
  71. .event(FolderEvent::ReadTrash, read_trash_handler)
  72. .event(FolderEvent::PutbackTrash, putback_trash_handler)
  73. .event(FolderEvent::DeleteTrash, delete_trash_handler)
  74. .event(FolderEvent::RestoreAllTrash, restore_all_trash_handler)
  75. .event(FolderEvent::DeleteAllTrash, delete_all_trash_handler);
  76. plugin
  77. }
  78. #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
  79. #[event_err = "FlowyError"]
  80. pub enum FolderEvent {
  81. /// Create a new workspace
  82. #[event(input = "CreateWorkspacePayloadPB", output = "WorkspacePB")]
  83. CreateWorkspace = 0,
  84. /// Read the current opening workspace
  85. #[event(output = "WorkspaceSettingPB")]
  86. ReadCurrentWorkspace = 1,
  87. /// Open the workspace and mark it as the current workspace
  88. #[event(input = "WorkspaceIdPB", output = "RepeatedWorkspacePB")]
  89. ReadWorkspaces = 2,
  90. /// Delete the workspace
  91. #[event(input = "WorkspaceIdPB")]
  92. DeleteWorkspace = 3,
  93. /// Open the workspace and mark it as the current workspace
  94. #[event(input = "WorkspaceIdPB", output = "WorkspacePB")]
  95. OpenWorkspace = 4,
  96. /// Return a list of apps that belong to this workspace
  97. #[event(input = "WorkspaceIdPB", output = "RepeatedAppPB")]
  98. ReadWorkspaceApps = 5,
  99. /// Create a new app
  100. #[event(input = "CreateAppPayloadPB", output = "AppPB")]
  101. CreateApp = 101,
  102. /// Delete the app
  103. #[event(input = "AppIdPB")]
  104. DeleteApp = 102,
  105. /// Read the app
  106. #[event(input = "AppIdPB", output = "AppPB")]
  107. ReadApp = 103,
  108. /// Update the app's properties including the name,description, etc.
  109. #[event(input = "UpdateAppPayloadPB")]
  110. UpdateApp = 104,
  111. /// Create a new view in the corresponding app
  112. #[event(input = "CreateViewPayloadPB", output = "ViewPB")]
  113. CreateView = 201,
  114. /// Return the view info
  115. #[event(input = "ViewIdPB", output = "ViewPB")]
  116. ReadView = 202,
  117. /// Update the view's properties including the name,description, etc.
  118. #[event(input = "UpdateViewPayloadPB", output = "ViewPB")]
  119. UpdateView = 203,
  120. /// Move the view to the trash folder
  121. #[event(input = "RepeatedViewIdPB")]
  122. DeleteView = 204,
  123. /// Duplicate the view
  124. #[event(input = "ViewPB")]
  125. DuplicateView = 205,
  126. /// Close and release the resources that are used by this view.
  127. /// It should get called when the 'View' page get destroy
  128. #[event(input = "ViewIdPB")]
  129. CloseView = 206,
  130. #[event()]
  131. CopyLink = 220,
  132. /// Set the current visiting view
  133. #[event(input = "ViewIdPB")]
  134. SetLatestView = 221,
  135. /// Move the view or app to another place
  136. #[event(input = "MoveFolderItemPayloadPB")]
  137. MoveItem = 230,
  138. /// Read the trash that was deleted by the user
  139. #[event(output = "RepeatedTrashPB")]
  140. ReadTrash = 300,
  141. /// Put back the trash to the origin folder
  142. #[event(input = "TrashIdPB")]
  143. PutbackTrash = 301,
  144. /// Delete the trash from the disk
  145. #[event(input = "RepeatedTrashIdPB")]
  146. DeleteTrash = 302,
  147. /// Put back all the trash to its original folder
  148. #[event()]
  149. RestoreAllTrash = 303,
  150. /// Delete all the trash from the disk
  151. #[event()]
  152. DeleteAllTrash = 304,
  153. }
  154. pub trait FolderCouldServiceV1: Send + Sync {
  155. fn init(&self);
  156. // Workspace
  157. fn create_workspace(
  158. &self,
  159. token: &str,
  160. params: CreateWorkspaceParams,
  161. ) -> FutureResult<WorkspaceRevision, FlowyError>;
  162. fn read_workspace(
  163. &self,
  164. token: &str,
  165. params: WorkspaceIdPB,
  166. ) -> FutureResult<Vec<WorkspaceRevision>, FlowyError>;
  167. fn update_workspace(
  168. &self,
  169. token: &str,
  170. params: UpdateWorkspaceParams,
  171. ) -> FutureResult<(), FlowyError>;
  172. fn delete_workspace(&self, token: &str, params: WorkspaceIdPB) -> FutureResult<(), FlowyError>;
  173. // View
  174. fn create_view(
  175. &self,
  176. token: &str,
  177. params: CreateViewParams,
  178. ) -> FutureResult<ViewRevision, FlowyError>;
  179. fn read_view(
  180. &self,
  181. token: &str,
  182. params: ViewIdPB,
  183. ) -> FutureResult<Option<ViewRevision>, FlowyError>;
  184. fn delete_view(&self, token: &str, params: RepeatedViewIdPB) -> FutureResult<(), FlowyError>;
  185. fn update_view(&self, token: &str, params: UpdateViewParams) -> FutureResult<(), FlowyError>;
  186. // App
  187. fn create_app(
  188. &self,
  189. token: &str,
  190. params: CreateAppParams,
  191. ) -> FutureResult<AppRevision, FlowyError>;
  192. fn read_app(&self, token: &str, params: AppIdPB)
  193. -> FutureResult<Option<AppRevision>, FlowyError>;
  194. fn update_app(&self, token: &str, params: UpdateAppParams) -> FutureResult<(), FlowyError>;
  195. fn delete_app(&self, token: &str, params: AppIdPB) -> FutureResult<(), FlowyError>;
  196. // Trash
  197. fn create_trash(&self, token: &str, params: RepeatedTrashIdPB) -> FutureResult<(), FlowyError>;
  198. fn delete_trash(&self, token: &str, params: RepeatedTrashIdPB) -> FutureResult<(), FlowyError>;
  199. fn read_trash(&self, token: &str) -> FutureResult<Vec<TrashRevision>, FlowyError>;
  200. }