transmission-connect 0.3.0 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,7 +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
+ gem 'transmission-client', '>=0.0.5', :git => "git://github.com/Daem0n/transmission-client.git"
8
8
 
9
9
  # Add dependencies to develop your gem here.
10
10
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  GIT
2
2
  remote: git://github.com/Daem0n/transmission-client.git
3
- revision: b0ec8d4e14c212eb833746b430522487547ae91c
3
+ revision: c653e014b8c1c9c25d93adf05c60ed212667120d
4
4
  specs:
5
- transmission-client (0.0.3)
5
+ transmission-client (0.0.5)
6
6
  em-http-request
7
7
 
8
8
  GEM
@@ -34,4 +34,4 @@ DEPENDENCIES
34
34
  json
35
35
  rcov
36
36
  shoulda
37
- transmission-client (>= 0.0.3)!
37
+ transmission-client (>= 0.0.5)!
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.4
data/bin/transmission.rb CHANGED
@@ -3,12 +3,22 @@
3
3
  require 'rubygems'
4
4
  require 'yaml'
5
5
  require 'transmission-client'
6
- require '../lib/transmission-connect'
6
+ require 'lib/transmission-connect'
7
7
 
8
- CONFIG = "../config/transmission.yml"
9
- result = []
8
+ CONFIG = "config/transmission.yml"
9
+ @exit = false
10
10
 
11
- while true
11
+ trap("INT") do
12
+ EventMachine::stop_event_loop
13
+ @exit = true
14
+ end
15
+
16
+ trap("TERM") do
17
+ EventMachine::stop_event_loop
18
+ @exit = true
19
+ end
20
+
21
+ while !@exit
12
22
  begin
13
23
  EventMachine.run do
14
24
  transmission = Configuration.new(YAML.load_file(CONFIG))
@@ -22,7 +32,11 @@ while true
22
32
  client.session_stats
23
33
  end
24
34
  end
35
+ EventMachine::start_server "127.0.0.1", 2456, TransmissionServer do |server|
36
+ server.connectors = transmission
37
+ end
25
38
  end
26
- rescue
39
+ rescue Exception => e
40
+ puts "Error: #{e.message}"
27
41
  end
28
42
  end
@@ -1 +1,2 @@
1
- require File.dirname(__FILE__) + '/transmission-connect/configuration'
1
+ require File.dirname(__FILE__) + '/transmission-connect/configuration'
2
+ require File.dirname(__FILE__) + '/transmission-connect/server'
@@ -48,36 +48,61 @@ class Configuration
48
48
  end
49
49
 
50
50
  class Client
51
+ # HOST = 'http://127.0.0.1:3000'
52
+ HOST = 'http://peerlize.hitlan.ru'
51
53
  FIELDS = ['downloadDir', 'error', 'errorString', 'eta', 'hashString', 'id', 'name', 'peersConnected', 'peersKnown', 'peersSendingToUs', 'percentDone', 'rateDownload', 'rateUpload', 'recheckProgress', 'startDate', 'status', 'totalSize', 'torrentFile']
52
- attr_reader :interval
54
+ attr_reader :interval, :host, :port, :transmission
55
+ attr_accessor :peer_port, :download_dir
53
56
  def initialize(args)
54
57
  @host = args.delete(:host) || '127.0.0.1'
55
58
  @port = args.delete(:port) || 9091
56
59
  @username = args[:username]
57
60
  @password = args[:password]
58
61
  @interval = args.delete(:interval) || 5
62
+ @up = args.delete(:up) || false
63
+ @down = args.delete(:down) || false
59
64
  @transmission = Transmission::Client.new(@host, @port, @username, @password)
65
+ @transmission.session do |session|
66
+ self.peer_port = session.peer_port
67
+ self.download_dir = session.download_dir
68
+ end
60
69
  end
61
70
 
62
71
  def report
63
72
  @transmission.torrents(FIELDS) do |torrents|
64
- result = {:host => "#{@host}:#{@port}"}
73
+ result = {:client => options}
65
74
  torrents.each do |torrent|
66
- puts 'torrent'
67
75
  result[torrent.hashString.to_sym] = torrent.attributes
68
76
  end
69
- EM::HttpRequest.new('http://127.0.0.1:3000/transmission/').post :query => {:torrents => result.to_json}
77
+ EM::HttpRequest.new("#{HOST}/transmission/").post :body => {:torrents => result.to_json}
70
78
  end
71
79
  end
72
80
 
73
81
  def session_stats
74
82
  @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}
