| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -207,10 +207,10 @@ class Uploader: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return success | 
					 | 
					 | 
					 | 
					    return success | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def step(self, network_type: int, metered: bool) -> bool: | 
					 | 
					 | 
					 | 
					  def step(self, network_type: int, metered: bool) -> Optional[bool]: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    d = self.next_file_to_upload(metered) | 
					 | 
					 | 
					 | 
					    d = self.next_file_to_upload(metered) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if d is None: | 
					 | 
					 | 
					 | 
					    if d is None: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      return True | 
					 | 
					 | 
					 | 
					      return None | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    name, key, fn = d | 
					 | 
					 | 
					 | 
					    name, key, fn = d | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -253,12 +253,15 @@ def main(exit_event: Optional[threading.Event] = None) -> None: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      continue | 
					 | 
					 | 
					 | 
					      continue | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    success = uploader.step(sm['deviceState'].networkType.raw, sm['deviceState'].networkMetered) | 
					 | 
					 | 
					 | 
					    success = uploader.step(sm['deviceState'].networkType.raw, sm['deviceState'].networkMetered) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if success: | 
					 | 
					 | 
					 | 
					    if success is None: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      backoff = 60 if offroad else 5 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    elif success: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      backoff = 0.1 | 
					 | 
					 | 
					 | 
					      backoff = 0.1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    elif allow_sleep: | 
					 | 
					 | 
					 | 
					    else: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      cloudlog.info("upload backoff %r", backoff) | 
					 | 
					 | 
					 | 
					      cloudlog.info("upload backoff %r", backoff) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      backoff = min(backoff*2, 120) | 
					 | 
					 | 
					 | 
					      backoff = min(backoff*2, 120) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    time.sleep(backoff + random.uniform(0, backoff)) | 
					 | 
					 | 
					 | 
					    if allow_sleep: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      time.sleep(backoff + random.uniform(0, backoff)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					if __name__ == "__main__": | 
					 | 
					 | 
					 | 
					if __name__ == "__main__": | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |