module.rs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. use crate::{
  2. errors::EditorError,
  3. event::EditorEvent,
  4. handlers::*,
  5. services::{
  6. doc_controller::DocController,
  7. file_manager::{create_dir_if_not_exist, FileManager},
  8. },
  9. };
  10. use flowy_database::DBConnection;
  11. use flowy_dispatch::prelude::*;
  12. use std::sync::Arc;
  13. use tokio::sync::RwLock;
  14. pub trait EditorDatabase: Send + Sync {
  15. fn db_connection(&self) -> Result<DBConnection, EditorError>;
  16. }
  17. pub trait EditorUser: Send + Sync {
  18. fn user_doc_dir(&self) -> Result<String, EditorError>;
  19. }
  20. pub fn create(database: Arc<dyn EditorDatabase>, user: Arc<dyn EditorUser>) -> Module {
  21. let file_manager = RwLock::new(FileManager::new(user.clone()));
  22. let doc_controller = DocController::new(database);
  23. Module::new()
  24. .name("Flowy-Editor")
  25. .data(file_manager)
  26. .data(doc_controller)
  27. .event(EditorEvent::CreateDoc, create_doc)
  28. .event(EditorEvent::UpdateDoc, update_doc)
  29. .event(EditorEvent::ReadDocInfo, read_doc)
  30. .event(EditorEvent::ReadDocData, read_doc_data)
  31. }