class Transmission::Client

Constants

CHECK
CHECK_WAIT
DOWNLOAD
SEED
SESSION_STAT_ARGS
STATUS
STOPPED
TORRENT_ARGS

Public Class Methods

new(host = '127.0.0.1', port = 9091, username = nil, password = nil) click to toggle source
# File lib/transmission-connect/client.rb, line 20
def initialize(host = '127.0.0.1', port = 9091, username = nil, password = nil)
  @header = username.nil? ? {} : {'Authorization' => Base64.encode64("#{username}:#{password}")}
  @uri = URI.parse("http://#{host}:#{port}/#{RPC_PATH}")
  new_connection
end

Public Instance Methods

add_bt_magnet(hash) click to toggle source
# File lib/transmission-connect/client.rb, line 34
def add_bt_magnet(hash)
  hash = "magnet:?xt=urn:btih:#{hash}"
  request('torrent-add', {:filename => hash})
end
get_info(hash = nil) click to toggle source
# File lib/transmission-connect/client.rb, line 51
def get_info(hash = nil)
  args = hash.nil? ? {} : {:ids => hash.to_a}
  args = {:fields => TORRENT_ARGS}.merge(args)
  request('torrent-get', args)
end
new_connection() click to toggle source
# File lib/transmission-connect/client.rb, line 26
def new_connection
  @connection = Net::HTTP.start(@uri.host, @uri.port)
end
pause_magnet(hash) click to toggle source
# File lib/transmission-connect/client.rb, line 43
def pause_magnet(hash)
  request('torrent-stop', {:ids => hash.to_a})
end
rem_bt_magnet(hash) click to toggle source
# File lib/transmission-connect/client.rb, line 39
def rem_bt_magnet(hash)
  request('torrent-remove', {:ids => hash.to_a, 'delete-local-data' => true})
end
session_stats(args = {}) click to toggle source
# File lib/transmission-connect/client.rb, line 30
def session_stats(args = {})
  request('session-stats', args)
end
unpause_magnet(hash) click to toggle source
# File lib/transmission-connect/client.rb, line 47
def unpause_magnet(hash)
  request('torrent-start', {:ids => hash.to_a})
end

Private Instance Methods

build_json(method,attributes = {}) click to toggle source
# File lib/transmission-connect/client.rb, line 79
def build_json(method,attributes = {})
  if attributes.length == 0
    {'method' => method}.to_json
  else
    {'method' => method, 'arguments' => attributes }.to_json
  end
end
request(method, args) click to toggle source
# File lib/transmission-connect/client.rb, line 58
def request(method, args)
  post_data = build_json method, args
  begin
    result = @connection.post2(@uri.path, post_data, @header)
  rescue
    new_connection
    return request method, args
  end
  case result
    when Net::HTTPSuccess
      JSON.parse(result.read_body)['arguments']
    when Net::HTTPConflict
      @header = @header.merge("x-transmission-session-id" => result.header["x-transmission-session-id"])
      request(method, args)
    when Net::HTTPBadResponse
      request(method, args)
    else
      raise Exception
  end
end