mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: collab workspace issues (#4961)
This commit is contained in:
@ -285,8 +285,7 @@ impl TryInto<CreateViewParams> for CreateOrphanViewPayloadPB {
|
||||
meta: Default::default(),
|
||||
set_as_current: false,
|
||||
index: None,
|
||||
// TODO: lucas.xu add section to CreateOrphanViewPayloadPB
|
||||
section: Some(ViewSectionPB::Public),
|
||||
section: None,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ pub(crate) async fn get_workspace_views_handler(
|
||||
) -> DataResult<RepeatedViewPB, FlowyError> {
|
||||
let folder = upgrade_folder(folder)?;
|
||||
let params: GetWorkspaceViewParams = data.into_inner().try_into()?;
|
||||
let child_views = folder.get_workspace_views(¶ms.value).await?;
|
||||
let child_views = folder.get_workspace_public_views(¶ms.value).await?;
|
||||
let repeated_view: RepeatedViewPB = child_views.into();
|
||||
data_result_ok(repeated_view)
|
||||
}
|
||||
@ -63,7 +63,7 @@ pub(crate) async fn get_current_workspace_views_handler(
|
||||
folder: AFPluginState<Weak<FolderManager>>,
|
||||
) -> DataResult<RepeatedViewPB, FlowyError> {
|
||||
let folder = upgrade_folder(folder)?;
|
||||
let child_views = folder.get_current_workspace_views().await?;
|
||||
let child_views = folder.get_current_workspace_public_views().await?;
|
||||
let repeated_view: RepeatedViewPB = child_views.into();
|
||||
data_result_ok(repeated_view)
|
||||
}
|
||||
@ -286,7 +286,7 @@ pub(crate) async fn read_trash_handler(
|
||||
folder: AFPluginState<Weak<FolderManager>>,
|
||||
) -> DataResult<RepeatedTrashPB, FlowyError> {
|
||||
let folder = upgrade_folder(folder)?;
|
||||
let trash = folder.get_all_trash().await;
|
||||
let trash = folder.get_my_trash_info().await;
|
||||
data_result_ok(trash.into())
|
||||
}
|
||||
|
||||
@ -323,11 +323,11 @@ pub(crate) async fn restore_all_trash_handler(
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(folder), err)]
|
||||
pub(crate) async fn delete_all_trash_handler(
|
||||
pub(crate) async fn delete_my_trash_handler(
|
||||
folder: AFPluginState<Weak<FolderManager>>,
|
||||
) -> Result<(), FlowyError> {
|
||||
let folder = upgrade_folder(folder)?;
|
||||
folder.delete_all_trash().await;
|
||||
folder.delete_my_trash().await;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ pub fn init(folder: Weak<FolderManager>) -> AFPlugin {
|
||||
.event(FolderEvent::RestoreTrashItem, putback_trash_handler)
|
||||
.event(FolderEvent::PermanentlyDeleteTrashItem, delete_trash_handler)
|
||||
.event(FolderEvent::RecoverAllTrashItems, restore_all_trash_handler)
|
||||
.event(FolderEvent::PermanentlyDeleteAllTrashItem, delete_all_trash_handler)
|
||||
.event(FolderEvent::PermanentlyDeleteAllTrashItem, delete_my_trash_handler)
|
||||
.event(FolderEvent::ImportData, import_data_handler)
|
||||
.event(FolderEvent::GetFolderSnapshots, get_folder_snapshots_handler)
|
||||
.event(FolderEvent::UpdateViewIcon, update_view_icon_handler)
|
||||
|
@ -128,7 +128,7 @@ impl FolderManager {
|
||||
|
||||
/// Return a list of views of the current workspace.
|
||||
/// Only the first level of child views are included.
|
||||
pub async fn get_current_workspace_views(&self) -> FlowyResult<Vec<ViewPB>> {
|
||||
pub async fn get_current_workspace_public_views(&self) -> FlowyResult<Vec<ViewPB>> {
|
||||
let workspace_id = self
|
||||
.mutex_folder
|
||||
.lock()
|
||||
@ -136,14 +136,14 @@ impl FolderManager {
|
||||
.map(|folder| folder.get_workspace_id());
|
||||
|
||||
if let Some(workspace_id) = workspace_id {
|
||||
self.get_workspace_views(&workspace_id).await
|
||||
self.get_workspace_public_views(&workspace_id).await
|
||||
} else {
|
||||
tracing::warn!("Can't get current workspace views");
|
||||
Ok(vec![])
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn get_workspace_views(&self, workspace_id: &str) -> FlowyResult<Vec<ViewPB>> {
|
||||
pub async fn get_workspace_public_views(&self, workspace_id: &str) -> FlowyResult<Vec<ViewPB>> {
|
||||
let views = self.with_folder(Vec::new, |folder| {
|
||||
get_workspace_public_view_pbs(workspace_id, folder)
|
||||
});
|
||||
@ -519,7 +519,7 @@ impl FolderManager {
|
||||
let folder = self.mutex_folder.lock();
|
||||
let folder = folder.as_ref().ok_or_else(folder_not_init_error)?;
|
||||
let trash_ids = folder
|
||||
.get_all_trash()
|
||||
.get_all_trash_sections()
|
||||
.into_iter()
|
||||
.map(|trash| trash.id)
|
||||
.collect::<Vec<String>>();
|
||||
@ -559,7 +559,7 @@ impl FolderManager {
|
||||
|folder| {
|
||||
if let Some(view) = folder.views.get_view(view_id) {
|
||||
self.unfavorite_view_and_decendants(view.clone(), folder);
|
||||
folder.add_trash(vec![view_id.to_string()]);
|
||||
folder.add_trash_view_ids(vec![view_id.to_string()]);
|
||||
// notify the parent view that the view is moved to trash
|
||||
send_notification(view_id, FolderNotification::DidMoveViewToTrash)
|
||||
.payload(DeletedViewPB {
|
||||
@ -590,7 +590,7 @@ impl FolderManager {
|
||||
.collect();
|
||||
|
||||
if !favorite_descendant_views.is_empty() {
|
||||
folder.delete_favorites(
|
||||
folder.delete_favorite_view_ids(
|
||||
favorite_descendant_views
|
||||
.iter()
|
||||
.map(|v| v.id.clone())
|
||||
@ -754,6 +754,16 @@ impl FolderManager {
|
||||
None
|
||||
};
|
||||
|
||||
let is_private = self.with_folder(
|
||||
|| false,
|
||||
|folder| folder.is_view_in_section(Section::Private, &view.id),
|
||||
);
|
||||
let section = if is_private {
|
||||
ViewSectionPB::Private
|
||||
} else {
|
||||
ViewSectionPB::Public
|
||||
};
|
||||
|
||||
let duplicate_params = CreateViewParams {
|
||||
parent_view_id: view.parent_view_id.clone(),
|
||||
name: format!("{} (copy)", &view.name),
|
||||
@ -764,8 +774,7 @@ impl FolderManager {
|
||||
meta: Default::default(),
|
||||
set_as_current: true,
|
||||
index,
|
||||
// TODO: lucas.xu fetch the section from the view
|
||||
section: Some(ViewSectionPB::Public),
|
||||
section: Some(section),
|
||||
};
|
||||
|
||||
self.create_view_with_params(duplicate_params).await?;
|
||||
@ -801,9 +810,9 @@ impl FolderManager {
|
||||
|folder| {
|
||||
if let Some(old_view) = folder.views.get_view(view_id) {
|
||||
if old_view.is_favorite {
|
||||
folder.delete_favorites(vec![view_id.to_string()]);
|
||||
folder.delete_favorite_view_ids(vec![view_id.to_string()]);
|
||||
} else {
|
||||
folder.add_favorites(vec![view_id.to_string()]);
|
||||
folder.add_favorite_view_ids(vec![view_id.to_string()]);
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -878,8 +887,8 @@ impl FolderManager {
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "trace", skip(self))]
|
||||
pub(crate) async fn get_all_trash(&self) -> Vec<TrashInfo> {
|
||||
self.with_folder(Vec::new, |folder| folder.get_all_trash())
|
||||
pub(crate) async fn get_my_trash_info(&self) -> Vec<TrashInfo> {
|
||||
self.with_folder(Vec::new, |folder| folder.get_my_trash_info())
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "trace", skip(self))]
|
||||
@ -887,7 +896,7 @@ impl FolderManager {
|
||||
self.with_folder(
|
||||
|| (),
|
||||
|folder| {
|
||||
folder.remote_all_trash();
|
||||
folder.remove_all_my_trash_sections();
|
||||
},
|
||||
);
|
||||
send_notification("trash", FolderNotification::DidUpdateTrash)
|
||||
@ -900,15 +909,15 @@ impl FolderManager {
|
||||
self.with_folder(
|
||||
|| (),
|
||||
|folder| {
|
||||
folder.delete_trash(vec![trash_id.to_string()]);
|
||||
folder.delete_trash_view_ids(vec![trash_id.to_string()]);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// Delete all the trash permanently.
|
||||
#[tracing::instrument(level = "trace", skip(self))]
|
||||
pub(crate) async fn delete_all_trash(&self) {
|
||||
let deleted_trash = self.with_folder(Vec::new, |folder| folder.get_all_trash());
|
||||
pub(crate) async fn delete_my_trash(&self) {
|
||||
let deleted_trash = self.with_folder(Vec::new, |folder| folder.get_my_trash_info());
|
||||
for trash in deleted_trash {
|
||||
let _ = self.delete_trash(&trash.id).await;
|
||||
}
|
||||
@ -926,7 +935,7 @@ impl FolderManager {
|
||||
self.with_folder(
|
||||
|| (),
|
||||
|folder| {
|
||||
folder.delete_trash(vec![view_id.to_string()]);
|
||||
folder.delete_trash_view_ids(vec![view_id.to_string()]);
|
||||
folder.views.delete_views(vec![view_id]);
|
||||
},
|
||||
);
|
||||
@ -977,8 +986,7 @@ impl FolderManager {
|
||||
meta: Default::default(),
|
||||
set_as_current: false,
|
||||
index: None,
|
||||
// TODO: Lucas.xu fetch the section from the view
|
||||
section: Some(ViewSectionPB::Public),
|
||||
section: None,
|
||||
};
|
||||
|
||||
let view = create_view(self.user.user_id()?, params, import_data.view_layout);
|
||||
@ -1117,14 +1125,14 @@ impl FolderManager {
|
||||
fn get_sections(&self, section_type: Section) -> Vec<SectionItem> {
|
||||
self.with_folder(Vec::new, |folder| {
|
||||
let trash_ids = folder
|
||||
.get_all_trash()
|
||||
.get_all_trash_sections()
|
||||
.into_iter()
|
||||
.map(|trash| trash.id)
|
||||
.collect::<Vec<String>>();
|
||||
|
||||
let mut views = match section_type {
|
||||
Section::Favorite => folder.get_all_favorites(),
|
||||
Section::Recent => folder.get_all_recent_sections(),
|
||||
Section::Favorite => folder.get_my_favorite_sections(),
|
||||
Section::Recent => folder.get_my_recent_sections(),
|
||||
_ => vec![],
|
||||
};
|
||||
|
||||
@ -1139,14 +1147,14 @@ impl FolderManager {
|
||||
pub(crate) fn get_workspace_public_view_pbs(_workspace_id: &str, folder: &Folder) -> Vec<ViewPB> {
|
||||
// get the trash ids
|
||||
let trash_ids = folder
|
||||
.get_all_trash()
|
||||
.get_all_trash_sections()
|
||||
.into_iter()
|
||||
.map(|trash| trash.id)
|
||||
.collect::<Vec<String>>();
|
||||
|
||||
// get the private view ids
|
||||
let private_view_ids = folder
|
||||
.get_all_private_views()
|
||||
.get_all_private_sections()
|
||||
.into_iter()
|
||||
.map(|view| view.id)
|
||||
.collect::<Vec<String>>();
|
||||
@ -1174,14 +1182,14 @@ pub(crate) fn get_workspace_public_view_pbs(_workspace_id: &str, folder: &Folder
|
||||
pub(crate) fn get_workspace_private_view_pbs(_workspace_id: &str, folder: &Folder) -> Vec<ViewPB> {
|
||||
// get the trash ids
|
||||
let trash_ids = folder
|
||||
.get_all_trash()
|
||||
.get_all_trash_sections()
|
||||
.into_iter()
|
||||
.map(|trash| trash.id)
|
||||
.collect::<Vec<String>>();
|
||||
|
||||
// get the private view ids
|
||||
let private_view_ids = folder
|
||||
.get_my_private_views()
|
||||
.get_my_private_sections()
|
||||
.into_iter()
|
||||
.map(|view| view.id)
|
||||
.collect::<Vec<String>>();
|
||||
|
@ -125,7 +125,7 @@ pub(crate) fn subscribe_folder_trash_changed(
|
||||
unique_ids.insert(view.parent_view_id.clone());
|
||||
}
|
||||
|
||||
let repeated_trash: RepeatedTrashPB = folder.get_all_trash().into();
|
||||
let repeated_trash: RepeatedTrashPB = folder.get_my_trash_info().into();
|
||||
send_notification("trash", FolderNotification::DidUpdateTrash)
|
||||
.payload(repeated_trash)
|
||||
.send();
|
||||
@ -150,7 +150,7 @@ pub(crate) fn notify_parent_view_did_change<T: AsRef<str>>(
|
||||
let folder = folder.as_ref()?;
|
||||
let workspace_id = folder.get_workspace_id();
|
||||
let trash_ids = folder
|
||||
.get_all_trash()
|
||||
.get_all_trash_sections()
|
||||
.into_iter()
|
||||
.map(|trash| trash.id)
|
||||
.collect::<Vec<String>>();
|
||||
|
Reference in New Issue
Block a user