saber 0.0.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +4 -0
  3. data/CHANGELOG.md +3 -0
  4. data/Gemfile +18 -8
  5. data/Gemfile.lock +72 -33
  6. data/Guardfile +4 -0
  7. data/README.md +192 -52
  8. data/Rakefile +46 -0
  9. data/bin/1saber +5 -3
  10. data/bin/saber +4 -0
  11. data/bin/saber.bib +3 -0
  12. data/bin/saber.what +3 -0
  13. data/extconf.rb +4 -1
  14. data/lib/saber.rb +7 -13
  15. data/lib/saber/autofetcher.rb +8 -0
  16. data/lib/saber/autofetcher/client.rb +66 -0
  17. data/lib/saber/autofetcher/server.rb +78 -0
  18. data/lib/saber/cli.rb +65 -26
  19. data/lib/saber/{downloader.rb → fetcher.rb} +9 -11
  20. data/lib/saber/mechanize_ext.rb +136 -0
  21. data/lib/saber/rc.rb +3 -21
  22. data/lib/saber/task.rb +26 -11
  23. data/lib/saber/task/base.rb +18 -0
  24. data/lib/saber/task/clean.rb +18 -0
  25. data/lib/saber/task/generate.rb +38 -0
  26. data/lib/saber/task/make.rb +44 -0
  27. data/lib/saber/task/send.rb +21 -0
  28. data/lib/saber/task/upload.rb +37 -0
  29. data/lib/saber/tracker.rb +28 -0
  30. data/lib/saber/tracker/base.rb +115 -2
  31. data/lib/saber/tracker/bb.rb +244 -0
  32. data/lib/saber/tracker/bib.rb +225 -0
  33. data/lib/saber/tracker/ptp.rb +100 -0
  34. data/lib/saber/tracker/what.rb +55 -7
  35. data/lib/saber/ui.rb +65 -22
  36. data/lib/saber/version.rb +1 -1
  37. data/rutorrent/init.js +8 -9
  38. data/rutorrent/plugin.info +1 -1
  39. data/saber.gemspec +14 -10
  40. data/spec/data/_saber/.gitkeep +0 -0
  41. data/spec/saber/downloader_spec.rb +5 -2
  42. data/spec/saber/task_spec.rb +16 -0
  43. data/spec/saber/tracker/bib_spec.rb +24 -0
  44. data/spec/spec_helper.rb +25 -0
  45. data/templates/_saberrc +36 -0
  46. data/templates/bb/anime.yml +6 -0
  47. data/templates/bb/application.yml +7 -0
  48. data/templates/bb/audiobook.yml +12 -0
  49. data/templates/bb/comic.yml +7 -0
  50. data/templates/bb/documentary.yml +26 -0
  51. data/templates/bb/ebook.yml +8 -0
  52. data/templates/bb/elearning_video.yml +7 -0
  53. data/templates/bb/game_console.yml +6 -0
  54. data/templates/bb/game_pc.yml +6 -0
  55. data/templates/bb/magazine.yml +6 -0
  56. data/templates/bb/misc.yml +6 -0
  57. data/templates/bb/movie.yml +26 -0
  58. data/templates/bb/music.yml +21 -0
  59. data/templates/bb/tv.yml +6 -0
  60. data/templates/bib/application.yml +9 -0
  61. data/templates/bib/article.yml +18 -0
  62. data/templates/bib/audiobook.yml +17 -0
  63. data/templates/bib/comic.yml +22 -0
  64. data/templates/bib/ebook.yml +20 -0
  65. data/templates/bib/journal.yml +18 -0
  66. data/templates/bib/magazine.yml +18 -0
  67. data/templates/ptp/movie.yml +63 -0
  68. data/templates/ptp/movie_add.yml +35 -0
  69. data/templates/what/ebook.yml +6 -0
  70. data/templates/what/music.yml +2 -0
  71. data/templates/what/music_add.yml +2 -0
  72. metadata +182 -26
  73. data/doc/Development.md +0 -3
  74. data/lib/saber/client.rb +0 -58
  75. data/lib/saber/server.rb +0 -70
  76. data/saber.watchr +0 -23
