@@ -9,6 +9,9 @@ use crate::file_system::{
99use crate :: lock:: acquire_vault_lock;
1010use crate :: measure:: get_performance;
1111use crate :: measure:: time_it;
12+ use crate :: persistence:: {
13+ check_storage_persistence, has_requested_persistence, request_persistence_storage,
14+ } ;
1215use crate :: sync:: { get_sync_manager, OperationType , SyncMessage } ;
1316use crate :: webrtc:: { AccessLevel , WebRtcPeer } ;
1417use std:: cell:: RefCell ;
@@ -289,7 +292,7 @@ pub async fn upsert_vault(
289292 operation,
290293 Some ( vault. metadata . clone ( ) ) ,
291294 Some ( vault. identity_salts . clone ( ) ) ,
292- Some ( vault. username_pk . clone ( ) )
295+ Some ( vault. username_pk . clone ( ) ) ,
293296 ) ;
294297
295298 let peers = sync_manager. get_peers_mut ( ) ;
@@ -689,12 +692,9 @@ pub async fn import_vault(vault_name: &str, data: JsValue) -> Result<(), JsValue
689692
690693pub async fn get_vault ( vault_name : & str ) -> Result < ( FileSystemDirectoryHandle , Vault ) , JsValue > {
691694 let dirname = get_vault_dirname ( vault_name) ;
692- read_vault_with_name ( & dirname) . await . map_err ( |_| {
693- JsValue :: from_str ( & format ! (
694- "Vault '{}' does not exist" ,
695- vault_name
696- ) )
697- } )
695+ read_vault_with_name ( & dirname)
696+ . await
697+ . map_err ( |_| JsValue :: from_str ( & format ! ( "Vault '{}' does not exist" , vault_name) ) )
698698}
699699
700700pub async fn read_vault_with_name (
@@ -836,6 +836,24 @@ pub async fn save_vault(
836836 dir_handle : & FileSystemDirectoryHandle ,
837837 vault : Vault ,
838838) -> Result < ( ) , VaultError > {
839+ if !has_requested_persistence ( ) {
840+ let is_persisted = check_storage_persistence ( ) . await . unwrap_or ( false ) ;
841+
842+ if !is_persisted {
843+ let result = request_persistence_storage ( ) . await ;
844+
845+ match result {
846+ Ok ( is_granted) => {
847+ console:: log ( & format ! ( "persistence request granted: {}" , is_granted) ) ;
848+ }
849+ Err ( VaultError :: JsError ( message) ) => {
850+ console:: error ( & message) ;
851+ }
852+ _ => { }
853+ }
854+ }
855+ }
856+
839857 let mut namespace_data = Vec :: new ( ) ;
840858 for ( namespace, data) in & vault. namespaces {
841859 let namespace_json = serde_json:: to_string ( & data) . map_err ( |_| VaultError :: IoError {
@@ -1316,7 +1334,7 @@ pub async fn update_vault_from_sync(vault_name: &str, vault_data: &[u8]) -> Resu
13161334 . unwrap_or_else ( IdentitySalts :: new) ,
13171335 username_pk : match sync_msg. username_pk {
13181336 Some ( username_pk) => username_pk,
1319- None => HashMap :: new ( )
1337+ None => HashMap :: new ( ) ,
13201338 } ,
13211339 namespaces : HashMap :: new ( ) ,
13221340 sync_enabled : true ,
0 commit comments