transmission-connect 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ source "http://rubygems.org"
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
6
  gem 'json'
7
+ gem 'transmission-client', '>=0.0.3', :git => "git://github.com/Daem0n/transmission-client.git"
7
8
 
8
9
  # Add dependencies to develop your gem here.
9
10
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -1,6 +1,20 @@
1
+ GIT
2
+ remote: git://github.com/Daem0n/transmission-client.git
3
+ revision: b0ec8d4e14c212eb833746b430522487547ae91c
4
+ specs:
5
+ transmission-client (0.0.3)
6
+ em-http-request
7
+
1
8
  GEM
2
9
  remote: http://rubygems.org/
3
10
  specs:
11
+ addressable (2.2.5)
12
+ em-http-request (0.3.0)
13
+ addressable (>= 2.0.0)
14
+ escape_utils
15
+ eventmachine (>= 0.12.9)
16
+ escape_utils (0.2.3)
17
+ eventmachine (0.12.10)
4
18
  git (1.2.5)
5
19
  jeweler (1.5.2)
6
20
  bundler (~> 1.0.0)
@@ -20,3 +34,4 @@ DEPENDENCIES
20
34
  json
21
35
  rcov
22
36
  shoulda
37
+ transmission-client (>= 0.0.3)!
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'yaml'
5
+ require 'transmission-client'
6
+ require '../lib/transmission-connect'
7
+
8
+ CONFIG = "../config/transmission.yml"
9
+ result = []
10
+
11
+ while true
12
+ begin
13
+ EventMachine.run do
14
+ transmission = Configuration.new(YAML.load_file(CONFIG))
15
+ transmission.each do |client|
16
+ EM.add_periodic_timer(client.interval) do
17
+ client.report
18
+ end
19
+ end
20
+ EM.add_periodic_timer(2) do
21
+ transmission.each do |client|
22
+ client.session_stats
23
+ end
24
+ end
25
+ end
26
+ rescue
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ ---
2
+ - :host: 127.0.0.1
3
+ :port: 9091
4
+ :down: true
@@ -0,0 +1,83 @@
1
+ class Configuration
2
+ include Enumerable
3
+
4
+ ## def initialize(args)
5
+ ## args - array of hashes:
6
+ # args = [
7
+ # {
8
+ # :host => '127.0.0.1',
9
+ # :port => 9091,
10
+ # :down => true
11
+ # },
12
+ # {
13
+ # :host => '127.0.0.1',
14
+ # :port => 9092,
15
+ # :up => true
16
+ # },
17
+ # {
18
+ # :host => '192.168.100.199',
19
+ # :port => 9091,
20
+ # :username => 'username',
21
+ # :password => 'password',
22
+ # :down => true,
23
+ # :up => true
24
+ # }
25
+ # ]
26
+ def initialize(args = [])
27
+ @clients = []
28
+ @downs = []
29
+ @ups = []
30
+ args.each do |arg|
31
+ client = Client.new(arg)
32
+ @clients << client
33
+ @downs << client if arg.key?(:down) && arg[:down]
34
+ @ups << client if arg.key?(:up) && arg[:up]
35
+ end
36
+ end
37
+
38
+ def each
39
+ @clients.each{|i| yield i}
40
+ end
41
+
42
+ def each_ups
43
+ @ups.each{|i| yield i}
44
+ end
45
+
46
+ def each_downs
47
+ @downs.each{|i| yield i}
48
+ end
49
+
50
+ class Client
51
+ FIELDS = ['downloadDir', 'error', 'errorString', 'eta', 'hashString', 'id', 'name', 'peersConnected', 'peersKnown', 'peersSendingToUs', 'percentDone', 'rateDownload', 'rateUpload', 'recheckProgress', 'startDate', 'status', 'totalSize', 'torrentFile']
52
+ attr_reader :interval
53
+ def initialize(args)
54
+ @host = args.delete(:host) || '127.0.0.1'
55
+ @port = args.delete(:port) || 9091
56
+ @username = args[:username]
57
+ @password = args[:password]
58
+ @interval = args.delete(:interval) || 5
59
+ @transmission = Transmission::Client.new(@host, @port, @username, @password)
60
+ end
61
+
62
+ def report
63
+ @transmission.torrents(FIELDS) do |torrents|
64
+ result = {:host => "#{@host}:#{@port}"}
65
+ torrents.each do |torrent|
66
+ puts 'torrent'
67
+ result[torrent.hashString.to_sym] = torrent.attributes
68
+ end
69
+ EM::HttpRequest.new('http://127.0.0.1:3000/transmission/').post :query => {:torrents => result.to_json}
70
+ end
71
+ end
72
+
73
+ def session_stats
74
+ @transmission.session_stat do |ss|
75
+ puts 'session'
76
+ result = ss.attributes.merge({:host => "#{@host}:#{@port}"})
77
+ EM::HttpRequest.new('http://127.0.0.1:3000/transmission/stat').post :query => {:session_stat => result.to_json}
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ end
@@ -1,4 +1 @@
1
- require 'net/http'
2
- require 'json'
3
- require 'base64'
4
- require 'transmission-connect/client'
1
+ require File.dirname(__FILE__) + '/transmission-connect/configuration'
@@ -5,13 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{transmission-connect}
8
- s.version = "0.2.2"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dmitry Brazhkin"]
12
- s.date = %q{2011-04-12}
12
+ s.date = %q{2011-04-19}
13
13
  s.description = %q{Simple connector to transmission bittorrent client by HTTP-RPC}
