Improved known destination saving
This commit is contained in:
		
							parent
							
								
									e5c0ee4153
								
							
						
					
					
						commit
						9775893840
					
				@ -108,7 +108,24 @@ class Identity:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def save_known_destinations():
 | 
					    def save_known_destinations():
 | 
				
			||||||
 | 
					        # TODO: Improve the storage method so we don't have to
 | 
				
			||||||
 | 
					        # deserialize and serialize the entire table on every
 | 
				
			||||||
 | 
					        # save, but the only changes.
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
 | 
					            if hasattr(Identity, "saving_known_destinations"):
 | 
				
			||||||
 | 
					                wait_interval = 0.2
 | 
				
			||||||
 | 
					                wait_timeout = 5
 | 
				
			||||||
 | 
					                wait_start = time.time()
 | 
				
			||||||
 | 
					                while Identity.saving_known_destinations:
 | 
				
			||||||
 | 
					                    time.sleep(wait_interval)
 | 
				
			||||||
 | 
					                    if time.time() > wait_start+wait_timeout:
 | 
				
			||||||
 | 
					                        RNS.log("Could not save known destinations to storage, waiting for previous save operation timed out.", RNS.LOG_ERROR)
 | 
				
			||||||
 | 
					                        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Identity.saving_known_destinations = True
 | 
				
			||||||
 | 
					            save_start = time.time()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            storage_known_destinations = {}
 | 
					            storage_known_destinations = {}
 | 
				
			||||||
            if os.path.isfile(RNS.Reticulum.storagepath+"/known_destinations"):
 | 
					            if os.path.isfile(RNS.Reticulum.storagepath+"/known_destinations"):
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
@ -126,10 +143,20 @@ class Identity:
 | 
				
			|||||||
            file = open(RNS.Reticulum.storagepath+"/known_destinations","wb")
 | 
					            file = open(RNS.Reticulum.storagepath+"/known_destinations","wb")
 | 
				
			||||||
            umsgpack.dump(Identity.known_destinations, file)
 | 
					            umsgpack.dump(Identity.known_destinations, file)
 | 
				
			||||||
            file.close()
 | 
					            file.close()
 | 
				
			||||||
            RNS.log("Done saving known destinations to storage", RNS.LOG_VERBOSE)
 | 
					
 | 
				
			||||||
 | 
					            save_time = time.time() - save_start
 | 
				
			||||||
 | 
					            if save_time < 1:
 | 
				
			||||||
 | 
					                time_str = str(round(save_time*1000,2))+"ms"
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                time_str = str(round(save_time,2))+"s"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            RNS.log("Saved known destinations to storage in "+time_str, RNS.LOG_VERBOSE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
            RNS.log("Error while saving known destinations to disk, the contained exception was: "+str(e), RNS.LOG_ERROR)
 | 
					            RNS.log("Error while saving known destinations to disk, the contained exception was: "+str(e), RNS.LOG_ERROR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Identity.saving_known_destinations = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def load_known_destinations():
 | 
					    def load_known_destinations():
 | 
				
			||||||
        if os.path.isfile(RNS.Reticulum.storagepath+"/known_destinations"):
 | 
					        if os.path.isfile(RNS.Reticulum.storagepath+"/known_destinations"):
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user