rtorrent_xmlrpc 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e970b5dddb523638d1ea5f441ae458ecae5922aa
4
- data.tar.gz: 68b65a6be40657e357d2f12165b278a8a84a6750
3
+ metadata.gz: aec5bd8704d971c6eed048549bcb34ab77c1f203
4
+ data.tar.gz: dcb43f75567b59bb2d7527765f8466e2e19d7553
5
5
  SHA512:
6
- metadata.gz: 3126a3f7e45654edafa139b673867e4b6413f955994597defc9269f14509a29c701a31b52cd6d8e954a74132111ee7ae8c449640c984e233a1c0a9057eea510f
7
- data.tar.gz: c0fd3a6a085cf20e679faf37232a2a53a594dfff3d11639a4101f9f3bd86a352fffd0c148b01e80ddb844a9e725a5abda904a78d0ca05277b9dc2a3bc33195cd
6
+ metadata.gz: 774572a3be0c2293acb2bf20808ebef6260f120905e1e36816b6bfa7cfe674c61274a806378af820984fa8912c8f80b809bdc4600b31f72ef29f9040f6ccc5fb
7
+ data.tar.gz: df05f889605f03f46efa6b4c739c2dd78c3cca46cbc55aa50bb570c2218897fc7c41be5db6cb5690c567a9940667d9303f467d1ca016555a7cb682bb52d3d23c
data/Gemfile.lock CHANGED
@@ -3,6 +3,7 @@ PATH
3
3
  specs:
4
4
  rtorrent_xmlrpc (0.1)
5
5
  colorize (~> 0.7, >= 0.7.7)
6
+ filesize (~> 0.1, >= 0.1.0)
6
7
  hashie (~> 3.4, >= 3.4.2)
7
8
  thor (~> 0.19, >= 0.19.1)
8
9
 
@@ -10,6 +11,7 @@ GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
13
  colorize (0.7.7)
14
+ filesize (0.1.0)
13
15
  hashie (3.4.2)
14
16
  rake (10.4.2)
15
17
  thor (0.19.1)
@@ -1,45 +1,117 @@
1
1
  require 'colorize'
2
+ require 'filesize'
2
3
  require 'hashie'
3
4
  require 'xmlrpc/client'
4
5
 
5
6
  module RTorrent
6
7
 
7
8
  class Torrent
9
+
10
+ # Attributes
8
11
  attr_accessor :hash, :name, :completed, :base_filename, :base_path, :is_multi_file, :tied_to_file
9
- attr_reader :labels
12
+ attr_reader :down_total, :labels, :priority, :ratio, :size, :up_total
10
13
 
11
- def has_label(label)
12
- @labels.include? label.to_s
14
+ def down_total=(down_total) # :nodoc:
15
+ @down_total = Filesize.new(down_total)
13
16
  end
14
17
 
15
- def labels=(labels)
18
+ def labels=(labels) # :nodoc:
16
19
  @labels = labels.split(',')
20
+ @labels.map! { |label| label.chomp }
21
+ end
22
+
23
+ def labels_str
24
+ @labels.join(', ')
25
+ end
26
+
27
+ def priority=(priority) # :nodoc:
28
+ begin
29
+ @priority = priority.to_i
30
+ rescue
31
+ @priority = 2
32
+ end
33
+ end
34
+
35
+ # Return priority converted to a human readable string
36
+ def priority_str
37
+ case @priority
38
+ when 0
39
+ "Off"
40
+ when 1
41
+ "Low"
42
+ when 2
43
+ "Normal"
44
+ when 3
45
+ "High"
46
+ else
47
+ "Unknown"
48
+ end
49
+ end
50
+
51
+ def ratio=(ratio) # :nodoc:
52
+ begin
53
+ @ratio = ratio.to_f
54
+ rescue
55
+ @ratio = 0.0
56
+ end
57
+ end
58
+
59
+ def size=(size) # :nodoc:
60
+ @size = Filesize.new(size)
61
+ end
62
+
63
+ def up_total=(up_total) # :nodoc:
64
+ @up_total = Filesize.new(up_total)
17
65
  end
18
66
 
67
+ # Return hash of all values in Torrent
19
68
  def to_h
20
69
  {
21
- hash: @hash,
22
- name: @name,
23
- labels: @labels,
24
- completed: @completed,
25
70
  base_filename: @base_filename,
26
71
  base_path: @base_path,
72
+ completed: @completed,
73
+ hash: @hash,
27
74
  is_multi_file: @is_multi_file,
75
+ labels: @labels,
76
+ name: @name,
77
+ priority: @priority,
78
+ ratio: @ratio,
79
+ size: @size,
28
80
  tied_to_file: @tied_to_file,
29
81
  }
30
82
  end
31
83
 
84
+ # Single line header
85
+ def self.header
86
+ "hash : name : size : down : up : ratio : labels"
87
+ end
88
+
89
+ # All torrent data in a single string for output to screen
90
+ def to_s
91
+ "#{self.hash} : #{self.name} : #{self.size.pretty} : #{self.down_total.pretty} : #{self.up_total.pretty} : #{self.ratio} : #{self.labels_str}"
92
+ end
93
+
94
+ # All torrent data dumped to screen in color
32
95
  def pp
