summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2022-12-04 15:03:14 +0100
committerEugen Wissner <belka@caraus.de>2022-12-04 15:03:14 +0100
commit3a5a07afb417a52e2ccec82a954b39c3558fbf94 (patch)
treea3b535dcddb6cbb65ea59cfd78f9ceedb386192c
parent1dd5639bcb7eff03da7bd50936eba5de3c3c0e07 (diff)
downloadslackbuilder-3a5a07afb417a52e2ccec82a954b39c3558fbf94.tar.gz
Implement downloading progress
-rw-r--r--Gemfile3
-rw-r--r--Gemfile.lock8
-rw-r--r--lib/download.rb20
3 files changed, 25 insertions, 6 deletions
diff --git a/Gemfile b/Gemfile
index f453980..4270453 100644
--- a/Gemfile
+++ b/Gemfile
@@ -10,3 +10,6 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
gem 'rake', '~> 13.0'
gem 'rubocop', '~> 1.7', require: false
+
+gem 'progressbar', '~> 1.11'
+gem 'term-ansicolor', '~> 1.7'
diff --git a/Gemfile.lock b/Gemfile.lock
index 2722d21..0595d89 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -6,6 +6,7 @@ GEM
parallel (1.22.1)
parser (3.1.2.1)
ast (~> 2.4.1)
+ progressbar (1.11.0)
rainbow (3.1.1)
rake (13.0.6)
regexp_parser (2.6.0)
@@ -23,14 +24,21 @@ GEM
rubocop-ast (1.23.0)
parser (>= 3.1.1.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)
PLATFORMS
ruby
DEPENDENCIES
+ progressbar (~> 1.11)
rake (~> 13.0)
rubocop (~> 1.7)
+ term-ansicolor (~> 1.7)
BUNDLED WITH
2.2.33
diff --git a/lib/download.rb b/lib/download.rb
index 6d1b7fb..308e8ee 100644
--- a/lib/download.rb
+++ b/lib/download.rb
@@ -8,6 +8,8 @@ require_relative '../config/config'
require_relative 'package'
require 'net/http'
require 'pathname'
+require 'progressbar'
+require 'term/ansicolor'
module SlackBuilder
extend Rake::FileUtilsExt
@@ -28,16 +30,22 @@ module SlackBuilder
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)
checksum = Digest::MD5.new
+ progressbar = ProgressBar.create title: target, total: response.header.content_length
File.open target, 'w' do |io|
- response.read_body do |chunk|
- print '.'
- io << chunk
- checksum << chunk
- end
+ write_chunk response, checksum, progressbar, io
end
+ progressbar.finish
checksum
end
@@ -63,7 +71,7 @@ def start_download(uri, target, http)
end
def download(uri, target)
- print "Downloading #{uri} "
+ print Term::ANSIColor.green "Downloading #{uri} "
checksum = nil
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|