83
+ result = ss.attributes.merge(:client => options)
84
+ EM::HttpRequest.new("#{HOST}/transmission/stat").post :body => {:session_stat => result.to_json}
78
85
  end
79
86
  end
80
87
 
88
+ def up?
89
+ @up
90
+ end
91
+
92
+ def down?
93
+ @down
94
+ end
95
+
96
+ def options
97
+ @options ||= {
98
+ :port => peer_port,
99
+ :up => up?,
100
+ :down => down?,
101
+ :download_dir => download_dir,
102
+ :host => @host
103
+ }
104
+ end
105
+
81
106
  end
82
107
 
83
108
  end
@@ -0,0 +1,27 @@
1
+ module TransmissionServer
2
+ attr_accessor :connectors
3
+
4
+ def receive_data data
5
+ query = JSON.parse(data)
6
+ case query['command']
7
+ when 'add'
8
+ respond = 'Add: ' + query['uri']
9
+ target = query['client']
10
+ ## Add magnet link to download client
11
+ session = @connectors.find{|client| client.host == target['host'] and client.peer_port == target['port']}
12
+ if session
13
+ session.transmission.add_torrent_by_file(query['uri'])
14
+ session.transmission.add_tracker(query['hash'], 'http://retracker.local/announce') if query['hash']
15
+ end
16
+ when 'move'
17
+ respond = 'move'
18
+ ## Move torrent from download to upload client
19
+ else
20
+ respond = 'Illegal operation'
21
+ end
22
+ puts respond
23
+ send_data respond
24
+ close_connection_after_writing
25
+ end
26
+
27
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{transmission-connect}
8
- s.version = "0.3.0"
8
+ s.version = "0.3.4"
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-19}
12
+ s.date = %q{2011-04-21}
13
13
  s.description = %q{Simple connector to transmission bittorrent client by HTTP-RPC}
14
14
  s.email = %q{dbrazhkin@gmail.com}
15
15
  s.executables = ["transmission.rb"]
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "lib/transmission-connect.rb",
31
31
  "lib/transmission-connect/client.rb",
32
32
  "lib/transmission-connect/configuration.rb",
33
+ "lib/transmission-connect/server.rb",
33
34
  "test/helper.rb",
34
35
  "test/test_client.rb",
35
36
  "test/test_transmission-connect.rb",
@@ -51,14 +52,14 @@ Gem::Specification.new do |s|
51
52
 
52
53
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
54
  s.add_runtime_dependency(%q<json>, [">= 0"])
54
- s.add_runtime_dependency(%q<transmission-client>, [">= 0.0.3"])
55
+ s.add_runtime_dependency(%q<transmission-client>, [">= 0.0.5"])
55
56
  s.add_development_dependency(%q<shoulda>, [">= 0"])
56
57
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
57
58
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
58
59
  s.add_development_dependency(%q<rcov>, [">= 0"])
59
60
  else
60
61
  s.add_dependency(%q<json>, [">= 0"])
61
- s.add_dependency(%q<transmission-client>, [">= 0.0.3"])
62
+ s.add_dependency(%q<transmission-client>, [">= 0.0.5"])
62
63
  s.add_dependency(%q<shoulda>, [">= 0"])
63
64
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
64
65
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -66,7 +67,7 @@ Gem::Specification.new do |s|
66
67
  end
67
68
  else
68
69
  s.add_dependency(%q<json>, [">= 0"])
69
- s.add_dependency(%q<transmission-client>, [">= 0.0.3"])
70
+ s.add_dependency(%q<transmission-client>, [">= 0.0.5"])
70
71
  s.add_dependency(%q<shoulda>, [">= 0"])
71
72
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
72
73
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transmission-connect
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 4
10
+ version: 0.3.4
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-19 00:00:00 Z
18
+ date: 2011-04-21 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -37,12 +37,12 @@ dependencies:
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- hash: 25
40
+ hash: 21
41
41
  segments:
42
42
  - 0
43
43
  - 0
44
- - 3
45
- version: 0.0.3
44
+ - 5
45
+ version: 0.0.5
46
46
  name: transmission-client
47
47
  prerelease: false
48
48
  type: :runtime
@@ -129,6 +129,7 @@ files:
129
129
  - lib/transmission-connect.rb
130
130
  - lib/transmission-connect/client.rb
131
131
  - lib/transmission-connect/configuration.rb
132
+ - lib/transmission-connect/server.rb
132
133
  - test/helper.rb
133
134
  - test/test_client.rb
134
135
  - test/test_transmission-connect.rb