Implement downloading progress

This commit is contained in:
Eugen Wissner 2022-12-04 15:03:14 +01:00
parent 1dd5639bcb
commit 3a5a07afb4
Signed by: belka
GPG Key ID: A27FDC1E8EE902C0
3 changed files with 25 additions and 6 deletions

View File

@ -10,3 +10,6 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
gem 'rake', '~> 13.0' gem 'rake', '~> 13.0'
gem 'rubocop', '~> 1.7', require: false gem 'rubocop', '~> 1.7', require: false
gem 'progressbar', '~> 1.11'
gem 'term-ansicolor', '~> 1.7'

View File

@ -6,6 +6,7 @@ GEM
parallel (1.22.1) parallel (1.22.1)
parser (3.1.2.1) parser (3.1.2.1)
ast (~> 2.4.1) ast (~> 2.4.1)
progressbar (1.11.0)
rainbow (3.1.1) rainbow (3.1.1)
rake (13.0.6) rake (13.0.6)
regexp_parser (2.6.0) regexp_parser (2.6.0)
@ -23,14 +24,21 @@ GEM
rubocop-ast (1.23.0) rubocop-ast (1.23.0)
parser (>= 3.1.1.0) parser (>= 3.1.1.0)
ruby-progressbar (1.11.0) ruby-progressbar (1.11.0)
sync (0.5.0)
term-ansicolor (1.7.1)
tins (~> 1.0)
tins (1.32.1)
sync
unicode-display_width (2.3.0) unicode-display_width (2.3.0)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
progressbar (~> 1.11)
rake (~> 13.0) rake (~> 13.0)
rubocop (~> 1.7) rubocop (~> 1.7)
term-ansicolor (~> 1.7)
BUNDLED WITH BUNDLED WITH
2.2.33 2.2.33

View File

@ -8,6 +8,8 @@ require_relative '../config/config'
require_relative 'package' require_relative 'package'
require 'net/http' require 'net/http'
require 'pathname' require 'pathname'
require 'progressbar'
require 'term/ansicolor'
module SlackBuilder module SlackBuilder
extend Rake::FileUtilsExt extend Rake::FileUtilsExt
@ -28,16 +30,22 @@ module SlackBuilder
end end
end end
def write_chunk(response, checksum, progressbar, io)
response.read_body do |chunk|
progressbar.progress += chunk.length
io << chunk
checksum << chunk
end
end
def write_download(target, response) def write_download(target, response)
checksum = Digest::MD5.new checksum = Digest::MD5.new
progressbar = ProgressBar.create title: target, total: response.header.content_length
File.open target, 'w' do |io| File.open target, 'w' do |io|
response.read_body do |chunk| write_chunk response, checksum, progressbar, io
print '.'
io << chunk
checksum << chunk
end
end end
progressbar.finish
checksum checksum
end end
@ -63,7 +71,7 @@ def start_download(uri, target, http)
end end
def download(uri, target) def download(uri, target)
print "Downloading #{uri} " print Term::ANSIColor.green "Downloading #{uri} "
checksum = nil checksum = nil
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http| Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|