Sha256: 9490903e5cd17ffc90f14bdc3b9acb628b421a742ea7606a672d482926158640

Contents?: true

Size: 1.93 KB

Versions: 30

Compression:

Stored size: 1.93 KB

Contents

require 'alula/progressbar'

module Alula
  class Progress
    def initialize(options)
      @pbars = {}
      @interval = 1.0
      @options = options
      @display = false
      
      @@lock = Mutex.new
    end
    
    def create(identifier, opts)
      if @pbars[identifier]
        @pbars[identifier].finish
      end
      
      @@lock.synchronize do
        @pbars[identifier] = ProgressBar.new(opts[:title], opts[:total] == 0 ? 0.1 : opts[:total])
        if @options[:debug]
          @pbars[identifier].settings.force_mode = :notty
        end
      end
    end
    
    def step(identifier)
      if @pbars[identifier]
        @pbars[identifier].step
        _display
      end
    end

    def set(identifier, value)
      if @pbars[identifier]
        @pbars[identifier].set(value)
      end
    end
    
    def title(identifier, title)
      if @pbars[identifier]
        @pbars[identifier].message = title
      end
    end
    
    def set_file_transfer(identifier)
      if @pbars[identifier]
        @pbars[identifier].file_transfer_mode
      end
    end
    
    def finish(identifier)
      if @pbars[identifier]
        @pbars[identifier].finish
        _display
        @@lock.synchronize do
          @pbars.delete(identifier)
        end
      end
    end
    
    def display
      @display = true
      _display(true)
      unless @options[:debug]
        @update_thread = Thread.new {
          loop {
            sleep(@interval)
            _display
          }
        }
      end
    end
    
    def hide
      @display = false
      if @update_thread
        Thread.kill(@update_thread)
      end
    end
    
    private
    def _display(first = false)
      return unless @display
      
      @@lock.synchronize do
        output = @pbars.collect {|identifier, pbar| pbar.render }
        unless @options[:debug] or first
          print "\e[#{output.count}F"
        end
        puts output.join("\n")
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
alula-0.4.27 lib/alula/progress.rb
alula-0.4.26 lib/alula/progress.rb
alula-0.4.25 lib/alula/progress.rb
alula-0.4.24 lib/alula/progress.rb
alula-0.4.23 lib/alula/progress.rb
alula-0.4.22 lib/alula/progress.rb
alula-0.4.21 lib/alula/progress.rb
alula-0.4.20 lib/alula/progress.rb
alula-0.4.19 lib/alula/progress.rb
alula-0.4.18 lib/alula/progress.rb
alula-0.4.17 lib/alula/progress.rb
alula-0.4.16 lib/alula/progress.rb
alula-0.4.15 lib/alula/progress.rb
alula-0.4.14 lib/alula/progress.rb
alula-0.4.13 lib/alula/progress.rb
alula-0.4.12 lib/alula/progress.rb
alula-0.4.11 lib/alula/progress.rb
alula-0.4.11a lib/alula/progress.rb
alula-0.4.10 lib/alula/progress.rb
alula-0.4.9 lib/alula/progress.rb