Improve local filetree view state and sidebar performance

This commit is contained in:
lix-2026
2026-05-27 11:31:12 +08:00
parent 58e2fdb5d8
commit 3ae33cc21d
56 changed files with 8614 additions and 461 deletions
+24 -19
View File
@@ -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);