Improve local filetree view state and sidebar performance
This commit is contained in:
@@ -6,8 +6,7 @@ use crate::routes::command_support::{
|
||||
execute_runtime_command_via_convex, execute_runtime_command_via_convex_with_artifacts,
|
||||
};
|
||||
use crate::routes::local_folder_source::{
|
||||
ensure_local_workspace_access, update_local_markdown_title, update_local_page_options,
|
||||
write_local_markdown_page_body,
|
||||
ensure_local_workspace_access, update_local_markdown_title, write_local_markdown_page_body,
|
||||
};
|
||||
use crate::routes::query_support::{
|
||||
execute_runtime_query_via_convex, fetch_documents_meta_via_convex,
|
||||
@@ -66,7 +65,15 @@ fn find_document_buffer_state(
|
||||
relative_path,
|
||||
document_id,
|
||||
);
|
||||
return buffer_store.get_by_path(&ws_path);
|
||||
if let Some(buffer) = buffer_store.get_by_path(&ws_path) {
|
||||
return Some(buffer);
|
||||
}
|
||||
return buffer_store.all_buffers().into_iter().find(|buf| {
|
||||
buf.workspace_path.root_uri == root_uri
|
||||
&& buf.workspace_path.relative_path == relative_path
|
||||
&& buf.workspace_path.object_identity.document_id.as_deref()
|
||||
== Some(document_id)
|
||||
});
|
||||
}
|
||||
return buffer_store.all_buffers().into_iter().find(|buf| {
|
||||
buf.workspace_path.root_uri == root_uri
|
||||
@@ -1022,7 +1029,16 @@ pub async fn options(
|
||||
})?;
|
||||
ensure_local_workspace_access(&context, root_uri)
|
||||
.map_err(|error| error.with_context(&context))?;
|
||||
let result = update_local_page_options(root_uri, document_id, &body.options)?;
|
||||
let result = crate::routes::ui_preferences::update_page_preferences_from_value(
|
||||
&state,
|
||||
&context,
|
||||
context.auth.actor_id.trim(),
|
||||
body.workspace_id.as_deref().unwrap_or_default(),
|
||||
body.source_kind.as_deref().unwrap_or("local_folder"),
|
||||
root_uri,
|
||||
document_id,
|
||||
&body.options,
|
||||
)?;
|
||||
return Ok(ok_response(&context, result));
|
||||
}
|
||||
let effective_workspace_id =
|
||||
@@ -1486,7 +1502,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn local_folder_documents_save_title_and_options_write_to_disk() {
|
||||
async fn local_folder_documents_save_title_and_options_store_ui_preferences_in_sqlite() {
|
||||
let root = std::env::temp_dir().join(format!(
|
||||
"mnote-local-documents-write-{}",
|
||||
std::process::id()
|
||||
@@ -1615,20 +1631,9 @@ mod tests {
|
||||
assert!(markdown.contains("## Saved Heading"));
|
||||
assert!(markdown.contains("Saved body"));
|
||||
|
||||
let options = std::fs::read_to_string(root.join(".mnote").join("page-options.json"))
|
||||
.expect("read page options");
|
||||
let options_json: Value = serde_json::from_str(&options).expect("options json");
|
||||
assert_eq!(
|
||||
options_json["pages"][&renamed_document_id]["wideLayout"],
|
||||
true
|
||||
);
|
||||
assert_eq!(
|
||||
options_json["pages"][&renamed_document_id]["showToc"],
|
||||
false
|
||||
);
|
||||
assert_eq!(
|
||||
options_json["pages"][&renamed_document_id]["hideTitleHeader"],
|
||||
false
|
||||
assert!(
|
||||
!root.join(".mnote").join("page-options.json").exists(),
|
||||
"local folder UI 偏好不应继续写入 .mnote/page-options.json"
|
||||
);
|
||||
|
||||
let _ = std::fs::remove_dir_all(&root);
|
||||
|
||||
Reference in New Issue
Block a user