14
14
  s.email = %q{dbrazhkin@gmail.com}
15
+ s.executables = ["transmission.rb"]
15
16
  s.extra_rdoc_files = [
16
17
  "LICENSE.txt",
17
18
  "README.rdoc"
@@ -24,8 +25,11 @@ Gem::Specification.new do |s|
24
25
  "README.rdoc",
25
26
  "Rakefile",
26
27
  "VERSION",
28
+ "bin/transmission.rb",
29
+ "config/transmission.yml",
27
30
  "lib/transmission-connect.rb",
28
31
  "lib/transmission-connect/client.rb",
32
+ "lib/transmission-connect/configuration.rb",
29
33
  "test/helper.rb",
30
34
  "test/test_client.rb",
31
35
  "test/test_transmission-connect.rb",
@@ -47,12 +51,14 @@ Gem::Specification.new do |s|
47
51
 
48
52
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
53
  s.add_runtime_dependency(%q<json>, [">= 0"])
54
+ s.add_runtime_dependency(%q<transmission-client>, [">= 0.0.3"])
50
55
  s.add_development_dependency(%q<shoulda>, [">= 0"])
51
56
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
52
57
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
53
58
  s.add_development_dependency(%q<rcov>, [">= 0"])
54
59
  else
55
60
  s.add_dependency(%q<json>, [">= 0"])
61
+ s.add_dependency(%q<transmission-client>, [">= 0.0.3"])
56
62
  s.add_dependency(%q<shoulda>, [">= 0"])
57
63
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
58
64
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -60,6 +66,7 @@ Gem::Specification.new do |s|
60
66
  end
61
67
  else
62
68
  s.add_dependency(%q<json>, [">= 0"])
69
+ s.add_dependency(%q<transmission-client>, [">= 0.0.3"])
63
70
  s.add_dependency(%q<shoulda>, [">= 0"])
64
71
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
72
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dmitry Brazhkin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-12 00:00:00 Z
18
+ date: 2011-04-19 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -33,6 +33,22 @@ dependencies:
33
33
  requirement: *id001
34
34
  - !ruby/object:Gem::Dependency
35
35
  version_requirements: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ hash: 25
41
+ segments:
42
+ - 0
43
+ - 0
44
+ - 3
45
+ version: 0.0.3
46
+ name: transmission-client
47
+ prerelease: false
48
+ type: :runtime
49
+ requirement: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
36
52
  none: false
37
53
  requirements:
38
54
  - - ">="
@@ -44,9 +60,9 @@ dependencies:
44
60
  name: shoulda
45
61
  prerelease: false
46
62
  type: :development
47
- requirement: *id002
63
+ requirement: *id003
48
64
  - !ruby/object:Gem::Dependency
49
- version_requirements: &id003 !ruby/object:Gem::Requirement
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
50
66
  none: false
51
67
  requirements:
52
68
  - - ~>
@@ -60,9 +76,9 @@ dependencies:
60
76
  name: bundler
61
77
  prerelease: false
62
78
  type: :development
63
- requirement: *id003
79
+ requirement: *id004
64
80
  - !ruby/object:Gem::Dependency
65
- version_requirements: &id004 !ruby/object:Gem::Requirement
81
+ version_requirements: &id005 !ruby/object:Gem::Requirement
66
82
  none: false
67
83
  requirements:
68
84
  - - ~>
@@ -76,9 +92,9 @@ dependencies:
76
92
  name: jeweler
77
93
  prerelease: false
78
94
  type: :development
79
- requirement: *id004
95
+ requirement: *id005
80
96
  - !ruby/object:Gem::Dependency
81
- version_requirements: &id005 !ruby/object:Gem::Requirement
97
+ version_requirements: &id006 !ruby/object:Gem::Requirement
82
98
  none: false
83
99
  requirements:
84
100
  - - ">="
@@ -90,11 +106,11 @@ dependencies:
90
106
  name: rcov
91
107
  prerelease: false
92
108
  type: :development
93
- requirement: *id005
109
+ requirement: *id006
94
110
  description: Simple connector to transmission bittorrent client by HTTP-RPC
95
111
  email: dbrazhkin@gmail.com
96
- executables: []
97
-
112
+ executables:
113
+ - transmission.rb
98
114
  extensions: []
99
115
 
100
116
  extra_rdoc_files:
@@ -108,8 +124,11 @@ files:
108
124
  - README.rdoc
109
125
  - Rakefile
110
126
  - VERSION
127
+ - bin/transmission.rb
128
+ - config/transmission.yml
111
129
  - lib/transmission-connect.rb
112
130
  - lib/transmission-connect/client.rb
131
+ - lib/transmission-connect/configuration.rb
113
132
  - test/helper.rb
114
133
  - test/test_client.rb
115
134
  - test/test_transmission-connect.rb