2021-07-23 08:14:45 +08:00
|
|
|
use crate::{
|
2021-07-31 10:50:56 +08:00
|
|
|
errors::DocError,
|
2021-07-23 08:14:45 +08:00
|
|
|
event::EditorEvent,
|
2021-09-09 15:43:05 +08:00
|
|
|
services::{doc_controller::DocController, file_manager::FileManager, server::construct_doc_server},
|
2021-07-23 08:14:45 +08:00
|
|
|
};
|
|
|
|
use flowy_database::DBConnection;
|
2021-07-22 22:26:38 +08:00
|
|
|
use flowy_dispatch::prelude::*;
|
2021-07-23 15:00:13 +08:00
|
|
|
use std::sync::Arc;
|
|
|
|
use tokio::sync::RwLock;
|
2021-07-22 22:26:38 +08:00
|
|
|
|
2021-07-31 10:50:56 +08:00
|
|
|
pub trait DocumentUser: Send + Sync {
|
|
|
|
fn user_doc_dir(&self) -> Result<String, DocError>;
|
2021-09-09 15:43:05 +08:00
|
|
|
fn user_id(&self) -> Result<String, DocError>;
|
|
|
|
fn token(&self) -> Result<String, DocError>;
|
2021-07-23 14:37:18 +08:00
|
|
|
}
|
|
|
|
|
2021-09-11 14:26:30 +08:00
|
|
|
pub enum DocumentType {
|
|
|
|
Doc,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct Document {
|
|
|
|
user: Arc<dyn DocumentUser>,
|
|
|
|
file_manager: RwLock<FileManager>,
|
|
|
|
pub doc: Arc<DocController>,
|
|
|
|
}
|
2021-07-22 22:26:38 +08:00
|
|
|
|
2021-09-11 14:26:30 +08:00
|
|
|
impl Document {
|
|
|
|
pub fn new(user: Arc<dyn DocumentUser>) -> Document {
|
|
|
|
let server = construct_doc_server();
|
|
|
|
let doc_controller = Arc::new(DocController::new(server.clone(), user.clone()));
|
|
|
|
let file_manager = RwLock::new(FileManager::new(user.clone()));
|
|
|
|
Self {
|
|
|
|
user,
|
|
|
|
file_manager,
|
|
|
|
doc: doc_controller,
|
|
|
|
}
|
|
|
|
}
|
2021-07-22 22:26:38 +08:00
|
|
|
}
|