rtransmission 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +6 -4
- data/lib/rtransmission/client.rb +10 -3
- data/lib/rtransmission/fields/day.rb +29 -0
- data/lib/rtransmission/fields/encryption.rb +17 -0
- data/lib/rtransmission/fields/stats.rb +21 -0
- data/lib/rtransmission/fields/traffic_stats.rb +19 -0
- data/lib/rtransmission/fields.rb +4 -0
- data/lib/rtransmission/session.rb +127 -0
- data/lib/rtransmission/torrent.rb +18 -17
- data/lib/rtransmission/version.rb +1 -1
- data/lib/rtransmission.rb +2 -1
- metadata +6 -1
data/README.md
CHANGED
@@ -6,12 +6,14 @@ Ruby Transmission Bindings
|
|
6
6
|
Basic Usage
|
7
7
|
-----------
|
8
8
|
|
9
|
-
|
9
|
+
require 'rtransmission'
|
10
|
+
|
11
|
+
RTransmission::Client.session(:user => 'foo', :password => 'bar') do |session|
|
12
|
+
session.speed_limit_down_enabled = false
|
10
13
|
|
11
|
-
RTransmission::Client.new(:user => 'foo', :password => 'bar') do |client|
|
12
14
|
url = 'http://torrents.gentoo.org/torrents/livedvd-x86-amd64-32ul-11.1.torrent'
|
13
|
-
torrent = RTransmission::Torrent.add(
|
14
|
-
torrent = RTransmission::Torrent.list(
|
15
|
+
torrent = RTransmission::Torrent.add(session, :url => url)
|
16
|
+
torrent = RTransmission::Torrent.list(session)[0]
|
15
17
|
|
16
18
|
files = torrent.files
|
17
19
|
files.each { |f| puts f.name }
|
data/lib/rtransmission/client.rb
CHANGED
@@ -14,14 +14,21 @@ module RTransmission
|
|
14
14
|
|
15
15
|
attr_reader :session_id
|
16
16
|
|
17
|
-
def
|
17
|
+
def self.session(args = {}, &block)
|
18
|
+
client = RTransmission::Client.new(args)
|
19
|
+
session = RTransmission::Session.new(client)
|
20
|
+
|
21
|
+
block.call(session) if block
|
22
|
+
|
23
|
+
session
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(args = {})
|
18
27
|
@host = args[:host] || 'localhost'
|
19
28
|
@port = args[:port] || 9091
|
20
29
|
@path = args[:path] || '/transmission/rpc'
|
21
30
|
@user = args[:user] || nil
|
22
31
|
@password = args[:password] || nil
|
23
|
-
|
24
|
-
block.call(self) if block
|
25
32
|
end
|
26
33
|
|
27
34
|
def call(request)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Copyright (c) 2011, Andrew Kirilenko <andrew.kirilenko@gmail.com>
|
2
|
+
# All rights reserved.
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be found in the COPYING file.
|
4
|
+
|
5
|
+
module RTransmission
|
6
|
+
module Fields
|
7
|
+
class Day
|
8
|
+
MAP = {1 => :sunday, 2 => :monday, 4 => :tuesday, 8 => :wednesday, 16 => :thursday, 32 => :friday, 64 => :saturday}
|
9
|
+
|
10
|
+
def self.unmap(value)
|
11
|
+
result = []
|
12
|
+
MAP.each do |mask, day|
|
13
|
+
result << day if mask & value != 0
|
14
|
+
end
|
15
|
+
|
16
|
+
result
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.map(value)
|
20
|
+
result = 0
|
21
|
+
value.each do |day|
|
22
|
+
result += MAP.key(day)
|
23
|
+
end
|
24
|
+
|
25
|
+
result
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Copyright (c) 2011, Andrew Kirilenko <andrew.kirilenko@gmail.com>
|
2
|
+
# All rights reserved.
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be found in the COPYING file.
|
4
|
+
|
5
|
+
module RTransmission
|
6
|
+
module Fields
|
7
|
+
class Encryption
|
8
|
+
def self.unmap(value)
|
9
|
+
value.to_sym
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.map(value)
|
13
|
+
value.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Copyright (c) 2011, Andrew Kirilenko <andrew.kirilenko@gmail.com>
|
2
|
+
# All rights reserved.
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be found in the COPYING file.
|
4
|
+
|
5
|
+
module RTransmission
|
6
|
+
module Fields
|
7
|
+
class Stats < RTransmission::Field
|
8
|
+
define_attribute :active_torrent_count, 'activeTorrentCount'
|
9
|
+
define_attribute :download_speed, 'downloadSpeed'
|
10
|
+
define_attribute :paused_torrent_count, 'pausedTorrentCount'
|
11
|
+
define_attribute :torrent_count, 'torrentCount'
|
12
|
+
define_attribute :upload_speed, 'uploadSpeed'
|
13
|
+
define_attribute :cumulative_stats, 'cumulative-stats', :type => RTransmission::Fields::TrafficStats
|
14
|
+
define_attribute :current_stats, 'current-stats', :type => RTransmission::Fields::TrafficStats
|
15
|
+
|
16
|
+
def self.unmap(value)
|
17
|
+
RTransmission::Fields::Stats.new(value)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright (c) 2011, Andrew Kirilenko <andrew.kirilenko@gmail.com>
|
2
|
+
# All rights reserved.
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be found in the COPYING file.
|
4
|
+
|
5
|
+
module RTransmission
|
6
|
+
module Fields
|
7
|
+
class TrafficStats < RTransmission::Field
|
8
|
+
define_attribute :uploaded_bytes, 'uploadedBytes'
|
9
|
+
define_attribute :downloaded_bytes, 'downloadedBytes'
|
10
|
+
define_attribute :files_added, 'filesAdded'
|
11
|
+
define_attribute :session_count, 'sessionCount'
|
12
|
+
define_attribute :seconds_active, 'secondsActive'
|
13
|
+
|
14
|
+
def self.unmap(value)
|
15
|
+
RTransmission::Fields::TrafficStats.new(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/rtransmission/fields.rb
CHANGED
@@ -17,3 +17,7 @@ require 'rtransmission/fields/seed_ratio_mode'
|
|
17
17
|
require 'rtransmission/fields/status'
|
18
18
|
require 'rtransmission/fields/tracker'
|
19
19
|
require 'rtransmission/fields/tracker_stat'
|
20
|
+
require 'rtransmission/fields/day'
|
21
|
+
require 'rtransmission/fields/encryption'
|
22
|
+
require 'rtransmission/fields/traffic_stats'
|
23
|
+
require 'rtransmission/fields/stats'
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# Copyright (c) 2011, Andrew Kirilenko <andrew.kirilenko@gmail.com>
|
2
|
+
# All rights reserved.
|
3
|
+
# Use of this source code is governed by a BSD-style license that can be found in the COPYING file.
|
4
|
+
|
5
|
+
module RTransmission
|
6
|
+
class Session
|
7
|
+
attr_reader :client
|
8
|
+
|
9
|
+
def self.define_field(name, rpc_name, args = {})
|
10
|
+
self.send :define_method, name.to_s do
|
11
|
+
request = RTransmission::Request.new('session-get', {}, 'Session.' + name.to_s) do |arguments|
|
12
|
+
result = arguments[rpc_name]
|
13
|
+
if args[:type]
|
14
|
+
type = args[:type]
|
15
|
+
if type.class == Array
|
16
|
+
type = type[0]
|
17
|
+
result.map! { |r| type.unmap(r) }
|
18
|
+
else
|
19
|
+
result = type.unmap(result)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
result
|
24
|
+
end
|
25
|
+
|
26
|
+
@client.call(request)
|
27
|
+
end
|
28
|
+
|
29
|
+
if args[:writeable] == true
|
30
|
+
self.send :define_method, name.to_s.gsub('?', '') + '=' do |value|
|
31
|
+
rpc_value = value
|
32
|
+
if args[:type]
|
33
|
+
type = args[:type]
|
34
|
+
if type.class == Array
|
35
|
+
type = type[0]
|
36
|
+
rpc_value.map! { |r| type.map(r) }
|
37
|
+
else
|
38
|
+
rpc_value = type.map(rpc_value)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
request = RTransmission::Request.new('session-set', {rpc_name => rpc_value}, 'Session.' + name.to_s + '=') do
|
43
|
+
value
|
44
|
+
end
|
45
|
+
|
46
|
+
@client.call(request)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
define_field :alt_speed_down, 'alt-speed-down', :writeable => true
|
52
|
+
define_field :alt_speed_enabled?, 'alt-speed-enabled', :writeable => true
|
53
|
+
define_field :alt_speed_time_begin, 'alt-speed-time-begin', :writeable => true
|
54
|
+
define_field :alt_speed_time_enabled?, 'alt-speed-time-enabled', :writeable => true
|
55
|
+
define_field :alt_speed_time_end, 'alt-speed-time-end', :writeable => true
|
56
|
+
define_field :alt_speed_time_day, 'alt-speed-time-day', :type => RTransmission::Fields::Day, :writeable => true
|
57
|
+
define_field :alt_speed_up, 'alt-speed-up', :writeable => true
|
58
|
+
define_field :blocklist_url, 'blocklist-url', :writeable => true
|
59
|
+
define_field :blocklist_enabled?, 'blocklist-enabled', :writeable => true
|
60
|
+
define_field :blocklist_size, 'blocklist-size'
|
61
|
+
define_field :cache_size_mb, 'cache-size-mb', :writeable => true
|
62
|
+
define_field :config_dir, 'config-dir'
|
63
|
+
define_field :download_dir, 'download-dir', :writeable => true
|
64
|
+
define_field :download_dir_free_space, 'download-dir-free-space'
|
65
|
+
define_field :dht_enabled?, 'dht-enabled', :writeable => true
|
66
|
+
define_field :encryption, 'encryption', :type => RTransmission::Fields::Encryption, :writeable => true
|
67
|
+
define_field :idle_seeding_limit, 'idle-seeding-limit', :writeable => true
|
68
|
+
define_field :idle_seeding_limit_enabled?, 'idle-seeding-limit-enabled', :writeable => true
|
69
|
+
define_field :incomplete_dir, 'incomplete-dir', :writeable => true
|
70
|
+
define_field :incomplete_dir_enabled?, 'incomplete-dir-enabled', :writeable => true
|
71
|
+
define_field :lpd_enabled?, 'lpd-enabled', :writeable => true
|
72
|
+
define_field :peer_limit_global, 'peer-limit-global', :writeable => true
|
73
|
+
define_field :peer_limit_per_torrent, 'peer-limit-per-torrent', :writeable => true
|
74
|
+
define_field :pex_enabled?, 'pex-enabled', :writeable => true
|
75
|
+
define_field :peer_port, 'peer-port', :writeable => true
|
76
|
+
define_field :peer_port_random_on_start?, 'peer-port-random-on-start', :writeable => true
|
77
|
+
define_field :port_forwarding_enabled?, 'port-forwarding-enabled', :writeable => true
|
78
|
+
define_field :rename_partial_files?, 'rename-partial-files', :writeable => true
|
79
|
+
define_field :rpc_version, 'rpc-version'
|
80
|
+
define_field :rpc_version_minimum, 'rpc-version-minimum'
|
81
|
+
define_field :script_torrent_done_filename, 'script-torrent-done-filename', :writeable => true
|
82
|
+
define_field :script_torrent_done_enabled?, 'script-torrent-done-enabled', :writeable => true
|
83
|
+
define_field :seed_ratio_limit, 'seedRatioLimit', :type => RTransmission::Fields::Percent, :writeable => true
|
84
|
+
define_field :seed_ratio_limited?, 'seedRatioLimited', :writeable => true
|
85
|
+
define_field :speed_limit_down, 'speed-limit-down', :writeable => true
|
86
|
+
define_field :speed_limit_down_enabled?, 'speed-limit-down-enabled', :writeable => true
|
87
|
+
define_field :speed_limit_up, 'speed-limit-up', :writeable => true
|
88
|
+
define_field :speed_limit_up_enabled?, 'speed-limit-up-enabled', :writeable => true
|
89
|
+
define_field :start_added_torrents?, 'start-added-torrents', :writeable => true
|
90
|
+
define_field :trash_original_torrent_files?, 'trash-original-torrent-files', :writeable => true
|
91
|
+
define_field :units, 'units' # FIXME: add type and writeable
|
92
|
+
define_field :utp_enabled?, 'utp-enabled', :writeable => true
|
93
|
+
define_field :version, 'version'
|
94
|
+
|
95
|
+
def initialize(client)
|
96
|
+
@client = client
|
97
|
+
end
|
98
|
+
|
99
|
+
def stats
|
100
|
+
request = RTransmission::Request.new('session-stats', {}, 'Session.stats') do |arguments|
|
101
|
+
RTransmission::Fields::Stats.unmap(arguments)
|
102
|
+
end
|
103
|
+
|
104
|
+
@client.call(request)
|
105
|
+
end
|
106
|
+
|
107
|
+
def blocklist_update
|
108
|
+
request = RTransmission::Request.new('blocklist-update', {}, 'Session.blocklist_update') do |arguments|
|
109
|
+
arguments['blocklist-size']
|
110
|
+
end
|
111
|
+
|
112
|
+
@client.call(request)
|
113
|
+
end
|
114
|
+
|
115
|
+
def port_test
|
116
|
+
request = RTransmission::Request.new('port-test', {}, 'Session.port_test') do |arguments|
|
117
|
+
arguments['port-is-open']
|
118
|
+
end
|
119
|
+
|
120
|
+
@client.call(request)
|
121
|
+
end
|
122
|
+
|
123
|
+
def shutdown
|
124
|
+
@client.call(RTransmission::Request.new('session-close', {}, 'Session.shutdown'))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -6,11 +6,12 @@ require 'base64'
|
|
6
6
|
|
7
7
|
# FIXME: files-wanted/unwanted & prioriry-high/low/normal for both add and new torrents
|
8
8
|
# FIXME: add/remove/replace trackers
|
9
|
+
# FIXME: location set support
|
9
10
|
module RTransmission
|
10
11
|
class Torrent
|
11
12
|
attr_reader :id
|
12
13
|
|
13
|
-
def self.add(
|
14
|
+
def self.add(session, args = {})
|
14
15
|
pargs = {}
|
15
16
|
|
16
17
|
raise RTransmission::Exception.new('Torrent#add: only one of remote_file, url, or torrent must be specified') if (args.keys & [:remote_file, :url, :torrent]).count != 1
|
@@ -22,26 +23,26 @@ module RTransmission
|
|
22
23
|
pargs['download-dir'] = args[:download_dir] if args[:download_dir]
|
23
24
|
pargs['paused'] = args[:paused] if args[:paused]
|
24
25
|
pargs['peer-limit'] = args[:peer_limit] if args[:peer_limit]
|
25
|
-
pargs['
|
26
|
+
pargs['bandwidthPriority'] = RTransmission::Fields::Priority.map(args[:bandwidth_priority]) if args[:bandwidth_priority]
|
26
27
|
|
27
28
|
request = RTransmission::Request.new('torrent-add', pargs, 'Torrent#add') do |arguments|
|
28
|
-
RTransmission::Torrent.new(
|
29
|
+
RTransmission::Torrent.new(session, arguments['torrent-added']['id'])
|
29
30
|
end
|
30
31
|
|
31
|
-
client.call(request)
|
32
|
+
session.client.call(request)
|
32
33
|
end
|
33
34
|
|
34
|
-
def self.list(
|
35
|
+
def self.list(session)
|
35
36
|
request = RTransmission::Request.new('torrent-get', {'fields' => ['id']}, 'Torrent#list') do |arguments|
|
36
37
|
torrents = []
|
37
38
|
arguments['torrents'].each do |torrent|
|
38
|
-
torrents << RTransmission::Torrent.new(
|
39
|
+
torrents << RTransmission::Torrent.new(session, torrent['id'])
|
39
40
|
end
|
40
41
|
|
41
42
|
torrents
|
42
43
|
end
|
43
44
|
|
44
|
-
client.call(request)
|
45
|
+
session.client.call(request)
|
45
46
|
end
|
46
47
|
|
47
48
|
def self.define_field(name, rpc_name, args = {})
|
@@ -61,7 +62,7 @@ module RTransmission
|
|
61
62
|
result
|
62
63
|
end
|
63
64
|
|
64
|
-
@client.call(request)
|
65
|
+
@session.client.call(request)
|
65
66
|
end
|
66
67
|
|
67
68
|
if args[:writeable] == true
|
@@ -81,7 +82,7 @@ module RTransmission
|
|
81
82
|
value
|
82
83
|
end
|
83
84
|
|
84
|
-
@client.call(request)
|
85
|
+
@session.client.call(request)
|
85
86
|
end
|
86
87
|
end
|
87
88
|
end
|
@@ -151,25 +152,25 @@ module RTransmission
|
|
151
152
|
define_field :webseeds, 'webseeds' # FIXME: add type
|
152
153
|
define_field :webseeds_sending_to_us, 'webseedsSendingToUs'
|
153
154
|
|
154
|
-
def initialize(
|
155
|
-
@
|
155
|
+
def initialize(session, id)
|
156
|
+
@session = session
|
156
157
|
@id = id
|
157
158
|
end
|
158
159
|
|
159
160
|
def start
|
160
|
-
@client.call(RTransmission::Request.new('torrent-start', {'ids' => @id}, 'Torrent.start'))
|
161
|
+
@session.client.call(RTransmission::Request.new('torrent-start', {'ids' => @id}, 'Torrent.start'))
|
161
162
|
end
|
162
163
|
|
163
164
|
def stop
|
164
|
-
@client.call(RTransmission::Request.new('torrent-stop', {'ids' => @id}, 'Torrent.stop'))
|
165
|
+
@session.client.call(RTransmission::Request.new('torrent-stop', {'ids' => @id}, 'Torrent.stop'))
|
165
166
|
end
|
166
167
|
|
167
168
|
def verify
|
168
|
-
@client.call(RTransmission::Request.new('torrent-verify', {'ids' => @id}, 'Torrent.verify'))
|
169
|
+
@session.client.call(RTransmission::Request.new('torrent-verify', {'ids' => @id}, 'Torrent.verify'))
|
169
170
|
end
|
170
171
|
|
171
172
|
def reannounce
|
172
|
-
@client.call(RTransmission::Request.new('torrent-reannounce', {'ids' => @id}, 'Torrent.reannounce'))
|
173
|
+
@session.client.call(RTransmission::Request.new('torrent-reannounce', {'ids' => @id}, 'Torrent.reannounce'))
|
173
174
|
end
|
174
175
|
|
175
176
|
def remove(args = {})
|
@@ -177,7 +178,7 @@ module RTransmission
|
|
177
178
|
|
178
179
|
pargs['delete-local-data'] = args[:delete_local_data] if args[:delete_local_data]
|
179
180
|
|
180
|
-
@client.call(RTransmission::Request.new('torrent-remove', {'ids' => @id}.merge(pargs), 'Torrent.remove'))
|
181
|
+
@session.client.call(RTransmission::Request.new('torrent-remove', {'ids' => @id}.merge(pargs), 'Torrent.remove'))
|
181
182
|
end
|
182
183
|
|
183
184
|
def move(args = {})
|
@@ -186,7 +187,7 @@ module RTransmission
|
|
186
187
|
pargs['location'] = args[:location] if args[:location]
|
187
188
|
pargs['move'] = args[:move] if args[:move]
|
188
189
|
|
189
|
-
@client.call(RTransmission::Request.new('torrent-set-location', {'ids' => @id}.merge(pargs), 'Torrent.move'))
|
190
|
+
@session.client.call(RTransmission::Request.new('torrent-set-location', {'ids' => @id}.merge(pargs), 'Torrent.move'))
|
190
191
|
end
|
191
192
|
end
|
192
193
|
end
|
data/lib/rtransmission.rb
CHANGED
@@ -4,9 +4,10 @@
|
|
4
4
|
|
5
5
|
require 'rtransmission/version'
|
6
6
|
require 'rtransmission/exception'
|
7
|
-
require 'rtransmission/client'
|
8
7
|
require 'rtransmission/request'
|
9
8
|
require 'rtransmission/response'
|
10
9
|
require 'rtransmission/field'
|
11
10
|
require 'rtransmission/fields'
|
11
|
+
require 'rtransmission/session'
|
12
12
|
require 'rtransmission/torrent'
|
13
|
+
require 'rtransmission/client'
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rtransmission
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: "0.
|
5
|
+
version: "0.2"
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andrew Kirilenko
|
@@ -28,6 +28,7 @@ files:
|
|
28
28
|
- rtransmission.gemspec
|
29
29
|
- lib/rtransmission/fields.rb
|
30
30
|
- lib/rtransmission/client.rb
|
31
|
+
- lib/rtransmission/session.rb
|
31
32
|
- lib/rtransmission/version.rb
|
32
33
|
- lib/rtransmission/torrent.rb
|
33
34
|
- lib/rtransmission/response.rb
|
@@ -36,8 +37,10 @@ files:
|
|
36
37
|
- lib/rtransmission/fields/eta.rb
|
37
38
|
- lib/rtransmission/fields/time.rb
|
38
39
|
- lib/rtransmission/fields/tracker_stat.rb
|
40
|
+
- lib/rtransmission/fields/encryption.rb
|
39
41
|
- lib/rtransmission/fields/error.rb
|
40
42
|
- lib/rtransmission/fields/tracker.rb
|
43
|
+
- lib/rtransmission/fields/stats.rb
|
41
44
|
- lib/rtransmission/fields/peers_from.rb
|
42
45
|
- lib/rtransmission/fields/file_stat.rb
|
43
46
|
- lib/rtransmission/fields/percent.rb
|
@@ -47,7 +50,9 @@ files:
|
|
47
50
|
- lib/rtransmission/fields/seed_ratio_mode.rb
|
48
51
|
- lib/rtransmission/fields/peer.rb
|
49
52
|
- lib/rtransmission/fields/priority.rb
|
53
|
+
- lib/rtransmission/fields/traffic_stats.rb
|
50
54
|
- lib/rtransmission/fields/seed_idle_mode.rb
|
55
|
+
- lib/rtransmission/fields/day.rb
|
51
56
|
- lib/rtransmission/field.rb
|
52
57
|
- lib/rtransmission.rb
|
53
58
|
has_rdoc: true
|