@@ -925,19 +925,25 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
925925 }
926926 let folder = self . path . as_ref ( ) . and_then ( |path| path. parent ( ) ) . map ( |parent| parent. to_path_buf ( ) ) ;
927927
928- let exported = resources. export ( & Vec :: from_iter ( self . used_resources ( ) ) ) ;
929- self . embedded_resources = EmbeddedResources :: from_iter ( exported) ;
930- let content = self . serialize_document ( ) ;
931-
932- // Clear embedded resources after serialization to free memory.
933- let _ = std:: mem:: take ( & mut self . embedded_resources ) ;
934-
935- responses. add ( FrontendMessage :: TriggerSaveDocument {
936- document_id,
937- name : format ! ( "{}.{}" , self . name. clone( ) , FILE_EXTENSION ) ,
938- path,
939- folder,
940- content : content. into_bytes ( ) . into ( ) ,
928+ let resource_hashes = Vec :: from_iter ( self . used_resources ( ) ) . into_boxed_slice ( ) ;
929+ let resources = resources. resources ( ) ;
930+ let mut document = self . clone ( ) ;
931+ let name = format ! ( "{}.{}" , self . name. clone( ) , FILE_EXTENSION ) ;
932+
933+ responses. add ( FrontendMessage :: Await {
934+ future : FrontendMessageFuture :: new ( async move {
935+ let exported = ResourceMessageHandler :: export_async ( resources, resource_hashes) . await ;
936+ document. embedded_resources = EmbeddedResources :: from_iter ( exported) ;
937+ let content = document. serialize_document ( ) ;
938+
939+ FrontendMessage :: TriggerSaveDocument {
940+ document_id,
941+ name,
942+ path,
943+ folder,
944+ content : content. into_bytes ( ) . into ( ) ,
945+ }
946+ } ) ,
941947 } ) ;
942948 }
943949 DocumentMessage :: SavedDocument { path } => {
0 commit comments