|
@@ -20,8 +20,8 @@ use flowy_error::FlowyResult;
|
|
|
use flowy_revision::{RevisionManager, RevisionPersistence, RevisionPersistenceConfiguration};
|
|
|
use flowy_sqlite::ConnectionPool;
|
|
|
use lib_infra::future::Fut;
|
|
|
-use lib_infra::ref_map::RefCountHashMap;
|
|
|
use std::borrow::Cow;
|
|
|
+use std::collections::HashMap;
|
|
|
use std::sync::Arc;
|
|
|
use tokio::sync::{broadcast, RwLock};
|
|
|
|
|
@@ -29,7 +29,7 @@ use tokio::sync::{broadcast, RwLock};
|
|
|
pub struct DatabaseViews {
|
|
|
user: Arc<dyn DatabaseUser>,
|
|
|
delegate: Arc<dyn DatabaseViewData>,
|
|
|
- view_editors: Arc<RwLock<RefCountHashMap<Arc<DatabaseViewEditor>>>>,
|
|
|
+ view_editors: Arc<RwLock<HashMap<String, Arc<DatabaseViewEditor>>>>,
|
|
|
cell_data_cache: AtomicCellDataCache,
|
|
|
}
|
|
|
|
|
@@ -40,7 +40,7 @@ impl DatabaseViews {
|
|
|
cell_data_cache: AtomicCellDataCache,
|
|
|
block_event_rx: broadcast::Receiver<DatabaseBlockEvent>,
|
|
|
) -> FlowyResult<Self> {
|
|
|
- let view_editors = Arc::new(RwLock::new(RefCountHashMap::default()));
|
|
|
+ let view_editors = Arc::new(RwLock::new(HashMap::default()));
|
|
|
listen_on_database_block_event(block_event_rx, view_editors.clone());
|
|
|
Ok(Self {
|
|
|
user,
|
|
@@ -61,7 +61,9 @@ impl DatabaseViews {
|
|
|
|
|
|
pub async fn close(&self, view_id: &str) {
|
|
|
if let Ok(mut view_editors) = self.view_editors.try_write() {
|
|
|
- view_editors.remove(view_id).await;
|
|
|
+ if let Some(view_editor) = view_editors.remove(view_id) {
|
|
|
+ view_editor.close().await;
|
|
|
+ }
|
|
|
} else {
|
|
|
tracing::error!("Try to get the lock of view_editors failed");
|
|
|
}
|
|
@@ -273,7 +275,7 @@ impl DatabaseViews {
|
|
|
pub async fn get_view_editor(&self, view_id: &str) -> FlowyResult<Arc<DatabaseViewEditor>> {
|
|
|
debug_assert!(!view_id.is_empty());
|
|
|
if let Some(editor) = self.view_editors.read().await.get(view_id) {
|
|
|
- return Ok(editor);
|
|
|
+ return Ok(editor.clone());
|
|
|
}
|
|
|
|
|
|
tracing::trace!("{:p} create view:{} editor", self, view_id);
|
|
@@ -346,7 +348,7 @@ pub async fn make_database_view_rev_manager(
|
|
|
|
|
|
fn listen_on_database_block_event(
|
|
|
mut block_event_rx: broadcast::Receiver<DatabaseBlockEvent>,
|
|
|
- view_editors: Arc<RwLock<RefCountHashMap<Arc<DatabaseViewEditor>>>>,
|
|
|
+ view_editors: Arc<RwLock<HashMap<String, Arc<DatabaseViewEditor>>>>,
|
|
|
) {
|
|
|
tokio::spawn(async move {
|
|
|
loop {
|
|
@@ -358,7 +360,7 @@ fn listen_on_database_block_event(
|
|
|
} else {
|
|
|
Cow::Borrowed(&event)
|
|
|
};
|
|
|
- for view_editor in view_editors.iter() {
|
|
|
+ for view_editor in view_editors {
|
|
|
view_editor.handle_block_event(event.clone()).await;
|
|
|
}
|
|
|
}
|