transmission-rss 0.2.0 → 0.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d767ee42ccfae63d8fe0dcbd4646c2b76e92afd
4
- data.tar.gz: aad93524c03fc281512d4279e5cce49877f6e41e
3
+ metadata.gz: 395d3f0f34878429129d601628fe37e5d7753e1f
4
+ data.tar.gz: 76b962020543b7ec0c62a1d76d940f8dcc7c167f
5
5
  SHA512:
6
- metadata.gz: f3d62fe42f81e4c3fe76254411e7cba5ed5ffa305f06116326449348b26ff8857f645ade5479aacd90908995438829ccb5ca0cae8b4f5cb429ebff4eb7f6c51d
7
- data.tar.gz: a2326919928da2f78a315f0bc022f32236fe2c44420b28f1e7c6333e8cfb55488537efcc1994ade7ae852b3392bec7a088bc53bba92663418b4595f717719549
6
+ metadata.gz: 20f3bb43fb943b3085d17caa7e77251de1e0d63b04e43cd7653cd768de5d2a4179f3a158b3e9c5a1a93f8fdec1fb108130565622a4e2fbca8480b347a14160eb
7
+ data.tar.gz: 4e18d699f2c9dac769b01c5c38d8e16ac840ea26332318dc02cbc8a6e8e9c8298a4caa7184f1f48b8fded259a517149f7847e14f68c054acce378aa600f6aa67
data/README.md CHANGED
@@ -32,7 +32,7 @@ Installation
32
32
 
33
33
  git clone https://github.com/nning/transmission-rss
34
34
  cd transmission-rss
35
- bundle
35
+ bundle
36
36
  gem build transmission-rss.gemspec
37
37
  gem install transmission-rss-*.gem
38
38
 
@@ -66,6 +66,12 @@ Feeds can also be configured to download files to specific directory:
66
66
  - url: http://example.com/feed1
67
67
  download_path: /home/user/Downloads
68
68
 
69
+ Setting the seed ratio limit is supported per feed:
70
+
71
+ feeds:
72
+ - url: http://example.com/feed1
73
+ seed_ratio_limit: 0
74
+
69
75
  ### All available options
70
76
 
71
77
  The following configuration file example contains every existing option
@@ -84,6 +90,8 @@ transmission is configured for HTTP basic authentication.
84
90
  regexp: (match1|match2)
85
91
  - url: http://example.com/feed4
86
92
  download_path: /home/user/Downloads
93
+ - url: http://example.com/feed4
94
+ seed_ratio_limit: 1
87
95
  - url: http://example.com/feed4
88
96
  regexp:
89
97
  - match1
@@ -91,9 +99,9 @@ transmission is configured for HTTP basic authentication.
91
99
  - url: http://example.com/feed5
92
100
  regexp:
93
101
  - matcher: match1
94
- download_path: /home/user/match1
102
+ download_path: /home/user/match1
95
103
  - matcher: match2
96
- download_path: /home/user/match2
104
+ download_path: /home/user/match2
97
105
 
98
106
  update_interval: 600
99
107
 
@@ -104,9 +112,9 @@ transmission is configured for HTTP basic authentication.
104
112
  port: 9091
105
113
  rpc_path: /transmission/rpc
106
114
 
107
- login:
108
- username: transmission
109
- password: transmission
115
+ login:
116
+ username: transmission
117
+ password: transmission
110
118
 
111
119
  log_target: /var/log/transmissiond-rss.log
112
120
 
@@ -118,7 +126,7 @@ transmission is configured for HTTP basic authentication.
118
126
 
119
127
  pid_file: false
120
128
 
121
- seen_file: ~/.config/transmission/seen
129
+ seen_file: ~/.config/transmission/seen
122
130
 
123
131
  Daemonized Startup
124
132
  ------------------
data/bin/transmission-rss CHANGED
@@ -99,6 +99,7 @@ if !(custom_config || ENV['HOME'].nil?)
99
99
  end
100
100
 
101
101
  # Print current config.
102
+ log.debug('version ' + VERSION)
102
103
  log.debug(config)
103
104
 
104
105
  # Fork value from command line.
@@ -145,7 +146,10 @@ client = Client.new(config.server, config.login)
145
146
 
146
147
  # Callback for a new item on one of the feeds.
147
148
  aggregator.on_new_item do |torrent_file, feed, download_path|
148
- client.add_torrent(torrent_file, :url, paused: config.add_paused, download_path: download_path)
149
+ client.add_torrent(torrent_file, :url,
150
+ paused: config.add_paused,
151
+ download_path: download_path,
152
+ seed_ratio_limit: feed.config.seed_ratio_limit)
149
153
  end
150
154
 
151
155
  # Callback for changes to the config.
@@ -20,51 +20,69 @@ module TransmissionRSS
20
20
  @log = TransmissionRSS::Log.instance
21
21
  end
22
22
 
