class Soundcloud9000::DownloadThread

Attributes

events[R]
file[R]
progress[R]
total[R]
url[R]

Public Class Methods

new(url, filename) click to toggle source
# File lib/soundcloud9000/download_thread.rb, line 8
def initialize(url, filename)
  @events = Events.new
  @url = URI.parse(url)
  @file = File.open(filename, 'w')
  @progress = 0
  start!
end

Public Instance Methods

log(s) click to toggle source
# File lib/soundcloud9000/download_thread.rb, line 16
def log(s)
  Soundcloud9000::Application.logger.debug("DownloadThread #{s}")
end
start!() click to toggle source
# File lib/soundcloud9000/download_thread.rb, line 20
def start!
  Thread.start do
    begin
      log :start

      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true

      http.request(Net::HTTP::Get.new(url.request_uri)) do |res|
        log "response: #{res.code}"
        raise res.body if res.code != '200'

        @total = res.header['Content-Length'].to_i

        res.read_body do |chunk|
          @progress += chunk.size
          @file << chunk
          @file.close if @progress == @total
        end
      end
    rescue StandardError => e
      log e.message
    end
  end

  sleep 0.1 while @total.nil?
  sleep 0.1

  self
end