@@ -0,0 +1,35 @@
1
+ group_id:
2
+
3
+ # Not Main Movie
4
+ # Check this only if it does NOT contain the main movie.
5
+ # Examples: ONLY contains extras, Rifftrax, Workprints
6
+ special:
7
+
8
+ # Edition Information
9
+ # Check this box if this torrent is a special edition.
10
+ # Examples: "Director's Cut", "3D", "The Criterion Collection", "Rifftrax", "Dual Audio", "Remux".
11
+ remaster:
12
+
13
+ # Scene:
14
+ # Check this only if this is a 'scene release'. If you ripped it yourself, it is not a scene release.
15
+ # You can double check by searching the file name on orlydb.com.
16
+ scene:
17
+
18
+ # CAM TC TS R5 DVD-Screener VHS DVD TV HDTV HD-DVD Blu-ray Other
19
+ source: REQUIRED
20
+
21
+ # nil(Auto-detect) XviD DivX H.264 x264 DVD5 DVD9 BD25 BD50 Other
22
+ codec:
23
+
24
+ # nil(Auto-detect) AVI, MPG, MKV, MP4, VOB IFO, ISO, m2ts, Other
25
+ container:
26
+
27
+ # nil(Auto-detect) NTSC PAL 480p 576p 720p 1080i 1080p Other
28
+ resolution:
29
+
30
+ # Release Description
31
+ release_desc:
32
+
33
+ # Subtitles
34
+ # No Subtitles is 44.
35
+ subtitles[]: required
@@ -0,0 +1,6 @@
1
+ type: E-Books
2
+ # Author - Title
3
+ title: REQUIRED
4
+ tags: REQUIRED
5
+ image: REQUIRED
6
+ desc: REQUIRED
@@ -0,0 +1,2 @@
1
+ file_input:
2
+ type: Music
@@ -0,0 +1,2 @@
1
+ file_input:
2
+ type: Music
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,75 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-26 00:00:00.000000000 Z
12
+ date: 2012-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: pd
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: tagen
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 2.0.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.0.1
14
46
  - !ruby/object:Gem::Dependency
15
47
  name: optimism
16
- requirement: &13063220 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
17
49
  none: false
18
50
  requirements:
19
51
  - - ~>
20
52
  - !ruby/object:Gem::Version
21
- version: 3.1.2
53
+ version: 3.3.1
22
54
  type: :runtime
23
55
  prerelease: false
24
- version_requirements: *13063220
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.3.1
25
62
  - !ruby/object:Gem::Dependency
26
63
  name: pa
27
- requirement: &13061860 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
28
65
  none: false
29
66
  requirements:
30
67
  - - ~>
31
68
  - !ruby/object:Gem::Version
32
- version: 1.2.3
69
+ version: 1.3.2
33
70
  type: :runtime
34
71
  prerelease: false
35
- version_requirements: *13061860
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.3.2
36
78
  - !ruby/object:Gem::Dependency
37
79
  name: retort
38
- requirement: &13061200 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
39
81
  none: false
40
82
  requirements:
41
83
  - - ~>
@@ -43,41 +85,109 @@ dependencies:
43
85
  version: 0.0.6
44
86
  type: :runtime
45
87
  prerelease: false
46
- version_requirements: *13061200
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.0.6
47
94
  - !ruby/object:Gem::Dependency
48
95
  name: thor
49
- requirement: &13060560 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
50
97
  none: false
51
98
  requirements:
52
99
  - - ~>
53
100
  - !ruby/object:Gem::Version
54
- version: 0.14.6
101
+ version: 0.16.0
55
102
  type: :runtime
56
103
  prerelease: false
57
- version_requirements: *13060560
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.16.0
58
110
  - !ruby/object:Gem::Dependency
59
111
  name: net-ssh
60
- requirement: &13059240 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
61
113
  none: false
62
114
  requirements:
63
115
  - - ~>
64
116
  - !ruby/object:Gem::Version
65
- version: 2.3.0
117
+ version: 2.5.2
66
118
  type: :runtime
67
119
  prerelease: false
68
- version_requirements: *13059240
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 2.5.2
69
126
  - !ruby/object:Gem::Dependency
70
127
  name: xmpp4r
71
- requirement: &13057300 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '0.5'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
72
137
  none: false
73
138
  requirements:
74
139
  - - ~>
75
140
  - !ruby/object:Gem::Version
76
141
  version: '0.5'
142
+ - !ruby/object:Gem::Dependency
143
+ name: mechanize
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 2.5.1
77
150
  type: :runtime
78
151
  prerelease: false
