From 3a5a07afb417a52e2ccec82a954b39c3558fbf94 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sun, 4 Dec 2022 15:03:14 +0100 Subject: [PATCH] Implement downloading progress --- Gemfile | 3 +++ Gemfile.lock | 8 ++++++++ lib/download.rb | 20 ++++++++++++++------ 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|