lib/downloader: Add fix for invalid file size recieved from server (#7271)

* Add fix for github raw links

* lib/downloader: Add fix for github raw links

* Update comment
This commit is contained in:
supechicken
2022-08-15 02:02:32 +08:00
committed by GitHub
parent 64ba6d7ab5
commit de5bf96d41
2 changed files with 24 additions and 2 deletions

View File

@@ -125,7 +125,7 @@ def http_downloader (uri, filename = File.basename(url), verbose = false)
response.read_body do |chunk|
downloaded_size += chunk.size # record downloaded size, used for showing progress bar
progress_bar.set_downloaded_size(downloaded_size) if file_size.positive?
progress_bar.set_downloaded_size(downloaded_size, invalid_size_error: false) if file_size.positive?
io.write(chunk) # write to file
end

View File

@@ -3,6 +3,8 @@ require_relative 'color'
require_relative 'convert_size'
class ProgressBar
class InvalidSizeError < StandardError; end
attr_accessor :progress_bar_showing
def initialize (total_size)
@@ -45,7 +47,27 @@ class ProgressBar
Process.kill('WINCH', 0) # trigger the trap above
end
def set_downloaded_size (downloaded_size)
def set_downloaded_size (downloaded_size, invalid_size_error: true)
if downloaded_size > @total_size
# when the given downloaded size/total size is invalid (given downloaded size > given total size),
# set all info to unknown (except downloaded size)
@elapsed_time = @total_size = 0
@elapsed_time_in_str = '--:--:--'
@percentage = 100
@percentage_in_str = '---'
@total_size_in_str = ''
@downloaded_size_in_str = human_size(downloaded_size)
# raise error unless #{invalid_size_error} is set to false
if invalid_size_error
raise InvalidSizeError, 'The given downloaded size is larger than the total size'
else
return false
end
end
if @start_time
@elapsed_time = (Time.now - @start_time).to_i
else