From 3509f0b035f7b3a60f0beb56090c8c219eca7a28 Mon Sep 17 00:00:00 2001 From: Timon Date: Wed, 15 Oct 2025 12:30:47 +0200 Subject: [PATCH] Desktop: Persist document path (#3272) * persist document path * persist data cleanup --- desktop/src/persist.rs | 7 +++---- desktop/wrapper/src/intercept_frontend_message.rs | 2 +- editor/src/messages/frontend/utility_types.rs | 3 +++ .../portfolio/document/document_message_handler.rs | 2 ++ editor/src/messages/portfolio/portfolio_message_handler.rs | 6 ++++-- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/desktop/src/persist.rs b/desktop/src/persist.rs index c47ad862..e959112f 100644 --- a/desktop/src/persist.rs +++ b/desktop/src/persist.rs @@ -6,14 +6,13 @@ pub(crate) struct PersistentData { current_document: Option, #[serde(skip)] document_order: Option>, - preferences: Option, } impl PersistentData { pub(crate) fn write_document(&mut self, id: DocumentId, document: Document) { self.documents.write(id, document); if let Some(order) = &self.document_order { - self.documents.force_order(order.clone()); + self.documents.force_order(order); } self.flush(); } @@ -171,10 +170,10 @@ impl DocumentStore { }) } - fn force_order(&mut self, desired_order: Vec) { + fn force_order(&mut self, desired_order: &Vec) { let mut ordered_prefix_len = 0; for id in desired_order { - if let Some(offset) = self.0[ordered_prefix_len..].iter().position(|meta| meta.id == id) { + if let Some(offset) = self.0[ordered_prefix_len..].iter().position(|meta| meta.id == *id) { let found_index = ordered_prefix_len + offset; if found_index != ordered_prefix_len { self.0[ordered_prefix_len..=found_index].rotate_right(1); diff --git a/desktop/wrapper/src/intercept_frontend_message.rs b/desktop/wrapper/src/intercept_frontend_message.rs index 2b1cdb86..60776268 100644 --- a/desktop/wrapper/src/intercept_frontend_message.rs +++ b/desktop/wrapper/src/intercept_frontend_message.rs @@ -81,7 +81,7 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD id: document_id, document: Document { name: details.name, - path: None, + path: details.path, content: document, is_saved: details.is_saved, }, diff --git a/editor/src/messages/frontend/utility_types.rs b/editor/src/messages/frontend/utility_types.rs index 7f987340..89dc539c 100644 --- a/editor/src/messages/frontend/utility_types.rs +++ b/editor/src/messages/frontend/utility_types.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use crate::messages::portfolio::document::utility_types::document_metadata::LayerNodeIdentifier; use crate::messages::prelude::*; @@ -10,6 +12,7 @@ pub struct OpenDocument { #[derive(PartialEq, Eq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] pub struct DocumentDetails { pub name: String, + pub path: Option, #[serde(rename = "isSaved")] pub is_saved: bool, #[serde(rename = "isAutoSaved")] diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index b8bb98ab..33aa8a03 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -1050,6 +1050,8 @@ impl MessageHandler> for DocumentMes DocumentMessage::SavedDocument { path } => { self.path = path; + responses.add(PortfolioMessage::AutoSaveActiveDocument); + // Update the name to match the file stem let document_name_from_path = self.path.as_ref().and_then(|path| { if path.extension().is_some_and(|e| e == FILE_EXTENSION) { diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index 959a5df8..4e70ceb6 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -196,6 +196,7 @@ impl MessageHandler> for Portfolio document: document.serialize_document(), details: DocumentDetails { name: document.name.clone(), + path: document.path.clone(), is_saved: document.is_saved(), is_auto_saved: document.is_auto_saved(), }, @@ -1054,9 +1055,10 @@ impl MessageHandler> for Portfolio self.documents.get(id).map(|document| OpenDocument { id: *id, details: DocumentDetails { - is_auto_saved: document.is_auto_saved(), - is_saved: document.is_saved(), name: document.name.clone(), + path: document.path.clone(), + is_saved: document.is_saved(), + is_auto_saved: document.is_auto_saved(), }, }) })