79
- version_requirements: *13057300
80
- description: ! 'the saber
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 2.5.1
158
+ - !ruby/object:Gem::Dependency
159
+ name: highline
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 1.6.14
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 1.6.14
174
+ - !ruby/object:Gem::Dependency
175
+ name: reverse_markdown
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 0.3.0
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: 0.3.0
190
+ description: ! 'A complete solution for PT users.
81
191
 
82
192
  '
83
193
  email: ywzhaifei@gmail.com
@@ -89,23 +199,40 @@ extra_rdoc_files: []
89
199
  files:
90
200
  - .gitignore
91
201
  - .rspec
202
+ - .travis.yml
203
+ - CHANGELOG.md
92
204
  - Gemfile
93
205
  - Gemfile.lock
206
+ - Guardfile
94
207
  - README.md
95
208
  - Ragfile
209
+ - Rakefile
96
210
  - bin/1saber
97
211
  - bin/saber
98
212
  - bin/saber-drb_add
99
- - doc/Development.md
213
+ - bin/saber.bib
214
+ - bin/saber.what
100
215
  - extconf.rb
101
216
  - lib/saber.rb
217
+ - lib/saber/autofetcher.rb
218
+ - lib/saber/autofetcher/client.rb
219
+ - lib/saber/autofetcher/server.rb
102
220
  - lib/saber/cli.rb
103
- - lib/saber/client.rb
104
- - lib/saber/downloader.rb
221
+ - lib/saber/fetcher.rb
222
+ - lib/saber/mechanize_ext.rb
105
223
  - lib/saber/rc.rb
106
- - lib/saber/server.rb
107
224
  - lib/saber/task.rb
225
+ - lib/saber/task/base.rb
226
+ - lib/saber/task/clean.rb
227
+ - lib/saber/task/generate.rb
228
+ - lib/saber/task/make.rb
229
+ - lib/saber/task/send.rb
230
+ - lib/saber/task/upload.rb
231
+ - lib/saber/tracker.rb
108
232
  - lib/saber/tracker/base.rb
233
+ - lib/saber/tracker/bb.rb
234
+ - lib/saber/tracker/bib.rb
235
+ - lib/saber/tracker/ptp.rb
109
236
  - lib/saber/tracker/what.rb
110
237
  - lib/saber/ui.rb
111
238
  - lib/saber/version.rb
@@ -114,7 +241,7 @@ files:
114
241
  - rutorrent/init.php
115
242
  - rutorrent/plugin.info
116
243
  - saber.gemspec
117
- - saber.watchr
244
+ - spec/data/_saber/.gitkeep
118
245
  - spec/data/bt/lost.mkv
119
246
  - spec/data/bt/lost/01.lost.mkv
120
247
  - spec/data/bt/lost/02.lost.mkv
@@ -127,7 +254,36 @@ files:
127
254
  - spec/saber/client_spec.rb
128
255
  - spec/saber/downloader_spec.rb
129
256
  - spec/saber/server_spec.rb
257
+ - spec/saber/task_spec.rb
258
+ - spec/saber/tracker/bib_spec.rb
130
259
  - spec/spec_helper.rb
260
+ - templates/_saberrc
261
+ - templates/bb/anime.yml
262
+ - templates/bb/application.yml
263
+ - templates/bb/audiobook.yml
264
+ - templates/bb/comic.yml
265
+ - templates/bb/documentary.yml
266
+ - templates/bb/ebook.yml
267
+ - templates/bb/elearning_video.yml
268
+ - templates/bb/game_console.yml
269
+ - templates/bb/game_pc.yml
270
+ - templates/bb/magazine.yml
271
+ - templates/bb/misc.yml
272
+ - templates/bb/movie.yml
273
+ - templates/bb/music.yml
274
+ - templates/bb/tv.yml
275
+ - templates/bib/application.yml
276
+ - templates/bib/article.yml
277
+ - templates/bib/audiobook.yml
278
+ - templates/bib/comic.yml
279
+ - templates/bib/ebook.yml
280
+ - templates/bib/journal.yml
281
+ - templates/bib/magazine.yml
282
+ - templates/ptp/movie.yml
283
+ - templates/ptp/movie_add.yml
284
+ - templates/what/ebook.yml
285
+ - templates/what/music.yml
286
+ - templates/what/music_add.yml
131
287
  homepage: http://github.com/GutenYe/saber
132
288
  licenses: []
133
289
  post_install_message:
@@ -148,9 +304,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
304
  version: '0'
149
305
  requirements: []
150
306
  rubyforge_project: xx
