rtorrent_xmlrpc 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e970b5dddb523638d1ea5f441ae458ecae5922aa
4
+ data.tar.gz: 68b65a6be40657e357d2f12165b278a8a84a6750
5
+ SHA512:
6
+ metadata.gz: 3126a3f7e45654edafa139b673867e4b6413f955994597defc9269f14509a29c701a31b52cd6d8e954a74132111ee7ae8c449640c984e233a1c0a9057eea510f
7
+ data.tar.gz: c0fd3a6a085cf20e679faf37232a2a53a594dfff3d11639a4101f9f3bd86a352fffd0c148b01e80ddb844a9e725a5abda904a78d0ca05277b9dc2a3bc33195cd
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org/'
2
+
3
+ gem 'rake', '~> 10.4', '>= 10.4.2'
4
+
5
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,25 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rtorrent_xmlrpc (0.1)
5
+ colorize (~> 0.7, >= 0.7.7)
6
+ hashie (~> 3.4, >= 3.4.2)
7
+ thor (~> 0.19, >= 0.19.1)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ colorize (0.7.7)
13
+ hashie (3.4.2)
14
+ rake (10.4.2)
15
+ thor (0.19.1)
16
+
17
+ PLATFORMS
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ rake (~> 10.4, >= 10.4.2)
22
+ rtorrent_xmlrpc!
23
+
24
+ BUNDLED WITH
25
+ 1.10.5
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ task :default => [:build]
2
+ task :test => [:build, :install]
3
+
4
+ task :build do
5
+ system("gem build ./rtorrent_xmlrpc.gemspec")
6
+ end
7
+
8
+ task :install do
9
+ gem = Dir['*.gem'].last
10
+ system("sudo gem install #{gem}")
11
+ end
12
+
13
+ task :push do
14
+ gem = Dir['*.gem'].last
15
+ system("gem push #{gem}")
16
+ end
17
+
18
+ task :console do
19
+ exec "irb -I ./lib"
20
+ end
21
+
22
+ task :run do
23
+ ruby "-Ilib", 'bin/rtorrent_xmlrpc'
24
+ end
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'hashie'
4
+ require 'rtorrent_xmlrpc'
5
+ require 'thor'
6
+
7
+ class RTorrent_XMLRPC < Thor
8
+
9
+ def initialize(*args)
10
+ super
11
+ # Read in config file
12
+ config_file = nil
13
+ %W[rtorrent_xmlrpc.conf #{Dir.home}/.config/rtorrent_xmlrpc.conf #{Dir.home}/.rtorrent_xmlrpc.conf /etc/rtorrent_xmlrpc.conf].each do |f|
14
+ if File.exists?(f)
15
+ config_file = f
16
+ break
17
+ end
18
+ end
19
+ raise 'No config file found.' if config_file.nil?
20
+ config = Hashie::Mash.load(config_file)
21
+ # Connect to xmlrpc service
22
+ @xmlrpc = RTorrent::XMLRPC.new( host: config.host, port: config.port, path: config.path, user: config.user, password: config.password, use_ssl: config.use_ssl)
23
+ @xmlrpc.connect
24
+ @xmlrpc.fetch_torrents
25
+ end
26
+
27
+ no_tasks do
28
+ def print(torrents)
29
+ torrents.each { |torrent| torrent.pp }
30
+ end
31
+ end
32
+
33
+ desc "list", "Pretty print all the torrents on the server."
34
+ def list
35
+ self.print @xmlrpc.torrents
36
+ end
37
+
38
+ desc "start HASH", "Start torrent with HASH"
39
+ def start(hash)
40
+ @xmlrpc.start hash
41
+ end
42
+
43
+ desc "stop HASH", "Stop torrent with HASH"
44
+ def stop(hash)
45
+ @xmlrpc.stop hash
46
+ end
47
+
48
+ desc "pause HASH", "Pause torrent with HASH"
49
+ def pause(hash)
50
+ @xmlrpc.pause hash
51
+ end
52
+
53
+ desc "complete", "Print all torrents that are complete."
54
+ def complete
55
+ self.print @xmlrpc.completed
56
+ end
57
+
58
+ desc "incomplete", "Print all incomplete torrents."
59
+ def incomplete
60
+ self.print @xmlrpc.incomplete
61
+ end
62
+
63
+ desc "labeled LABEL", "Print all torrents with label"
64
+ def labeled(label)
65
+ self.print @xmlrpc.with_label label
66
+ end
67
+
68
+ end
69
+
70
+ RTorrent_XMLRPC.start(ARGV)
@@ -0,0 +1,139 @@
1
+ require 'colorize'
2
+ require 'hashie'
3
+ require 'xmlrpc/client'
4
+
5
+ module RTorrent
6
+
7
+ class Torrent
8
+ attr_accessor :hash, :name, :completed, :base_filename, :base_path, :is_multi_file, :tied_to_file
9
+ attr_reader :labels
10
+
11
+ def has_label(label)
12
+ @labels.include? label.to_s
13
+ end
14
+
15
+ def labels=(labels)
16
+ @labels = labels.split(',')
17
+ end
18
+
19
+ def to_h
20
+ {
21
+ hash: @hash,
22
+ name: @name,
23
+ labels: @labels,
24
+ completed: @completed,
25
+ base_filename: @base_filename,
26
+ base_path: @base_path,
27
+ is_multi_file: @is_multi_file,
28
+ tied_to_file: @tied_to_file,
29
+ }
30
+ end
31
+
32
+ def pp
33
+ 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
42
+ end
43
+ end
44
+
45
+ class XMLRPC
46
+ attr_accessor :host, :user, :password, :path
47
+ attr_reader :port, :use_ssl, :torrents
48
+
49
+ def initialize(host:, port: 80, user:, password:, path: '/xmlrpc', use_ssl: false)
50
+ self.host = host
51
+ self.port = port
52
+ self.user = user
53
+ self.password = password
54
+ self.path = path
55
+ self.use_ssl = use_ssl
56
+ @torrents = []
57
+ @status = :initialized
58
+ end
59
+
60
+ def port=(port)
61
+ fail unless port.is_a? Integer
62
+ @port = port
63
+ end
64
+
65
+ def use_ssl=(use_ssl)
66
+ fail unless use_ssl.is_a?(TrueClass) || use_ssl.is_a?(FalseClass)
67
+ @use_ssl = use_ssl
68
+ end
69
+
70
+ # Connect to rtorrent xmlrpc service
71
+ def connect
72
+ connection_options = {
73
+ host: @host,
74
+ port: @port,
75
+ user: @user,
76
+ password: @password,
77
+ path: @path,
78
+ use_ssl: @use_ssl,
79
+ }
80
+ @server = ::XMLRPC::Client.new3(connection_options)
81
+ @status = :connected
82
+ end
83
+
84
+ # Grab list of torrents from server
85
+ def fetch_torrents
86
+ self.connect unless @status == :connected
87
+ @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|
89
+ torrent = RTorrent::Torrent.new
90
+ torrent.hash = stats[0]
91
+ torrent.name = stats[1]
92
+ torrent.labels = stats[2]
93
+ torrent.completed = stats[3] == 1 ? true : false
94
+ torrent.base_filename = stats[4]
95
+ torrent.base_path = stats[5]
96
+ torrent.is_multi_file = stats[6] == 1 ? true: false
97
+ torrent.tied_to_file = stats[7]
98
+ @torrents << torrent
99
+ end
100
+ end
101
+
102
+ # Start a torrent
103
+ def start(hash)
104
+ @server.call('d.start', hash)
105
+ end
106
+
107
+ # Stop a torrent
108
+ def stop(hash)
109
+ @server.call('d.close', hash)
110
+ end
111
+
112
+ # Pause a torrent
113
+ def pause(hash)
114
+ @server.call('d.stop', hash)
115
+ end
116
+
117
+ # Get a list of completed torrents
118
+ def completed
119
+ result = []
120
+ @torrents.each { |torrent| result << torrent if torrent.completed }
121
+ return result
122
+ end
123
+
124
+ # Get a list of incomplete torrents
125
+ def incomplete
126
+ result = []
127
+ @torrents.each { |torrent| result << torrent unless torrent.completed }
128
+ return result
129
+ end
130
+
131
+ # Get a list of torrents with label
132
+ def with_label(label)
133
+ result = []
134
+ @torrents.each { |torrent| result << torrent if torrent.has_label(label) }
135
+ return result
136
+ end
137
+ end
138
+
139
+ end
@@ -0,0 +1,9 @@
1
+ ---
2
+ host: 'example.com'
3
+ port: 443
4
+ use_ssl: true
5
+ path: '/xmlrpc'
6
+ user: 'user'
7
+ password: 'P@$$w0rd'
8
+
9
+ # vim: filetype=yaml
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'rtorrent_xmlrpc'
3
+ s.version = '0.1'
4
+ s.date = '2015-07-02'
5
+ s.summary = 'A library and tool to query an rtorrent xmlrpc service.'
6
+ s.authors = ['Zan Loy']
7
+ s.email = 'zan.loy@gmail.com'
8
+ s.homepage = 'http://zanloy.com/ruby/rtorrent_xmlrpc/'
9
+ s.license = 'MIT'
10
+ s.files = `git ls-files`.split("\n") - %w[.gitignore]
11
+ s.executables = ['rtorrent_xmlrpc']
12
+
13
+ s.add_dependency 'colorize', '~> 0.7', '>= 0.7.7'
14
+ s.add_dependency 'hashie', '~> 3.4', '>= 3.4.2'
15
+ s.add_dependency 'thor', '~> 0.19', '>= 0.19.1'
16
+
17
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rtorrent_xmlrpc
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Zan Loy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.7.7
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.7.7
33
+ - !ruby/object:Gem::Dependency
34
+ name: hashie
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.4'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.4.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.4'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.4.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: thor
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.19'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.19.1
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.19'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.19.1
73
+ description:
74
+ email: zan.loy@gmail.com
75
+ executables:
76
+ - rtorrent_xmlrpc
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - Rakefile
83
+ - bin/rtorrent_xmlrpc
84
+ - lib/rtorrent_xmlrpc.rb
85
+ - rtorrent_xmlrpc.conf.sample
86
+ - rtorrent_xmlrpc.gemspec
87
+ homepage: http://zanloy.com/ruby/rtorrent_xmlrpc/
88
+ licenses:
89
+ - MIT
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.4.5
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: A library and tool to query an rtorrent xmlrpc service.
111
+ test_files: []