task.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use crate::services::sort::SortController;
  2. use flowy_task::{TaskContent, TaskHandler};
  3. use lib_infra::future::BoxResultFuture;
  4. use std::sync::Arc;
  5. use tokio::sync::RwLock;
  6. pub struct SortTaskHandler {
  7. handler_id: String,
  8. #[allow(dead_code)]
  9. sort_controller: Arc<RwLock<SortController>>,
  10. }
  11. impl SortTaskHandler {
  12. pub fn new(handler_id: String, sort_controller: Arc<RwLock<SortController>>) -> Self {
  13. Self {
  14. handler_id,
  15. sort_controller,
  16. }
  17. }
  18. }
  19. impl TaskHandler for SortTaskHandler {
  20. fn handler_id(&self) -> &str {
  21. &self.handler_id
  22. }
  23. fn handler_name(&self) -> &str {
  24. "SortTaskHandler"
  25. }
  26. fn run(&self, content: TaskContent) -> BoxResultFuture<(), anyhow::Error> {
  27. let sort_controller = self.sort_controller.clone();
  28. Box::pin(async move {
  29. if let TaskContent::Text(predicate) = content {
  30. let _ = sort_controller
  31. .write()
  32. .await
  33. .process(&predicate)
  34. .await
  35. .map_err(anyhow::Error::from)?;
  36. }
  37. Ok(())
  38. })
  39. }
  40. }