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
|
# We store a global list of files available on the server
|
||||||
server_files = []
|
server_files = []
|
||||||
|
|
||||||
# A reference to the server link
|
# A reference to the server link
|
||||||
server_link = None
|
server_link = None
|
||||||
|
|
||||||
# And a reference to the current download
|
# And a reference to the current download
|
||||||
current_download = None
|
current_download = None
|
||||||
current_filename = 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
|
# This initialisation is executed when the users chooses
|
||||||
# to run as a client
|
# to run as a client
|
||||||
@ -303,7 +311,7 @@ def menu():
|
|||||||
# I won't go into detail here. Just
|
# I won't go into detail here. Just
|
||||||
# strings basically.
|
# strings basically.
|
||||||
def print_menu():
|
def print_menu():
|
||||||
global menu_mode
|
global menu_mode, download_time, download_started, download_finished, transfer_size, file_size
|
||||||
|
|
||||||
if menu_mode == "main":
|
if menu_mode == "main":
|
||||||
clear_screen()
|
clear_screen()
|
||||||
@ -342,8 +350,22 @@ def print_menu():
|
|||||||
if current_download.status == RNS.Resource.COMPLETE:
|
if current_download.status == RNS.Resource.COMPLETE:
|
||||||
print(("\rProgress: 100.0 %"), end=' ')
|
print(("\rProgress: 100.0 %"), end=' ')
|
||||||
sys.stdout.flush()
|
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("")
|
||||||
print("The download completed! Press enter to return to the menu.")
|
print("The download completed! Press enter to return to the menu.")
|
||||||
|
print("")
|
||||||
input()
|
input()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -434,17 +456,26 @@ def link_closed(link):
|
|||||||
# so the user can be shown a progress of
|
# so the user can be shown a progress of
|
||||||
# the download.
|
# the download.
|
||||||
def download_began(resource):
|
def download_began(resource):
|
||||||
global menu_mode, current_download
|
global menu_mode, current_download, download_started, transfer_size, file_size
|
||||||
current_download = resource
|
current_download = resource
|
||||||
|
|
||||||
|
download_started = time.time()
|
||||||
|
transfer_size = resource.size
|
||||||
|
file_size = resource.uncompressed_size
|
||||||
|
|
||||||
menu_mode = "downloading"
|
menu_mode = "downloading"
|
||||||
|
|
||||||
# When the download concludes, successfully
|
# When the download concludes, successfully
|
||||||
# or not, we'll update our menu state and
|
# or not, we'll update our menu state and
|
||||||
# inform the user about how it all went.
|
# inform the user about how it all went.
|
||||||
def download_concluded(resource):
|
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
|
saved_filename = current_filename
|
||||||
|
|
||||||
|
|
||||||
if resource.status == RNS.Resource.COMPLETE:
|
if resource.status == RNS.Resource.COMPLETE:
|
||||||
counter = 0
|
counter = 0
|
||||||
while os.path.isfile(saved_filename):
|
while os.path.isfile(saved_filename):
|
||||||
@ -461,6 +492,22 @@ def download_concluded(resource):
|
|||||||
else:
|
else:
|
||||||
menu_mode = "download_concluded"
|
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
|
# A convenience function for clearing the screen
|
||||||
def clear_screen():
|
def clear_screen():
|
||||||
|
Loading…
Reference in New Issue
Block a user