sanguinews 0.71 → 0.80

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: a86f7b09264c0cf751f8cfc1de0b099107e0b129
4
- data.tar.gz: 128929c2859816545179090a337f513b3b17b902
3
+ metadata.gz: 6a95bb5bc8f2a550c7a645e9bb9e8f0db7f3ff75
4
+ data.tar.gz: 4d52b579688af11de4ec34b74e2eae397b17165c
5
5
  SHA512:
6
- metadata.gz: b4242b47c83f311d95da4a51f8df096bd0e29e3af2a57153545a6c07930d3baa8fdd667e98122a5312a514d1a4e8aa92254feb09e6c9116f7d56aeec284fe76d
7
- data.tar.gz: 342fd681d52f3703d706af11f940ccdfad63f67505adbef3f029e06e3ed38d3bb4a74c689680ad2443be5eeb9d68ef306aa9d4c738e7ed3c53a82d98c7917754
6
+ metadata.gz: 2e2ea68fb138aac98d5c7343e01123f54b8e9568b41405158f430b35458a673c38feb68bc1723781c58820db5297438f128d3e9b3cb093901c6f3de385d2f6c1
7
+ data.tar.gz: c0d6e77f384142d11bac652bdd9518254ac8c989676f5eefe35d764fb36ecd2e9eaa1100aa4d3eff4b8bd6acc873b05e6ccdbf60ad2775c94c81f6b24df6587e
@@ -34,36 +34,60 @@ require_relative 'sanguinews/yencoded'
34
34
  require_relative 'sanguinews/config'
35
35
  require_relative 'sanguinews/version'
36
36
 
37
+ # lets add additional property to the Thread class
38
+ module SanguinewsThread
39
+ refine Thread do
40
+ attr_reader :awoken
41
+
42
+ def wakeup
43
+ @awoken = true
44
+ super
45
+ end
46
+
47
+ def awoken
48
+ @awoken = false if @awoken.nil?
49
+ @awoken
50
+ end
51
+ end
52
+ end
53
+
37
54
  module Sanguinews
55
+ using SanguinewsThread
56
+
38
57
  module_function
39
58
  # Method returns yenc encoded string and crc32 value
40
- def yencode(file, length, queue)
41
- chunk = 1
42
- until file.eof?
43
- bindata = file.read(length)
44
- # We can't take all memory, so we wait
45
- queue.synchronize do
46
- @cond.wait_while do
47
- queue.length > @config.connections * 3
48
- end
59
+ def yencode(file, length, queue, thread)
60
+ chunk = 1
61
+ @s.log("Encoding #{file.name}\n") if @config.debug
62
+ until file.eof?
63
+ bindata = file.read(length)
64
+ # We can't take all memory, so we wait
65
+ queue.synchronize do
66
+ @cond.wait_while do
67
+ queue.length > @config.connections * 3
49
68
  end
50
- data = {}
51
- final_data = []
52
- len = bindata.length
53
- yencoded = Yencoded::Data.yenc(bindata, len)
54
- msg = file.messages[chunk-1]
55
- msg.message = yencoded[0].force_encoding('ASCII-8BIT')
56
- msg.part_crc32 = yencoded[1].to_s(16)
57
- msg.length = len
58
- msg.crc32 = file.file_crc32 if chunk == file.chunks
59
- msg.yenc_body(chunk, file.chunks, file.size, file.name)
60
- final_data[0] = { message: msg.return_self, filename: file.name, chunk: chunk, length: len }
61
- final_data[1] = file
62
- queue.push(final_data)
63
- # we do care about user's memory
64
- msg.unset
65
- chunk += 1
66
- end
69
+ end
70
+ data = {}
71
+ final_data = []
72
+ len = bindata.length
73
+ yencoded = Yencoded::Data.yenc(bindata, len)
74
+ msg = file.messages[chunk-1]
75
+ msg.message = yencoded[0].force_encoding('ASCII-8BIT')
76
+ msg.part_crc32 = yencoded[1].to_s(16)
77
+ msg.length = len
78
+ msg.crc32 = file.file_crc32 if chunk == file.chunks
79
+ msg.yenc_body(chunk, file.chunks, file.size, file.name)
80
+ final_data[0] = { message: msg.return_self, filename: file.name, chunk: chunk, length: len }
81
+ final_data[1] = file
82
+ queue.push(final_data)
83
+ # start processing next file
84
+ if file.chunks - chunk <= @config.connections && thread + 1 < @file_proc_threads.size
85
+ @file_proc_threads[thread+1].wakeup unless @file_proc_threads[thread+1].awoken
86
+ end
87
+ # we do care about user's memory
88
+ msg.unset
89
+ chunk += 1
90
+ end
67
91
  end
68
92
 
69
93
  def connect(conn_nr)
@@ -209,9 +233,7 @@ module Sanguinews
209
233
  retry
210
234
  end
211
235
 
212
- if @config.verbose
213
- @s.log("Uploaded chunk Nr:#{chunk}\n", stderr: true)
214
- end
236
+ @s.log("Uploaded chunk Nr:#{chunk}\n", stderr: true) if @config.verbose
215
237
 
216
238
  @s.done(length)
217
239
  @s.uploaded += full_size
@@ -242,14 +264,15 @@ module Sanguinews
242
264
 
243
265
  files_to_process, informed, unprocessed = create_upload_list(info_lock)
244
266
 
245
- # let's give a little bit higher priority for file processing thread
246
- @file_proc_thread = Thread.new {
247
- files_to_process.each do |file|
248
- @s.log("Encoding #{file.name}\n")
249
- yencode(file, @config.article_size, messages)
250
- end
251
- }
252
- @file_proc_thread.priority += 2
267
+ @file_proc_threads = []
268
+ thread_nr = 0
269
+ files_to_process.each do |file|
270
+ @file_proc_threads[thread_nr] = Thread.new(thread_nr) { |x|
271
+ Thread.stop unless x == 0
272
+ yencode(file, @config.article_size, messages, x)
273
+ }
274
+ thread_nr += 1
275
+ end
253
276
 
254
277
  until unprocessed == 0
255
278
  thread_pool.schedule do
@@ -1,3 +1,3 @@
1
1
  module Sanguinews
2
- VERSION = "0.71"
2
+ VERSION = "0.80"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sanguinews
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.71'
4
+ version: '0.80'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tadeus Dobrovolskij
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-16 00:00:00.000000000 Z
11
+ date: 2015-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: speedometer
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '0.1'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.1.2
22
+ version: 0.1.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '0.1'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.1.2
32
+ version: 0.1.3
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: nzb
35
35
  requirement: !ruby/object:Gem::Requirement