[downloader]: Fix broken progress bar when content-length not provided (#8010)

* downloader: Fix broken progress bar

* Fix syntax error

* Fix variable scope

* Revert last changes

* Remove redundant space
This commit is contained in:
supechicken
2023-02-28 22:47:05 +08:00
committed by GitHub
parent 60808ffb50
commit 1b9266e84f
2 changed files with 9 additions and 19 deletions

View File

@@ -125,32 +125,27 @@ def http_downloader(uri, filename = File.basename(url), verbose = false)
warn "\n"
end
progress_bar_thread = progress_bar.show # print progress bar
# read file chunks from server, write it to filesystem
File.open(filename, 'wb') do |io|
progress_bar_thread = progress_bar.show # print progress bar
response.read_body do |chunk|
downloaded_size += chunk.size # record downloaded size, used for showing progress bar
progress_bar.set_downloaded_size(downloaded_size, invalid_size_error: false) if file_size.positive?
io.write(chunk) # write to file
end
ensure
# stop progress bar, wait for it to terminate
progress_bar.progress_bar_showing = false
progress_bar_thread.join
end
ensure
# stop progress bar, wait for it to terminate
progress_bar.progress_bar_showing = false
progress_bar_thread.join
end
end
rescue OpenSSL::SSL::SSLError
# handle SSL errors
ssl_error_retry += 1
if ssl_error_retry <= 3
retry
else
raise
end
ssl_error_retry <= 3 ? retry : raise
end
def external_downloader(uri, filename = File.basename(url), verbose = false)

View File

@@ -102,15 +102,10 @@ class ProgressBar
end
# stop when 100%
if @percentage >= 100
print "\e[2K\r" # clear previous line (progress bar)
break
else
print "\r"
end
@percentage >= 100 ? break : print("\r")
end
ensure
print "\e[?25h" # restore cursor mode since we hide it before
print "\e[2K\r\e[?25h" # clear line and restore cursor mode
end
end
end