33
96
  puts "-------------- ".red
34
- puts " hash: ".blue + @hash.green
35
- puts " name: ".blue + @name.green
36
- puts " labels: ".blue + @labels.join(', ').green
37
- puts " completed: ".blue + @completed.to_s.green
38
- puts "base_filename: ".blue + @base_filename.green
39
- puts " base_path: ".blue + @base_path.green
40
- puts "is_multi_file: ".blue + @is_multi_file.to_s.green
41
- puts " tied_to_file: ".blue + @tied_to_file.green
97
+ puts " hash: ".blue + self.hash.green
98
+ puts " name: ".blue + self.name.green
99
+ puts " size: ".blue + self.size.pretty.green
100
+ puts " downloaded: ".blue + self.down_total.pretty.green
101
+ puts " uploaded: ".blue + self.up_total.pretty.green
102
+ puts " ratio: ".blue + self.ratio.to_s.green
103
+ puts " priority: ".blue + self.priority_str.green
104
+ puts " labels: ".blue + self.labels_str.green
105
+ puts " completed: ".blue + self.completed.to_s.green
106
+ end
107
+
108
+ # FILTERS
109
+
110
+ # Test if torrent has a specific label
111
+ def has_label?(label)
112
+ @labels.include? label.to_s
42
113
  end
114
+
43
115
  end
44
116
 
45
117
  class XMLRPC
@@ -85,7 +157,25 @@ module RTorrent
85
157
  def fetch_torrents
86
158
  self.connect unless @status == :connected
87
159
  @torrents = []
88
- @server.call('d.multicall', 'main', 'd.hash=', 'd.name=', 'd.custom1=', 'd.complete=', 'd.base_filename=', 'd.base_path=', 'd.is_multi_file=', 'd.tied_to_file=').each do |stats|
160
+ args = [
161
+ 'd.multicall',
162
+ 'main',
163
+ 'd.hash=',
164
+ 'd.name=',
165
+ 'd.custom1=',
166
+ 'd.complete=',
167
+ 'd.base_filename=',
168
+ 'd.base_path=',
169
+ 'd.is_multi_file=',
170
+ 'd.tied_to_file=',
171
+ 'd.get_size_bytes=',
172
+ 'd.get_down_total=',
173
+ 'd.get_up_total=',
174
+ 'd.get_ratio=',
175
+ 'd.get_priority=',
176
+ ]
177
+ #@server.call('d.multicall', 'main', 'd.hash=', 'd.name=', 'd.custom1=', 'd.complete=', 'd.base_filename=', 'd.base_path=', 'd.is_multi_file=', 'd.tied_to_file=', 'd.get_size').each do |stats|
178
+ @server.call(*args).each do |stats|
89
179
  torrent = RTorrent::Torrent.new
90
180
  torrent.hash = stats[0]
91
181
  torrent.name = stats[1]
@@ -95,6 +185,11 @@ module RTorrent
95
185
  torrent.base_path = stats[5]
96
186
  torrent.is_multi_file = stats[6] == 1 ? true: false
97
187
  torrent.tied_to_file = stats[7]
188
+ torrent.size = stats[8]
189
+ torrent.down_total = stats[9]
190
+ torrent.up_total = stats[10]
191
+ torrent.ratio = stats[11].to_f / 1000
192
+ torrent.priority = stats[12]
98
193
  @torrents << torrent
99
194
  end
100
195
  end
@@ -131,7 +226,7 @@ module RTorrent
131
226
  # Get a list of torrents with label
132
227
  def with_label(label)
133
228
  result = []
134
- @torrents.each { |torrent| result << torrent if torrent.has_label(label) }
229
+ @torrents.each { |torrent| result << torrent if torrent.has_label? label }
135
230
  return result
136
231
  end
137
232
  end
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rtorrent_xmlrpc'
3
- s.version = '0.1'
4
- s.date = '2015-07-02'
3
+ s.version = '0.1.1'
4
+ s.date = '2015-07-03'
5
5
  s.summary = 'A library and tool to query an rtorrent xmlrpc service.'
6
6
  s.authors = ['Zan Loy']
7
7
  s.email = 'zan.loy@gmail.com'
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.add_dependency 'colorize', '~> 0.7', '>= 0.7.7'
14
14
  s.add_dependency 'hashie', '~> 3.4', '>= 3.4.2'
15
+ s.add_dependency 'filesize', '~> 0.1', '>= 0.1.0'
15
16
  s.add_dependency 'thor', '~> 0.19', '>= 0.19.1'
16
17
 
17
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rtorrent_xmlrpc
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zan Loy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-02 00:00:00.000000000 Z
11
+ date: 2015-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -50,6 +50,26 @@ dependencies:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 3.4.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: filesize
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.1'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.1.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.1'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.1.0
53
73
  - !ruby/object:Gem::Dependency
54
74
  name: thor
55
75
  requirement: !ruby/object:Gem::Requirement