Updated filetransfer example
This commit is contained in:
		
							parent
							
								
									e2122be006
								
							
						
					
					
						commit
						fda6ea741e
					
				| @ -176,14 +176,22 @@ def list_timeout(receipt): | ||||
| ########################################################## | ||||
| 
 | ||||
| # We store a global list of files available on the server | ||||
| server_files = [] | ||||
| server_files      = [] | ||||
| 
 | ||||
| # A reference to the server link | ||||
| server_link = None | ||||
| server_link       = None | ||||
| 
 | ||||
| # And a reference to the current download | ||||
| current_download = None | ||||
| current_filename = None | ||||
| current_download  = None | ||||
| current_filename  = None | ||||
| 
 | ||||
| # Variables to store download statistics | ||||
| download_started  = 0 | ||||
| download_finished = 0 | ||||
| download_time     = 0 | ||||
| transfer_size     = 0 | ||||
| file_size         = 0 | ||||
| 
 | ||||
| 
 | ||||
| # This initialisation is executed when the users chooses | ||||
| # to run as a client | ||||
| @ -303,7 +311,7 @@ def menu(): | ||||
| # I won't go into detail here. Just | ||||
| # strings basically. | ||||
| def print_menu(): | ||||
| 	global menu_mode | ||||
| 	global menu_mode, download_time, download_started, download_finished, transfer_size, file_size | ||||
| 
 | ||||
| 	if menu_mode == "main": | ||||
| 		clear_screen() | ||||
| @ -342,8 +350,22 @@ def print_menu(): | ||||
| 		if current_download.status == RNS.Resource.COMPLETE: | ||||
| 			print(("\rProgress: 100.0 %"), end=' ') | ||||
| 			sys.stdout.flush() | ||||
| 
 | ||||
| 			# Print statistics | ||||
| 			hours, rem = divmod(download_time, 3600) | ||||
| 			minutes, seconds = divmod(rem, 60) | ||||
| 			timestring = "{:0>2}:{:0>2}:{:05.2f}".format(int(hours),int(minutes),seconds) | ||||
| 			print("") | ||||
| 			print("") | ||||
| 			print("--- Statistics -----") | ||||
| 			print("\tTime taken       : "+timestring) | ||||
| 			print("\tFile size        : "+size_str(file_size)) | ||||
| 			print("\tData transferred : "+size_str(transfer_size)) | ||||
| 			print("\tEffective rate   : "+size_str(file_size/download_time, suffix='b')+"/s") | ||||
| 			print("\tTransfer rate    : "+size_str(transfer_size/download_time, suffix='b')+"/s") | ||||
| 			print("") | ||||
| 			print("The download completed! Press enter to return to the menu.") | ||||
| 			print("") | ||||
| 			input() | ||||
| 
 | ||||
| 		else: | ||||
| @ -434,17 +456,26 @@ def link_closed(link): | ||||
| # so the user can be shown a progress of | ||||
| # the download. | ||||
| def download_began(resource): | ||||
| 	global menu_mode, current_download | ||||
| 	global menu_mode, current_download, download_started, transfer_size, file_size | ||||
| 	current_download = resource | ||||
| 	 | ||||
| 	download_started = time.time() | ||||
| 	transfer_size = resource.size | ||||
| 	file_size = resource.uncompressed_size | ||||
| 
 | ||||
| 	menu_mode = "downloading" | ||||
| 
 | ||||
| # When the download concludes, successfully | ||||
| # or not, we'll update our menu state and  | ||||
| # inform the user about how it all went. | ||||
| def download_concluded(resource): | ||||
| 	global menu_mode, current_filename | ||||
| 	global menu_mode, current_filename, download_started, download_finished, download_time | ||||
| 	download_finished = time.time() | ||||
| 	download_time = download_finished - download_started | ||||
| 
 | ||||
| 	saved_filename = current_filename | ||||
| 
 | ||||
| 
 | ||||
| 	if resource.status == RNS.Resource.COMPLETE: | ||||
| 		counter = 0 | ||||
| 		while os.path.isfile(saved_filename): | ||||
| @ -461,6 +492,22 @@ def download_concluded(resource): | ||||
| 	else: | ||||
| 		menu_mode = "download_concluded" | ||||
| 
 | ||||
| # A convenience function for printing a human- | ||||
| # readable file size | ||||
| def size_str(num, suffix='B'): | ||||
| 	units = ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi'] | ||||
| 	last_unit = 'Yi' | ||||
| 
 | ||||
| 	if suffix == 'b': | ||||
| 		num *= 8 | ||||
| 		units = ['','K','M','G','T','P','E','Z'] | ||||
| 		last_unit = 'Y' | ||||
| 
 | ||||
| 	for unit in units: | ||||
| 		if abs(num) < 1024.0: | ||||
| 			return "%3.2f %s%s" % (num, unit, suffix) | ||||
| 		num /= 1024.0 | ||||
| 	return "%.2f %s%s" % (num, last_unit, suffix) | ||||
| 
 | ||||
| # A convenience function for clearing the screen | ||||
| def clear_screen(): | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user