Sha256: e122b86f5935fea9d601343f06372a2292046b64b971b77637a2b74845ce66f6

Contents?: true

Size: 1.01 KB

Versions: 5

Compression:

Stored size: 1.01 KB

Contents

require "xmlrpc/client"
require "net/ssh"

module Saber
  class Fetcher

    def add_names(*names)
      files = retrive_files(*names)
      add(*files)
    end

    def aria2_add(uris, o={}, &blk)
      @aria2 = XMLRPC::Client.new2(Rc.aria2.rpc)
      @aria2.call("aria2.addUri", uris, o, &blk)
    end

    def add(*files)
      files.each { |file|
        uri = "#{Rc.server.ftp}/#{file}"
        gid = aria2_add([uri], :dir => Pa.dir2("#{Rc.p.fetcher_download}/#{file}"))
        Saber.ui.debug "DOWNLOAD #{gid} #{uri}"
      }
    end

  private

    def retrive_files(*names)
      files = []
      Net::SSH.start(Rc.server.host, Rc.server.user) do |s|
        name = "'#{names.join("' '")}'"
        cmd = "cd #{Rc.p.remote_download} && find #{name} -type f"

        rst = s.exec!(cmd)
        if rst =~ /^find: `|^cd:cd:/
          raise Error, rst 
        elsif rst.nil?
          raise Error, "remote `#{name}' is an empty directory."
        end

        files = rst.split("\n")
      end

      files
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
saber-1.1.1 lib/saber/fetcher.rb
saber-1.1.0 lib/saber/fetcher.rb
saber-1.0.2 lib/saber/fetcher.rb
saber-1.0.1 lib/saber/fetcher.rb
saber-1.0.0 lib/saber/fetcher.rb