zoukankan      html  css  js  c++  java
  • the progressbar and Tempfile

    https://github.com/peleteiro/progressbar

    gem install progressbar

    gem 'progressbar', '~> 0.21.0'

    % irb --simple-prompt -r progressbar
    >> pbar = ProgressBar.new("test", 100)
    => (ProgressBar: 0/100)
    >> 100.times {sleep(0.1); pbar.inc}; pbar.finish
    test:          100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:10
    => nil
    
    >> pbar = ProgressBar.new("test", 100)
    => (ProgressBar: 0/100)
    >> (1..100).each{|x| sleep(0.1); pbar.set(x)}; pbar.finish
    test:           67% |oooooooooooooooooooooooooo              | ETA:  00:00:03
    
    >> ProgressBar.new("test", 100) do |pbar|
    >>   100.times { sleep(0.1); pbar.inc }
    >> end
    test:          100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:10

    def download_apk!
      require 'open-uri'
      require 'digest'
      require 'fileutils'

      return false if is_dead_download_url?
      return false if is_apk_downloaded?

      tmp_file = Tempfile.new [package_name, ".apk"]
      File.open(tmp_file, 'wb') do |file_to_save|
        pbar = nil

        open(download_url, "rb", :content_length_proc => lambda {|t|
          if t && 0 < t

            pbar = ProgressBar.new("...", t)
         pbar.file_transfer_mode
          end
        },
        :progress_proc => lambda {|s|
          pbar.set s if pbar
        }) { |file_to_download| file_to_save.write(file_to_download.read) }  
      end

      apk_md5 = Digest::MD5.file(tmp_file).hexdigest
      apk_path = File.join Settings.apks_dir, "#{package_name}.#{apk_md5}.apk"

      FileUtils.mkdir_p Settings.apks_dir
      FileUtils.mv tmp_file, apk_path

      package_info = dump_package_info apk_path
      update_attributes package_info.merge(md5: apk_md5)
      apk_path
    rescue OpenURI::HTTPError, OpenURI::HTTPRedirect
      false
    end

     

    http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html

    Tempfile

    默认存储路径是 /tmp
    A utility class for managing temporary files. When you create a Tempfile object, it will create a temporary file with a unique filename. A Tempfile objects behaves just like a File object, and you can perform all the usual file operations on it: reading data, writing data, changing its permissions, etc. So although this class does not explicitly document all instance methods supported by File, you can in fact call any File instance method on a Tempfile object.


    require 'tempfile'
    
    file = Tempfile.new('foo')
    file.path      # => A unique filename in the OS's temp directory,
                   #    e.g.: "/tmp/foo.24722.0"
                   #    This filename contains 'foo' in its basename.
    file.write("hello world")
    file.rewind
    file.read      # => "hello world"
    file.close
    file.unlink    # deletes the temp file





  • 相关阅读:
    UE4 Cel Shading(卡通渲染)
    UE4 常用数学
    锈迹材质全流程实例:Blender-》SP-》UE4
    ue4 优化建议与经验
    VisualStudio开发UE4工程设置
    Procedural Mesh Component in C++:Getting Started
    Java容器有哪些?
    java 连接mongodb
    mongodb 系列 ~ mongo 用户验证系列
    mongodb连接认证失败
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/3795259.html
Copyright © 2011-2022 走看看