sanguinews 0.71 → 0.80

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: 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