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 CHANGED
@@ -6,12 +6,14 @@ Ruby Transmission Bindings
6
6
  Basic Usage
7
7
  -----------
8
8
 
9
- requre 'rtransmission'
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(client, :url => url)
14
- torrent = RTransmission::Torrent.list(client)[0]
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 }
@@ -14,14 +14,21 @@ module RTransmission
14
14
 
15
15
  attr_reader :session_id
16
16
 
17
- def initialize(args = {}, &block)
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
@@ -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(client, args = {})
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['bandwithPriority'] = args[:bandwith_priority] if args[:bandwith_priority] # FIXME: use field here
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(client, arguments['torrent-added']['id'])
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(client)
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(client, torrent['id'])
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(client, id)
155
- @client = client
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
@@ -5,7 +5,7 @@
5
5
  module RTransmission
6
6
  module VERSION
7
7
  MAJOR = 0
8
- MINOR = 1
8
+ MINOR = 2
9
9
 
10
10
  STRING = [MAJOR, MINOR].join('.')
11
11
  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.1"
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