23
- # POST json packed torrent add command.
24
- def add_torrent(file, type, options = {})
25
- hash = {
26
- 'method' => 'torrent-add',
27
- 'arguments' => {
28
- 'paused' => options[:paused],
29
- 'download-dir' => options[:download_path]
23
+ def rpc(method, arguments)
24
+ sid = get_session_id
25
+ raise Unauthorized unless sid
26
+
27
+ post = Net::HTTP::Post.new \
28
+ @rpc_path,
29
+ {
30
+ 'Content-Type' => 'application/json',
31
+ 'X-Transmission-Session-Id' => sid
30
32
  }
33
+
34
+ add_basic_auth(post)
35
+ post.body = {method: method, arguments: arguments}.to_json
36
+
37
+ JSON.parse(request(post).body)
38
+ end
39
+
40
+ # POST json packed torrent add command.
41
+ def add_torrent(file, type = :url, options = {})
42
+ arguments = {
43
+ 'paused' => options[:paused],
44
+ 'download-dir' => options[:download_path]
31
45
  }
32
46
 
33
47
  case type
34
48
  when :url
35
- hash.arguments.filename = file
49
+ arguments.filename = file
36
50
  when :file
37
- hash.arguments.metainfo = Base64.encode64(File.read(file))
51
+ arguments.metainfo = Base64.encode64(File.read(file))
38
52
  else
39
53
  raise ArgumentError.new('type has to be :url or :file.')
40
54
  end
41
55
 
42
- sid = get_session_id
43
- raise Unauthorized unless sid
44
-
45
- post = Net::HTTP::Post.new \
46
- @rpc_path,
47
- {
48
- 'Content-Type' => 'application/json',
49
- 'X-Transmission-Session-Id' => sid
50
- }
56
+ response = rpc('torrent-add', arguments)
57
+ id = get_id_from_response(response)
51
58
 
52
- auth(post)
59
+ log_message = 'torrent-add result: ' + response.result
60
+ log_message << ' (id ' + id.to_s + ')' if id
61
+ @log.debug(log_message)
53
62
 
54
- post.body = hash.to_json
63
+ if id && options[:seed_ratio_limit]
64
+ set_torrent(id, {
65
+ 'seedRatioLimit': options[:seed_ratio_limit].to_f,
66
+ 'seedRatioMode': 1
67
+ })
68
+ end
55
69
 
56
- response = request(post)
70
+ response
71
+ end
57
72
 
58
- result = JSON.parse(response.body).result
73
+ def set_torrent(id, arguments = {})
74
+ arguments.ids = [id]
75
+ response = rpc('torrent-set', arguments)
76
+ @log.debug('torrent-set result: ' + response.result)
59
77
 
60
- @log.debug('add_torrent result: ' + result)
78
+ response
61
79
  end
62
80
 
63
81
  # Get transmission session id.
64
82
  def get_session_id
65
83
  get = Net::HTTP::Get.new(@rpc_path)
66
84
 
67
- auth(get)
85
+ add_basic_auth(get)
68
86
 
69
87
  response = request(get)
70
88
 
@@ -82,9 +100,19 @@ module TransmissionRSS
82
100
 
83
101
  private
84
102
 
85
- def auth(request)
86
- unless @login.nil?
87
- request.basic_auth(@login['username'], @login['password'])
103
+ def add_basic_auth(request)
104
+ return if @login.nil?
105
+ request.basic_auth(@login['username'], @login['password'])
106
+ end
107
+
108
+ def get_id_from_response(response)
109
+ response.arguments.first.last.id
110
+ rescue
111
+ end
112
+
113
+ def http_request(data)
114
+ Net::HTTP.new(@host, @port).start do |http|
115
+ http.request(data)
88
116
  end
89
117
  end
90
118
 
@@ -93,7 +121,7 @@ module TransmissionRSS
93
121
 
94
122
  Timeout.timeout(@timeout) do
95
123
  @log.debug("request #@host:#@port")
96
- http_get(data)
124
+ http_request(data)
97
125
  end
98
126
  rescue Errno::ECONNREFUSED
99
127
  @log.debug('connection refused')
@@ -108,11 +136,5 @@ module TransmissionRSS
108
136
 
109
137
  raise
110
138
  end
111
-
112
- def http_get(data)
113
- Net::HTTP.new(@host, @port).start do |http|
114
- http.request(data)
115
- end
116
- end
117
139
  end
118
140
  end
@@ -1,12 +1,14 @@
1
1
  module TransmissionRSS
2
2
  class Feed
3
- attr_reader :url, :regexp
3
+ attr_reader :url, :regexp, :config
4
4
 
5
5
  def initialize(config = {})
6
6
  @download_paths = {}
7
7
 
8
8
  case config
9
9
  when Hash
10
+ @config = config
11
+
10
12
  @url = URI.encode(config['url'] || config.keys.first)
11
13
 
12
14
  @download_path = config['download_path']
@@ -1,3 +1,3 @@
1
1
  module TransmissionRSS
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transmission-rss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - henning mueller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-13 00:00:00.000000000 Z
11
+ date: 2016-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: open_uri_redirections
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  version: '0'
97
97
  requirements: []
98
98
  rubyforge_project:
99
- rubygems_version: 2.6.3
99
+ rubygems_version: 2.6.8
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: Adds torrents from rss feeds to transmission web frontend.