151
- rubygems_version: 1.8.11
307
+ rubygems_version: 1.8.24
152
308
  signing_key:
153
309
  specification_version: 3
154
- summary: the saber
310
+ summary: A complete solution for PT users.
155
311
  test_files: []
156
312
  has_rdoc:
@@ -1,3 +0,0 @@
1
-
2
- $ saber client -V --pid a.pid
3
- # stay foreground. and print to STDOUT.
@@ -1,58 +0,0 @@
1
- require "xmpp4r/client"
2
- require "drb"
3
-
4
- module Saber
5
- class Client
6
- class << self
7
- def start
8
- client = Client.new
9
- client.start
10
-
11
- Thread.list.each {|v| v.join}
12
- end
13
- end
14
-
15
- attr_reader :client, :downloader
16
-
17
- def initialize
18
- @client = Jabber::Client.new(Jabber::JID.new(Rc.client.xmpp.jid))
19
- @downloader = Downloader.new
20
- end
21
-
22
- def start
23
- client.connect Rc.client.xmpp.host, Rc.client.xmpp.port
24
- client.auth Rc.client.xmpp.password
25
-
26
- client.add_message_callback { |msg|
27
- pd msg.from.bare
28
- if msg.from.bare == Rc.server.xmpp.jid
29
- files = msg.body.split("\n")
30
- $log.debug "RECV #{files}"
31
- downloader.add *files
32
- end
33
- }
34
-
35
- client.send Jabber::Presence.new
36
- Saber.ui.say ">> Connected to xmpp with #{Rc.client.xmpp.jid}"
37
- end
38
-
39
- def stop
40
- @client.close!
41
- end
42
- end
43
-
44
- class DRbClient
45
- attr_reader :server
46
-
47
- def initialize
48
- DRb.start_service
49
- @server = DRbObject.new_with_uri(Rc.drb_uri)
50
- Saber.ui.say ">> DRbClient connected to #{Rc.drb_uri}"
51
- end
52
-
53
- def add(*names)
54
- Saber.ui.say "ADD #{names}"
55
- server.add(*names)
56
- end
57
- end
58
- end
@@ -1,70 +0,0 @@
1
- require "xmpp4r/client"
2
- require "drb"
3
-
4
- module Saber
5
- class Server
6
- def self.start
7
- # register on_finished event.
8
- Retort::Service.call("system.method.set_key", "event.download.finished", "saber-download", "execute= /usr/bin/saber-drb_add, $d.get_hash=, $d.get_custom1=")
9
-
10
- s = Server.new
11
- DRbServer.start(s)
12
- s.start
13
-
14
- Thread.list.each {|v| v.join}
15
- end
16
-
17
- attr_reader :client
18
-
19
- def initialize
20
- @client = Jabber::Client.new(Jabber::JID.new(Rc.server.xmpp.jid))
21
- end
22
-
23
- def start
24
- client.connect Rc.server.xmpp.host, Rc.server.xmpp.port
25
- client.auth Rc.server.xmpp.password
26
- client.send Jabber::Presence.new
27
- Saber.ui.say ">> Connected to xmpp with #{Rc.server.xmpp.jid}"
28
- end
29
-
30
- def send(files)
31
- $log.debug "SEND #{files}"
32
- client.send Jabber::Message.new(Rc.client.xmpp.jid, files.join("\n"))
33
- end
34
- end
35
-
36
- class DRbServer
37
- class << self
38
- def start(saber_server)
39
- DRbServer.new(saber_server).start
40
- end
41
- end
42
-
43
- attr_reader :saber_server
44
-
45
- # @params [Server] server
46
- def initialize(saber_server)
47
- @saber_server = saber_server
48
- end
49
-
50
- def start
51
- DRb.start_service Rc.drb_uri, self
52
- Saber.ui.say ">> DRbSever listening on #{Rc.drb_uri}"
53
- end
54
-
55
- # drb. add a complete torrent.
56
- def add(*names)
57
- $log.debug "DRbServer-ADD #{names.inspect}"
58
- files = build_files(*names)
59
-
60
- saber_server.send(files)
61
- end
62
-
63
- private
64
-
65
- # ["filea", "foo/filea", "foo/fileb"]
66
- def build_files(*names)
67
- Pa.ls2_r(*names, :base_dir => Rc.server.download, :file => true, :include => true) { |path| not Pa.directory?(path) }
68
- end
69
- end
70
- end