grid_editor_task.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use crate::manager::GridTaskSchedulerRwLock;
  2. use crate::services::grid_editor::GridRevisionEditor;
  3. use crate::services::tasks::{GridTaskHandler, Task, TaskContent, TaskId};
  4. use flowy_error::FlowyError;
  5. use futures::future::BoxFuture;
  6. use lib_infra::future::BoxResultFuture;
  7. pub(crate) trait GridServiceTaskScheduler: Send + Sync + 'static {
  8. fn gen_task_id(&self) -> BoxFuture<TaskId>;
  9. fn add_task(&self, task: Task) -> BoxFuture<()>;
  10. }
  11. impl GridTaskHandler for GridRevisionEditor {
  12. fn handler_id(&self) -> &str {
  13. &self.grid_id
  14. }
  15. fn process_content(&self, content: TaskContent) -> BoxResultFuture<(), FlowyError> {
  16. Box::pin(async move {
  17. match content {
  18. TaskContent::Snapshot => {}
  19. TaskContent::Group => {}
  20. TaskContent::Filter(context) => self.filter_service.process(context).await?,
  21. }
  22. Ok(())
  23. })
  24. }
  25. }
  26. impl GridServiceTaskScheduler for GridTaskSchedulerRwLock {
  27. fn gen_task_id(&self) -> BoxFuture<TaskId> {
  28. let this = self.clone();
  29. Box::pin(async move { this.read().await.next_task_id() })
  30. }
  31. fn add_task(&self, task: Task) -> BoxFuture<()> {
  32. let this = self.clone();
  33. Box::pin(async move {
  34. this.write().await.add_task(task);
  35. })
  36. }
  37. }