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 +4 -4
- data/lib/sanguinews.rb +60 -37
- data/lib/sanguinews/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6a95bb5bc8f2a550c7a645e9bb9e8f0db7f3ff75
|
|
4
|
+
data.tar.gz: 4d52b579688af11de4ec34b74e2eae397b17165c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2e2ea68fb138aac98d5c7343e01123f54b8e9568b41405158f430b35458a673c38feb68bc1723781c58820db5297438f128d3e9b3cb093901c6f3de385d2f6c1
|
|
7
|
+
data.tar.gz: c0d6e77f384142d11bac652bdd9518254ac8c989676f5eefe35d764fb36ecd2e9eaa1100aa4d3eff4b8bd6acc873b05e6ccdbf60ad2775c94c81f6b24df6587e
|
data/lib/sanguinews.rb
CHANGED
|
@@ -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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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
|
data/lib/sanguinews/version.rb
CHANGED
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.
|
|
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-
|
|
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.
|
|
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.
|
|
32
|
+
version: 0.1.3
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: nzb
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|