class TransmissionRSS::Client
Class for communication with transmission utilizing the RPC web interface.
Public Class Methods
new(server = {}, login = nil, options = {})
click to toggle source
# File lib/transmission-rss/client.rb, line 13 def initialize(server = {}, login = nil, options = {}) @host = server[:host] || 'localhost' @port = server[:port] || 9091 @rpc_path = server[:rpc_path] || '/transmission/rpc' @login = login @timeout = options[:timeout] || 5 @log = TransmissionRSS::Log.instance end
Public Instance Methods
add_torrent(file, type, options = {})
click to toggle source
POST json packed torrent add command.
# File lib/transmission-rss/client.rb, line 24 def add_torrent(file, type, options = {}) hash = { 'method' => 'torrent-add', 'arguments' => { 'paused' => options[:paused], 'download-dir' => options[:download_path] } } case type when :url hash.arguments.filename = file when :file hash.arguments.metainfo = Base64.encode64(File.read(file)) else raise ArgumentError.new('type has to be :url or :file.') end sid = get_session_id raise Unauthorized unless sid post = Net::HTTP::Post.new \ @rpc_path, { 'Content-Type' => 'application/json', 'X-Transmission-Session-Id' => sid } auth(post) post.body = hash.to_json response = request(post) result = JSON.parse(response.body).result @log.debug('add_torrent result: ' + result) end
get_session_id()
click to toggle source
Get transmission session id.
# File lib/transmission-rss/client.rb, line 64 def get_session_id get = Net::HTTP::Get.new(@rpc_path) auth(get) response = request(get) id = response.header['x-transmission-session-id'] if id.nil? @log.debug("could not obtain session id (#{response.code}, " + "#{response.class})") else @log.debug('got session id ' + id) end id end
Private Instance Methods
auth(request)
click to toggle source
# File lib/transmission-rss/client.rb, line 85 def auth(request) unless @login.nil? request.basic_auth(@login['username'], @login['password']) end end
http_get(data)
click to toggle source
# File lib/transmission-rss/client.rb, line 112 def http_get(data) Net::HTTP.new(@host, @port).start do |http| http.request(data) end end
request(data)
click to toggle source
# File lib/transmission-rss/client.rb, line 91 def request(data) c ||= 0 Timeout.timeout(@timeout) do @log.debug("request #@host:#@port") http_get(data) end rescue Errno::ECONNREFUSED @log.debug('connection refused') raise rescue Timeout::Error s = 'connection timeout' s << " (retry #{c})" if c > 0 @log.debug(s) c += 1 retry unless c > 2 raise end