sensible-cinema 0.23.5 → 0.23.6
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.TXT +1 -1
- data/README +2 -0
- data/Rakefile +4 -1
- data/TODO +24 -11
- data/VERSION +1 -1
- data/bin/sensible-cinema +83 -55
- data/change_log_with_feature_list.txt +12 -0
- data/history_and_related_works_list.txt +3 -1
- data/lib/edl_parser.rb +0 -2
- data/lib/swing_helpers.rb +1 -1
- data/spec/notes +16 -5
- data/spec/sensible_cinema_gui.spec.rb +17 -4
- data/zamples/edit_decision_lists/dvds/potter_prisoner_of_azkaban.txt +20 -0
- metadata +3 -3
- data/sensible-cinema.gemspec +0 -232
data/LICENSE.TXT
CHANGED
@@ -13,7 +13,7 @@ Ffmpeg is included, under the GPLv2: http://www.ffmpeg.org/legal.html http://www
|
|
13
13
|
|
14
14
|
unzip.exe is herein included, under the info-zip license: http://www.info-zip.org/license.html
|
15
15
|
|
16
|
-
Some binary builds of dvdid are also distributed here. See http://www.srcf.ucam.org/~cjk32/dvdid
|
16
|
+
Some binary builds of dvdid are also distributed here. See http://www.srcf.ucam.org/~cjk32/dvdid (in an email he said he'd release them under a BSD or other permissive type license)
|
17
17
|
|
18
18
|
TsMuxer binaries are included, with their own license, see vendor/tsmuxer1.10.6/licence.txt (it allows for redistribution).
|
19
19
|
|
data/README
CHANGED
@@ -177,6 +177,8 @@ The combination of these tools made programming this actually something of a ple
|
|
177
177
|
and a breeze cross platform.
|
178
178
|
Sensible Cinema leverages code from lots of other projects (see LICENSE.TXT)--many thanks to
|
179
179
|
the authors and maintainers of said libraries, and anybody else I forgot to mention.
|
180
|
+
Sensible Cinema is a conglomeration of the good ideas from several people who contacted me
|
181
|
+
over time. Thanks for your contributions.
|
180
182
|
|
181
183
|
== Feedback/Development ==
|
182
184
|
|
data/Rakefile
CHANGED
data/TODO
CHANGED
@@ -17,9 +17,6 @@
|
|
17
17
|
== high prio like blocking bugs ==
|
18
18
|
|
19
19
|
== under next release specific items: ==
|
20
|
-
mplayerx work?
|
21
|
-
latest dir "conflict" for grabbing sintel from file
|
22
|
-
can I just use ffmpeg for -> ts ? http://eotmsnotes.wordpress.com/2011/04/25/tsmuxer-notes/
|
23
20
|
cheap minimize demo "fake auto" :)
|
24
21
|
friday 2: http://www.youtube.com/watch?v=SDeLjcTxMaM&feature=player_profilepage
|
25
22
|
cheap static-ify demo for mutes
|
@@ -34,6 +31,7 @@
|
|
34
31
|
just in case youtube takes over the world
|
35
32
|
|
36
33
|
== yes do ordered in conjunction with the above ==
|
34
|
+
can I just use ffmpeg for -> ts ? http://eotmsnotes.wordpress.com/2011/04/25/tsmuxer-notes/
|
37
35
|
try buy delete lists from all x,y,z [?] maybe ask for them for free first? ()
|
38
36
|
http://www.familysafemovies.com
|
39
37
|
cleanflix (earl? that guy [John webster http://www.amazon.com/Make-Edited-Movies-ebook/dp/B004EYT3BU]?)
|
@@ -47,20 +45,24 @@
|
|
47
45
|
Almost overnight, competitors to CleanFlicks popped up with twists on the CleanFlicks brand -- CleanFilms, Clean Flix, Clean-Flicks, Family Focus Films
|
48
46
|
family flix
|
49
47
|
http://theeditedmovieencyclopedia.blogspot.com/2008/08/clean-play-dvds-grand-opening-e-mail.html has grande list
|
50
|
-
movie mask
|
48
|
+
movie mask wayback machine
|
51
49
|
next timing thing (notes file)
|
50
|
+
add the "create .edl file for xbmc/smplayer" button
|
52
51
|
|
53
52
|
== yes do, un-ordered currently, from the various future release options ==
|
54
|
-
|
53
|
+
mplayerx work?
|
54
|
+
if not, patch that fella...and tell them to fix it!
|
55
|
+
can accept straight ".edl" files too, as my input
|
56
|
+
decide if I want to just use edl's or my fancy-shmancy, or maybe my fancy-shmancy to wrap EDL's?
|
57
|
+
don't use eval!
|
58
|
+
bring to top after a conversion, and for prompts...we get hidden!
|
55
59
|
ascertain how accurate mplayer EDL is...I guess compared to...umm...something?
|
56
60
|
fix discrepancy between EDL mplayer and ffmpeg...maybe a new button "accurate EDL playback"?
|
57
|
-
don't use eval!
|
58
61
|
can auto-use tsmuxer at all
|
59
62
|
add buttons for "convert 4945 to x" and vice versa...
|
60
63
|
warn/redirect if wrong looking file extension...
|
61
64
|
mac just die with instructions to use tsmuxer first...
|
62
|
-
add
|
63
|
-
add a "watch edited from file" option...don't *force* too...?
|
65
|
+
add a "watch edited from local file" option...
|
64
66
|
check if some other buttons are outdated...
|
65
67
|
unit tests (all)
|
66
68
|
double check--are my ffmpeg splits really really really the same as mplayer's EDL DVD splits? really?
|
@@ -115,6 +117,7 @@
|
|
115
117
|
except if it's a specific scene run test...
|
116
118
|
the final "edited.avi" really "could/should" be playable in WMP...if possible
|
117
119
|
generic/consumer EDL run through should be through smplayer...do I need/want straight mplayer option too though?
|
120
|
+
do I need tsmuxer?
|
118
121
|
|
119
122
|
== other lists ==
|
120
123
|
|
@@ -128,9 +131,12 @@
|
|
128
131
|
add button "fast preview one" (from file)
|
129
132
|
add button "fast preview one" (from dvd)
|
130
133
|
|
131
|
-
== DVD-realtime backlog once do, now not do, unordered ==
|
134
|
+
== DVD-realtime backlog once yes do, now not do, unordered ==
|
135
|
+
|
132
136
|
investigate boxee edl (just fer fun...maybe possible?) http://getsatisfaction.com/boxee/topics/commercial_skipping_edl_support
|
133
|
-
investigate xbmc dvd edl
|
137
|
+
investigate xbmc dvd edl how do you do that?
|
138
|
+
maybe use smplayer full-screened, to avoid?
|
139
|
+
investigate WMC "call out to mplayer EDL" or the like...
|
134
140
|
for mplayer realtime it needs to start early, but end on time
|
135
141
|
mplayer instructions are obscured
|
136
142
|
mplayer EDL allow this:
|
@@ -149,6 +155,13 @@
|
|
149
155
|
investigate dvdrsbvdl (windows media center edl plugin)
|
150
156
|
|
151
157
|
== DVD+-DVD-realtime backlog (totally unordered, some very low prio, basically all never do) ==
|
158
|
+
make this thing load faster: don't require rubygems...uh...faster_require?
|
159
|
+
does xbmc need a "convert to 30fps edl" for DVD?
|
160
|
+
@xbmc can you call out to another player prog plz?
|
161
|
+
@xbmc "command line play this dvd with this EDL" :)
|
162
|
+
ask mplayer "could you make the OSD available to smplayer so it can get the right timestamps at least for its display?"
|
163
|
+
some way to hide spoilers, like soundtrack adds that ruin the movie for ya...
|
164
|
+
decide on "community" -- should it be all my own community? mymovies community?
|
152
165
|
the auto-matcher filename to subtitles [?]
|
153
166
|
"media browser" plugin?
|
154
167
|
@makemkv: show us the title numbers, and number them *by those*
|
@@ -338,7 +351,7 @@ bounty dvdnav
|
|
338
351
|
fix dvdnav stuffs?
|
339
352
|
ask swank if individuals can rent too?
|
340
353
|
|
341
|
-
== random non-DVD backlog ... or never do DVD.
|
354
|
+
== random non-DVD backlog ... or never do DVD. ==
|
342
355
|
|
343
356
|
@mplayer: you return the wrong return code, sillys! https://gist.github.com/1056292
|
344
357
|
@smplayer: bounty or me fix: their for their display [if they use get_time_pos isn't that enough ?]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.23.
|
1
|
+
0.23.6
|
data/bin/sensible-cinema
CHANGED
@@ -122,56 +122,35 @@ module SensibleSwing
|
|
122
122
|
|
123
123
|
Storage = Storage.new("sensible_cinema_storage")
|
124
124
|
|
125
|
-
|
126
|
-
|
127
|
-
if !(Storage['main_license_accepted'] == VERSION)
|
128
|
-
force_accept_license_first
|
129
|
-
end
|
130
|
-
|
131
|
-
setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
|
132
|
-
panel = JPanel.new
|
133
|
-
@panel = panel
|
134
|
-
@buttons = []
|
135
|
-
panel.set_layout nil
|
136
|
-
add panel # why can't I just slap these down?
|
137
|
-
|
138
|
-
jlabel = JLabel.new 'Welcome to Sensible Cinema!' + (we_are_in_create_mode ? " Hover over buttons for tooltip \"help\" descriptions." : "")
|
139
|
-
happy = Font.new("Tahoma", Font::PLAIN, 11)
|
140
|
-
jlabel.setFont(happy)
|
141
|
-
jlabel.set_bounds(44,44,460,14)
|
142
|
-
panel.add jlabel
|
143
|
-
@starting_button_y = 120
|
144
|
-
@button_width = 400
|
145
|
-
|
146
|
-
## BUTTONS ##
|
147
|
-
|
148
|
-
@mplayer_edl = new_jbutton( "Watch DVD/file edited on computer (realtime -- mplayer EDL)", false)
|
149
|
-
@mplayer_edl.tool_tip = "This will watch your DVD in realtime from your computer while skipping/muting the questionable scenes."
|
150
|
-
@mplayer_edl.on_clicked {
|
151
|
-
do_mplayer_edl
|
152
|
-
}
|
125
|
+
|
126
|
+
def setup_advanced_buttons
|
153
127
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
128
|
+
add_text_line 'Realtime create Options:'
|
129
|
+
|
130
|
+
@create_dot_edl = new_jbutton( "Create a moviefilename.edl file", true)
|
131
|
+
@create_dot_edl.tool_tip = <<-EOL
|
132
|
+
Create a moviefilename.edl file (corresponding to moviefilename.some_ext which already exists)
|
133
|
+
XBMC/smplayer (smplayer can be used by WMC plugins, etc.) "automagically detect",
|
134
|
+
if it exists, and automatically use it .edl to show that file edited played back.
|
159
135
|
EOL
|
160
|
-
@
|
161
|
-
|
136
|
+
@create_dot_edl.on_clicked {
|
137
|
+
filename_mpg = new_existing_file_selector_and_select_file( "pick moviefile (like abc.mpg)")
|
138
|
+
assert_ownership_dialog
|
139
|
+
edl_filename = new_existing_file_selector_and_select_file( "Pick EDL file", EDL_DIR)
|
140
|
+
descriptors = EdlParser.parse_file edl_filename
|
141
|
+
# LODO these timings...DRY up...plus is XBMC the same? what about on a slower computer?
|
142
|
+
edl_contents = MplayerEdl.convert_to_edl descriptors, add_secs_end = 0.0, add_secs_beginning = 0.5, splits = []
|
143
|
+
output_file = filename_mpg.gsub(/\.[^\.]+$/, '') + '.edl'
|
144
|
+
File.write(output_file, edl_contents)
|
145
|
+
raise unless File.exist?(output_file)
|
146
|
+
show_blocking_message_dialog("created #{output_file}")
|
162
147
|
}
|
163
|
-
|
148
|
+
|
164
149
|
@create_new_edl_for_current_dvd = new_jbutton("Create new Delete List for a DVD", true,
|
165
150
|
"If your DVD doesn't have an EDL created for it, this will be your first step--create an EDL file for it.")
|
166
151
|
@create_new_edl_for_current_dvd.on_clicked do
|
167
152
|
create_brand_new_edl
|
168
153
|
end
|
169
|
-
|
170
|
-
@open_help_file = new_jbutton("View Sensible Cinema Documentation", false).on_clicked do
|
171
|
-
system_blocking("explorer \"#{__DIR__.to_filename}..\\documentation\"") rescue nil # says it fails in error...
|
172
|
-
end
|
173
|
-
|
174
|
-
add_text_line 'Realtime create Options:'
|
175
154
|
|
176
155
|
@open_list = new_jbutton("Open/Edit a previously created Delete List", true, "If your DVD has a previously existing EDL for it, you can open it to edit it with this button.")
|
177
156
|
@open_list.on_clicked {
|
@@ -208,7 +187,7 @@ module SensibleSwing
|
|
208
187
|
# raise 'todo' # TODO
|
209
188
|
# }
|
210
189
|
|
211
|
-
# TODO "Watch a file using an EDL on it"
|
190
|
+
# TODO button "Watch a file using an EDL on it"
|
212
191
|
|
213
192
|
|
214
193
|
@display_unique = new_jbutton( "Display current DVD's unique ID", true )
|
@@ -256,8 +235,7 @@ module SensibleSwing
|
|
256
235
|
open_file_to_edit_it EdlTempFile
|
257
236
|
}
|
258
237
|
|
259
|
-
|
260
|
-
add_text_line 'Create Options that first create a local intermediary file unless it already exists:'
|
238
|
+
add_text_line 'Create Options that first create/use a local intermediary file:'
|
261
239
|
|
262
240
|
@preview_section = new_jbutton( "Preview a certain time frame from fulli file (edited)", true )
|
263
241
|
@preview_section.tool_tip = <<-EOL
|
@@ -310,15 +288,63 @@ module SensibleSwing
|
|
310
288
|
thread = do_mplayer_edl( "smplayer_portable #{nice_file}") # note the smplayer, but it's for the fast file...
|
311
289
|
}
|
312
290
|
|
291
|
+
end
|
292
|
+
|
293
|
+
def initialize
|
294
|
+
super "Sensible-Cinema #{VERSION} (GPL)"
|
295
|
+
if !(Storage['main_license_accepted'] == VERSION)
|
296
|
+
force_accept_license_first
|
297
|
+
end
|
298
|
+
|
299
|
+
setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
|
300
|
+
panel = JPanel.new
|
301
|
+
@panel = panel
|
302
|
+
@buttons = []
|
303
|
+
panel.set_layout nil
|
304
|
+
add panel # why can't I just slap these down?
|
305
|
+
|
306
|
+
jlabel = JLabel.new 'Welcome to Sensible Cinema!' + (we_are_in_create_mode ? " Hover over buttons for tooltip \"help\" descriptions." : "")
|
307
|
+
happy = Font.new("Tahoma", Font::PLAIN, 11)
|
308
|
+
jlabel.setFont(happy)
|
309
|
+
jlabel.set_bounds(44,44,460,14)
|
310
|
+
panel.add jlabel
|
311
|
+
@starting_button_y = 120
|
312
|
+
@button_width = 400
|
313
|
+
|
314
|
+
## BUTTONS ##
|
315
|
+
|
316
|
+
@mplayer_edl = new_jbutton( "Watch DVD/file edited on computer (realtime -- mplayer EDL)", false)
|
317
|
+
@mplayer_edl.tool_tip = "This will watch your DVD in realtime from your computer while skipping/muting the questionable scenes."
|
318
|
+
@mplayer_edl.on_clicked {
|
319
|
+
do_mplayer_edl
|
320
|
+
}
|
321
|
+
|
322
|
+
@create = new_jbutton( "Create edited copy of a DVD's file on Your Hard Drive", false)
|
323
|
+
@create.tool_tip = <<-EOL
|
324
|
+
This grabs from your DVD and creates a new file on your hard disk like dvd_name_edited.mpg for you to watch later.
|
325
|
+
The file you create will contain the whole movie edited.
|
326
|
+
It takes quite awhile maybe 2 hours.
|
327
|
+
EOL
|
328
|
+
@create.on_clicked {
|
329
|
+
do_copy_dvd_to_hard_drive false
|
330
|
+
}
|
331
|
+
|
332
|
+
@open_help_file = new_jbutton("View Sensible Cinema Documentation", false).on_clicked do
|
333
|
+
system_blocking("explorer \"#{__DIR__.to_filename}..\\documentation\"") rescue nil # declares it fails, in error...
|
334
|
+
end
|
335
|
+
|
336
|
+
setup_advanced_buttons
|
337
|
+
|
313
338
|
add_text_line 'Contact:'
|
314
339
|
|
315
|
-
@upload = new_jbutton("Upload
|
316
|
-
@upload.tool_tip = "We welcome all feedback
|
340
|
+
@upload = new_jbutton("Submit feedback/Upload Anything/Request Help", false) # keep this one last! :)
|
341
|
+
@upload.tool_tip = "We welcome all feedback!\nQuestion, comments, request help.\nAlso if you create a new EDL, please submit it back to us so that others can benefit from it later!"
|
317
342
|
@upload.on_clicked {
|
318
343
|
system_non_blocking("start mailto:sensible-cinema@googlegroups.com")
|
319
344
|
system_non_blocking("start http://groups.google.com/group/sensible-cinema")
|
320
345
|
}
|
321
346
|
|
347
|
+
|
322
348
|
|
323
349
|
@progress_bar = JProgressBar.new(0, 100)
|
324
350
|
@progress_bar.set_bounds(44,@starting_button_y,@button_width,23)
|
@@ -454,7 +480,7 @@ module SensibleSwing
|
|
454
480
|
config_path = set_smplayer_opts " " # smplayer doesn't take -osdlevel 2 sniff...
|
455
481
|
exe = "smplayer_portable -config-path \"#{File.dirname config_path}\" "
|
456
482
|
end
|
457
|
-
command = "#{exe} dvdnav://#{title_track_maybe_nil}/#{drive} -osd-fractions 2 -nocache "
|
483
|
+
command = "#{exe} dvdnav://#{title_track_maybe_nil}/#{drive} -osd-fractions 2 -mouse-movements -nocache "
|
458
484
|
p command
|
459
485
|
@play_smplayer_warn ||= show_non_blocking_message_dialog "Directions:
|
460
486
|
'o' key: turn on on-screen-display timestamps (note: these are 30 fps timestamps so will need to be converted to use).
|
@@ -485,7 +511,7 @@ module SensibleSwing
|
|
485
511
|
@popup ||= show_non_blocking_message_dialog("About to run mplayer EDL. To control it, use\n space for pause,\n f for full screen,\n arrow keys to seek.")
|
486
512
|
# LODO dry up mplayer dvd opts...
|
487
513
|
if OS.windows?
|
488
|
-
play_this_mplayer ||= "mplayer -nocache dvdnav://#{title_track} "
|
514
|
+
play_this_mplayer ||= "mplayer -mouse-movements -nocache dvdnav://#{title_track} "
|
489
515
|
else
|
490
516
|
# macports' mplayer has no dvdnav ??
|
491
517
|
play_this_mplayer ||= "mplayer dvd://#{title_track} "
|
@@ -501,8 +527,10 @@ module SensibleSwing
|
|
501
527
|
Thread.new { system_blocking command; @popup.dispose }
|
502
528
|
end
|
503
529
|
|
504
|
-
def
|
505
|
-
|
530
|
+
def assert_ownership_dialog
|
531
|
+
message = "Do you certify you own the DVD this came of and have it in your possession?"
|
532
|
+
title = "Verify ownership"
|
533
|
+
returned = JOptionPane.showConfirmDialog self, message, title, JOptionPane::YES_NO_CANCEL_OPTION
|
506
534
|
assert_confirmed_dialog returned, nil
|
507
535
|
end
|
508
536
|
|
@@ -701,10 +729,10 @@ module SensibleSwing
|
|
701
729
|
out = FileDialog.new(self)
|
702
730
|
out.set_title title
|
703
731
|
dir ||= Storage[caller.inspect]
|
704
|
-
out.set_directory dir
|
732
|
+
out.set_directory dir.to_filename if dir
|
705
733
|
got = out.go
|
706
|
-
raise 'cancelled choosing existing file' unless got # I think we always want to raise
|
707
|
-
Storage[caller.inspect] = File.dirname(got)
|
734
|
+
raise 'cancelled choosing existing file method' unless got # I think we always want to raise...
|
735
|
+
Storage[caller.inspect] = File.dirname(got)
|
708
736
|
got
|
709
737
|
end
|
710
738
|
|
@@ -975,7 +1003,7 @@ module SensibleSwing
|
|
975
1003
|
if used_local_file_option
|
976
1004
|
raise unless selected_idx == 0 # it was our only option...
|
977
1005
|
filename = new_existing_file_selector_and_select_file("Select yer previously grabbed from DVD file")
|
978
|
-
|
1006
|
+
assert_ownership_dialog
|
979
1007
|
@_choose_dvd_drive_or_file = [filename, File.basename(filename), NonDvd]
|
980
1008
|
else
|
981
1009
|
disk = opticals[selected_idx]
|
@@ -1,3 +1,15 @@
|
|
1
|
+
== 0.23.6 ==
|
2
|
+
|
3
|
+
Added capability/functionality to create files used in other players to automatically cut out bad scenes.
|
4
|
+
It now converts from one EDL format (ours) to another (mplayer), and saves it away as filename.mpg -> filename.edl
|
5
|
+
Now other players, like Windows Media Center, can playback files edited. Just use a plugin like mymovies,
|
6
|
+
instruct it to use smplayer as the default file player, create these .edl files, and voila, realtime playback
|
7
|
+
within a high quality media collection manager, on the fly, without much modification necessary.
|
8
|
+
|
9
|
+
Note also that work has been to convert across a wide variety of EDL formats: https://gist.github.com/52f5c6386fc67e9e6b6b
|
10
|
+
See also the history_and_related_works_list.txt file for a long list of related, previously existing works,
|
11
|
+
to get the full list to there.
|
12
|
+
|
1
13
|
== 0.23.5 ==
|
2
14
|
|
3
15
|
Cleanup some terminology/minor bug fix/usability fixes.
|
@@ -10,7 +10,8 @@ VLC also added playlists with optional start and stop positions per entry. Ffmp
|
|
10
10
|
Once I discovered all of these previously existing programs, I knew the right elements were ready for
|
11
11
|
something like sensible cinema.
|
12
12
|
|
13
|
-
See also the "related" section, and "motivation" section.
|
13
|
+
See also the "related" section, and "motivation" section. See also the change_log_with_feature_list.txt file, and several
|
14
|
+
blog entries I've posted historically.
|
14
15
|
|
15
16
|
Originally the project started as a prototype to "watch hulu (online) and netflix instant movies
|
16
17
|
edited" (it uses/used screen snapshots (of specific locations where the digits are expected, based on windows position)
|
@@ -86,6 +87,7 @@ http://forum.videolan.org/viewtopic.php?f=7&t=56998 VLC Media Player using EDL's
|
|
86
87
|
Corel WinDVD has "Quick Clip" settings for capturing from DVD.
|
87
88
|
Microsoft's built-in magnifier basically copies DVD's screen output if mouse is placed over playing DVD.
|
88
89
|
http://superuser.com/questions/85278/how-can-i-cut-scenes-out-of-a-dvd
|
90
|
+
moviemask once had several advanced features: http://theeditedmovieencyclopedia.blogspot.com/2008/06/cleaning-up-movies-part-2.html
|
89
91
|
http://blog.josephhall.com/2008/09/command-line-dvd-authoring-part-1.html
|
90
92
|
AviSynth can script dvd playback http://forum.doom9.org/archive/index.php/t-109558.html
|
91
93
|
ps3 media server has edl support: https://github.com/chocolateboy/PMS-EDL maybe would work with DVD's dunno
|
data/lib/edl_parser.rb
CHANGED
@@ -80,11 +80,9 @@ class EdlParser
|
|
80
80
|
def self.get_secs timestamp_string_begin, timestamp_string_end, add_begin, add_end, splits
|
81
81
|
answers = []
|
82
82
|
unless timestamp_string_begin
|
83
|
-
p 'BAD'
|
84
83
|
raise 'non begin'
|
85
84
|
end
|
86
85
|
unless timestamp_string_end
|
87
|
-
p 'BAD2', '', ''
|
88
86
|
raise 'non end'
|
89
87
|
end
|
90
88
|
for type, offset, multiplier in [[timestamp_string_begin, add_begin, -1], [timestamp_string_end, add_end, 1]]
|
data/lib/swing_helpers.rb
CHANGED
data/spec/notes
CHANGED
@@ -1,17 +1,28 @@
|
|
1
1
|
up next:
|
2
|
-
lighning exact frame to compare the two fulli's...
|
2
|
+
lighning exact frame to compare the two fulli's...and the DVD, and mplayer :P
|
3
3
|
|
4
|
-
|
5
|
-
apparently mymovies can use power dvd, which seems an external app... http://www.mymovies.dk/forum.aspx?g=posts&m=127771#127771
|
4
|
+
http://www.kdenlive.org/forum/xml-format-and-edls kdenlive supports EDL, apparently (video editor)
|
6
5
|
|
6
|
+
== upconvert mplayer ==
|
7
|
+
guess I prefer mplayer to VLC at this point anyway <sigh> EDL is just better...
|
8
|
+
is "-mc". It means "max A-V time correction per frame", and defaults to 0.01. For good input, you can go down even to 0.0001, but 0.001 i
|
9
|
+
-vop denoise3d
|
10
|
+
-vop hqdn3d
|
11
|
+
http://freshmeat.net/articles/fine-tuning-mplayer
|
7
12
|
|
8
|
-
== EDL plugins ==
|
13
|
+
== WMC/other EDL plugins ==
|
9
14
|
|
15
|
+
http://superuser.com/questions/34128/xbmc-with-media-player-classic-home-cinema
|
16
|
+
apparently mymovies can use power dvd, which seems an external app... http://www.mymovies.dk/forum.aspx?g=posts&m=127771#127771
|
10
17
|
http://forum.xbmc.org/showthread.php?t=28795 XBMC doesn't support real-time DVD EDL playback at all <sniff> oh wait maybe it does now... http://forum.xbmc.org/archive/index.php/t-69388.html
|
11
18
|
ps3ms edl might work too...
|
12
19
|
http://cybernetnews.com/cybernotes-skip-commercials-in-windows-media-center WMC can do it too kind of? might apply to the mymovies community...though looks a bit hard :P
|
13
20
|
(it uses http://babgvant.com/Wiki/view.aspx/DVRMSToolbox/Commercial_Skip_Addin )
|
14
|
-
|
21
|
+
mymovies/WMC to use external app...looks like maybe : http://www.mymovies.dk/forum.aspx?g=posts&t=10956
|
22
|
+
from http://www.mediasmartserver.net/2010/01/29/guide-using-mpc-hc-as-your-video-player-in-wmc-media-browser/ which itself uses the "media browser" plugin
|
23
|
+
appears that WMC *has* to use a plugin to launch an external app...and mymovies doesn't always even then [?]
|
24
|
+
is thereatek upconverting? forget it either way LOL
|
25
|
+
|
15
26
|
== subtitle accuracy ==
|
16
27
|
|
17
28
|
narnia dawn treader had 1 subtitle that was "hand crafted", had the wrong timestamps, but was more accurate.
|
@@ -424,7 +424,7 @@ module SensibleSwing
|
|
424
424
|
|
425
425
|
it "should only prompt for file selection once" do
|
426
426
|
prompted = false
|
427
|
-
@subject.stub(:
|
427
|
+
@subject.stub(:assert_ownership_dialog) {
|
428
428
|
prompted = true
|
429
429
|
}
|
430
430
|
yo( false ).should == 0 # choose a file, so never dvdid any dvd...
|
@@ -444,10 +444,10 @@ module SensibleSwing
|
|
444
444
|
end
|
445
445
|
|
446
446
|
it "should not show the normal buttons in create mode" do
|
447
|
-
MainWindow.new.buttons.length.should ==
|
447
|
+
MainWindow.new.buttons.length.should == 5
|
448
448
|
ARGV << "--create-mode"
|
449
|
-
MainWindow.new.buttons.length.should ==
|
450
|
-
ARGV.pop # test cleanup--why not :)
|
449
|
+
MainWindow.new.buttons.length.should == 17
|
450
|
+
ARGV.pop # post-test cleanup--why not :)
|
451
451
|
end
|
452
452
|
|
453
453
|
it "should read splits from the file" do
|
@@ -490,6 +490,19 @@ module SensibleSwing
|
|
490
490
|
click_button(:@play_smplayer)
|
491
491
|
end
|
492
492
|
|
493
|
+
it "should create" do
|
494
|
+
FileUtils.rm_rf 'yo.edl' # nothing up my sleeve.
|
495
|
+
prompted = false
|
496
|
+
@subject.stub(:assert_ownership_dialog) {
|
497
|
+
prompted = true
|
498
|
+
}
|
499
|
+
@subject.stub(:new_existing_file_selector_and_select_file).and_return("yo.mpg", "zamples\\edit_decision_lists\\dvds/edl_for_unit_tests.txt")
|
500
|
+
click_button(:@create_dot_edl)
|
501
|
+
assert File.exist? 'yo.edl'
|
502
|
+
assert prompted
|
503
|
+
end
|
504
|
+
|
505
|
+
|
493
506
|
end # describe MainWindow
|
494
507
|
|
495
508
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"name" => "Harry Potter Prisoner of Azkaban",
|
2
|
+
|
3
|
+
"mutes" => [
|
4
|
+
"00:04:05", "00:04:10", "something wrong w/ the pup",
|
5
|
+
],
|
6
|
+
|
7
|
+
"blank_outs" => [
|
8
|
+
"00:20:50", "00:21:25", "dementor a", "",
|
9
|
+
"00:21:40", "00:22:15", "dementor b", "",
|
10
|
+
"00:55:39", "00:56:05", "dementor c", "",
|
11
|
+
"01:06:56.5", "01:07:06.3", "anger", "",
|
12
|
+
"01:28:28", "01:29:50", "willow whomped", "",
|
13
|
+
"01:39:55", "01:40:13", "lupin xform", "",
|
14
|
+
"01:40:43", "01:41:15", "werewolf", "",
|
15
|
+
"01:43:30", "01:44:15", "scary dementors", "",
|
16
|
+
"01:58:40", "01:59:40", "werewolf chase", "",
|
17
|
+
# "02:00:33", "02:01:03", "dementors d", "",
|
18
|
+
],
|
19
|
+
|
20
|
+
"mplayer_dvd_splits" => ["01:15:39"],
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: sensible-cinema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.23.
|
5
|
+
version: 0.23.6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Roger Pack
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-07-01 00:00:00 -06:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -266,7 +266,6 @@ files:
|
|
266
266
|
- never_do
|
267
267
|
- ocr.todo_if_need_speed
|
268
268
|
- preamble
|
269
|
-
- sensible-cinema.gemspec
|
270
269
|
- spec/arse.srt
|
271
270
|
- spec/blanker.spec.rb
|
272
271
|
- spec/common.rb
|
@@ -337,6 +336,7 @@ files:
|
|
337
336
|
- zamples/edit_decision_lists/dvds/old_and_inaccurate/making marriage work.txt
|
338
337
|
- zamples/edit_decision_lists/dvds/old_and_inaccurate/star_trek_generations_hulu.txt
|
339
338
|
- zamples/edit_decision_lists/dvds/pack_wedding_2007-03-03.txt
|
339
|
+
- zamples/edit_decision_lists/dvds/potter_prisoner_of_azkaban.txt
|
340
340
|
- zamples/edit_decision_lists/dvds/sintel_open_source_blender.txt
|
341
341
|
- zamples/edit_decision_lists/dvds/tron_legacy.txt
|
342
342
|
- zamples/edit_decision_lists/dvds/turn_around_alma_younger.txt
|
data/sensible-cinema.gemspec
DELETED
@@ -1,232 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{sensible-cinema}
|
8
|
-
s.version = "0.23.5"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Roger Pack"]
|
12
|
-
s.date = %q{2011-06-30}
|
13
|
-
s.email = %q{rogerdpack@gmail.com}
|
14
|
-
s.executables = ["sensible-cinema", "sensible-cinema-cli"]
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE.TXT",
|
17
|
-
"README",
|
18
|
-
"TODO"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
"LICENSE.TXT",
|
22
|
-
"README",
|
23
|
-
"Rakefile",
|
24
|
-
"TODO",
|
25
|
-
"VERSION",
|
26
|
-
"_DO_NOT_RUN_IT_FROM_HERE_DOWNLOAD_THE_RELEASE_ZIP_FROM_SOURCEFORGE_INSTEAD",
|
27
|
-
"bin/sensible-cinema",
|
28
|
-
"bin/sensible-cinema-cli",
|
29
|
-
"business_ideas.txt",
|
30
|
-
"change_log_with_feature_list.txt",
|
31
|
-
"developer_how_to_contribute_to_the_project.txt",
|
32
|
-
"documentation/README.TXT",
|
33
|
-
"documentation/how_to_create_your_own_delete_lists.txt",
|
34
|
-
"documentation/how_to_get_files_from_dvd.txt",
|
35
|
-
"documentation/is_it_legal_to_copy_dvds.txt",
|
36
|
-
"documentation/troubleshooting.txt",
|
37
|
-
"experimental_online_player_ocr_readme.txt",
|
38
|
-
"go.bat",
|
39
|
-
"go.sh",
|
40
|
-
"go_ocr_tracker.bat",
|
41
|
-
"goc.bat",
|
42
|
-
"gplv3.txt",
|
43
|
-
"history_and_related_works_list.txt",
|
44
|
-
"legal/md5s.txt",
|
45
|
-
"legal/transcript_mute_vlc.txt",
|
46
|
-
"legal2",
|
47
|
-
"lib/add_any_bundled_gems_to_load_path.rb",
|
48
|
-
"lib/blanker.rb",
|
49
|
-
"lib/check_installed_mac.rb",
|
50
|
-
"lib/convert_thirty_fps.rb",
|
51
|
-
"lib/count_down_timer_jruby_swing.rb",
|
52
|
-
"lib/drive_info.rb",
|
53
|
-
"lib/edl_parser.rb",
|
54
|
-
"lib/fake_blanker.rb",
|
55
|
-
"lib/file_chooser.rb",
|
56
|
-
"lib/frame_accurate.rb",
|
57
|
-
"lib/keyboard_input.rb",
|
58
|
-
"lib/media_info_parser.rb",
|
59
|
-
"lib/mencoder_wrapper.rb",
|
60
|
-
"lib/mouse.rb",
|
61
|
-
"lib/mouse_forever.rb",
|
62
|
-
"lib/mplayer_edl.rb",
|
63
|
-
"lib/muter.rb",
|
64
|
-
"lib/ocr.rb",
|
65
|
-
"lib/overlayer.rb",
|
66
|
-
"lib/play_audio.rb",
|
67
|
-
"lib/screen_tracker.rb",
|
68
|
-
"lib/storage.rb",
|
69
|
-
"lib/subtitle_profanity_finder.rb",
|
70
|
-
"lib/swing_helpers.rb",
|
71
|
-
"lib/vlc_programmer.rb",
|
72
|
-
"never_do",
|
73
|
-
"ocr.todo_if_need_speed",
|
74
|
-
"preamble",
|
75
|
-
"sensible-cinema.gemspec",
|
76
|
-
"spec/arse.srt",
|
77
|
-
"spec/blanker.spec.rb",
|
78
|
-
"spec/common.rb",
|
79
|
-
"spec/convert_image.rb",
|
80
|
-
"spec/deity_end.srt",
|
81
|
-
"spec/dragon.srt",
|
82
|
-
"spec/drive_info.spec.rb",
|
83
|
-
"spec/edl_parser.spec.rb",
|
84
|
-
"spec/frame_accurate.spec.rb",
|
85
|
-
"spec/go_line.bat",
|
86
|
-
"spec/keyboard_input.spec.rb",
|
87
|
-
"spec/media_info_parser.spec.rb",
|
88
|
-
"spec/mencoder_wrapper.spec.rb",
|
89
|
-
"spec/mouse.spec.rb",
|
90
|
-
"spec/mplayer_edl.spec.rb",
|
91
|
-
"spec/muter.spec.rb",
|
92
|
-
"spec/notes",
|
93
|
-
"spec/ocr.spec.rb",
|
94
|
-
"spec/overlayer.spec.rb",
|
95
|
-
"spec/screen_tracker.spec.rb",
|
96
|
-
"spec/sensible_cinema_gui.spec.rb",
|
97
|
-
"spec/subtitle_profanity_finder.spec.rb",
|
98
|
-
"spec/swing_helpers.spec.rb",
|
99
|
-
"spec/test_yaml.yml",
|
100
|
-
"spec/tsmuxer.output",
|
101
|
-
"spec/vlc_programmer.spec.rb",
|
102
|
-
"template_bats/RUN SENSIBLE CINEMA CLICK HERE.bat",
|
103
|
-
"template_bats/_DO_NOT_RUN_IT_FROM_HERE_DOWNLOAD_THE_RELEASE_ZIP_FROM_SOURCEFORGE_INSTEAD",
|
104
|
-
"template_bats/advanced--create or edit sensible cinema delete list files.bat",
|
105
|
-
"todo.build_library.txt",
|
106
|
-
"todo.inventionzy.txt",
|
107
|
-
"todo.open_edl_list_org.txt",
|
108
|
-
"todo.propaganda",
|
109
|
-
"todo.subtitle",
|
110
|
-
"vendor/jruby-complete-1.6.2.jar",
|
111
|
-
"vendor/mac_dvdid/bin/dvdid",
|
112
|
-
"vendor/mac_dvdid/include/dvdid/dvdid.h",
|
113
|
-
"vendor/mac_dvdid/include/dvdid/dvdid2.h",
|
114
|
-
"vendor/mac_dvdid/include/dvdid/export.h",
|
115
|
-
"vendor/mac_dvdid/lib/libdvdid.0.dylib",
|
116
|
-
"vendor/mac_dvdid/lib/libdvdid.a",
|
117
|
-
"vendor/mac_dvdid/lib/libdvdid.dylib",
|
118
|
-
"vendor/mac_dvdid/lib/libdvdid.la",
|
119
|
-
"vendor/monkey.png",
|
120
|
-
"vendor/readme.txt",
|
121
|
-
"vendor/tsmuxer_1.10.6/licence.txt",
|
122
|
-
"www/index.html",
|
123
|
-
"zamples/edit_decision_lists/category descriptions.txt",
|
124
|
-
"zamples/edit_decision_lists/dvds/Harry Potter 2.txt",
|
125
|
-
"zamples/edit_decision_lists/dvds/bambi.txt",
|
126
|
-
"zamples/edit_decision_lists/dvds/big_buck_bunny_dvd.txt",
|
127
|
-
"zamples/edit_decision_lists/dvds/bob the builder pets in a pickle.txt",
|
128
|
-
"zamples/edit_decision_lists/dvds/bobs_big_plan.txt",
|
129
|
-
"zamples/edit_decision_lists/dvds/cool runnings.txt",
|
130
|
-
"zamples/edit_decision_lists/dvds/edl_for_unit_tests.txt",
|
131
|
-
"zamples/edit_decision_lists/dvds/example_delete_list.txt",
|
132
|
-
"zamples/edit_decision_lists/dvds/happiest baby on the block.txt",
|
133
|
-
"zamples/edit_decision_lists/dvds/how_to_train_your_dragon.txt",
|
134
|
-
"zamples/edit_decision_lists/dvds/kung_fu_panda_1.txt",
|
135
|
-
"zamples/edit_decision_lists/dvds/legend_of_the_guardians_the_owls_of_gahoole.txt",
|
136
|
-
"zamples/edit_decision_lists/dvds/making_marriage_work.txt",
|
137
|
-
"zamples/edit_decision_lists/dvds/narnia_voyage_of_the_dawn_treader.txt",
|
138
|
-
"zamples/edit_decision_lists/dvds/old_and_inaccurate/White Christmas.txt",
|
139
|
-
"zamples/edit_decision_lists/dvds/old_and_inaccurate/all_dogs_go_to_heaven.txt",
|
140
|
-
"zamples/edit_decision_lists/dvds/old_and_inaccurate/cars_disney.txt",
|
141
|
-
"zamples/edit_decision_lists/dvds/old_and_inaccurate/happy_feet.txt",
|
142
|
-
"zamples/edit_decision_lists/dvds/old_and_inaccurate/labyrinth.txt",
|
143
|
-
"zamples/edit_decision_lists/dvds/old_and_inaccurate/making marriage work.txt",
|
144
|
-
"zamples/edit_decision_lists/dvds/old_and_inaccurate/star_trek_generations_hulu.txt",
|
145
|
-
"zamples/edit_decision_lists/dvds/pack_wedding_2007-03-03.txt",
|
146
|
-
"zamples/edit_decision_lists/dvds/sintel_open_source_blender.txt",
|
147
|
-
"zamples/edit_decision_lists/dvds/tron_legacy.txt",
|
148
|
-
"zamples/edit_decision_lists/dvds/turn_around_alma_younger.txt",
|
149
|
-
"zamples/edit_decision_lists/dvds/zz_example_delete_list_that_has_no_cuts_in_it.txt",
|
150
|
-
"zamples/edit_decision_lists/netflix_instant/greatest_story_ever_told_netflix.txt",
|
151
|
-
"zamples/edit_decision_lists/old_not_yet_updated/example_edit_decision_list.txt",
|
152
|
-
"zamples/edit_decision_lists/old_not_yet_updated/youtube/gummy_bear_song_youtube.txt",
|
153
|
-
"zamples/edit_decision_lists/youtube/demo_mutes.txt",
|
154
|
-
"zamples/edit_decision_lists/youtube/nuki_song_youtube.txt",
|
155
|
-
"zamples/players/how_to_create_more_players.txt",
|
156
|
-
"zamples/players/hulu/total_length_over_an_hour.txt",
|
157
|
-
"zamples/players/netflix/netflix_firefox_non_maximized.txt",
|
158
|
-
"zamples/players/vlc/full_screened_total_length_over_an_hour.txt",
|
159
|
-
"zamples/players/vlc/windowed_total_length_over_an_hour.txt",
|
160
|
-
"zamples/players/vlc/windowed_total_length_under_an_hour.txt",
|
161
|
-
"zamples/players/youtube/full_screened_1024x768.txt",
|
162
|
-
"zamples/players/youtube/full_screened_1152x864.txt",
|
163
|
-
"zamples/players/youtube/full_screened_1680x1050.txt",
|
164
|
-
"zamples/players/youtube/normal_in_youtube.com.chrome.txt",
|
165
|
-
"zamples/players/youtube/note_these_assume_less_than_10_minutes_length.txt"
|
166
|
-
]
|
167
|
-
s.homepage = %q{http://github.com/rdp}
|
168
|
-
s.require_paths = ["lib"]
|
169
|
-
s.rubygems_version = %q{1.5.1}
|
170
|
-
s.summary = %q{an EDL scene-selector/bleeper that works with online players like hulu}
|
171
|
-
|
172
|
-
if s.respond_to? :specification_version then
|
173
|
-
s.specification_version = 3
|
174
|
-
|
175
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
176
|
-
s.add_runtime_dependency(%q<os>, [">= 0.9.3"])
|
177
|
-
s.add_runtime_dependency(%q<sane>, [">= 0.22.0"])
|
178
|
-
s.add_runtime_dependency(%q<rdp-win32screenshot>, [">= 0.0.7.3"])
|
179
|
-
s.add_runtime_dependency(%q<mini_magick>, [">= 3.1"])
|
180
|
-
s.add_runtime_dependency(%q<whichr>, [">= 0.3.6"])
|
181
|
-
s.add_runtime_dependency(%q<jruby-win32ole>, [">= 0"])
|
182
|
-
s.add_runtime_dependency(%q<rdp-ruby-wmi>, [">= 0"])
|
183
|
-
s.add_runtime_dependency(%q<plist>, [">= 0"])
|
184
|
-
s.add_runtime_dependency(%q<ffi>, [">= 0"])
|
185
|
-
s.add_development_dependency(%q<hitimes>, [">= 0"])
|
186
|
-
s.add_development_dependency(%q<rspec>, ["> 2"])
|
187
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
188
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
189
|
-
s.add_runtime_dependency(%q<hitimes>, [">= 0"])
|
190
|
-
s.add_runtime_dependency(%q<rspec>, [">= 0"])
|
191
|
-
s.add_runtime_dependency(%q<jeweler>, [">= 0"])
|
192
|
-
s.add_runtime_dependency(%q<rake>, [">= 0"])
|
193
|
-
else
|
194
|
-
s.add_dependency(%q<os>, [">= 0.9.3"])
|
195
|
-
s.add_dependency(%q<sane>, [">= 0.22.0"])
|
196
|
-
s.add_dependency(%q<rdp-win32screenshot>, [">= 0.0.7.3"])
|
197
|
-
s.add_dependency(%q<mini_magick>, [">= 3.1"])
|
198
|
-
s.add_dependency(%q<whichr>, [">= 0.3.6"])
|
199
|
-
s.add_dependency(%q<jruby-win32ole>, [">= 0"])
|
200
|
-
s.add_dependency(%q<rdp-ruby-wmi>, [">= 0"])
|
201
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
202
|
-
s.add_dependency(%q<ffi>, [">= 0"])
|
203
|
-
s.add_dependency(%q<hitimes>, [">= 0"])
|
204
|
-
s.add_dependency(%q<rspec>, ["> 2"])
|
205
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
206
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
207
|
-
s.add_dependency(%q<hitimes>, [">= 0"])
|
208
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
209
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
210
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
211
|
-
end
|
212
|
-
else
|
213
|
-
s.add_dependency(%q<os>, [">= 0.9.3"])
|
214
|
-
s.add_dependency(%q<sane>, [">= 0.22.0"])
|
215
|
-
s.add_dependency(%q<rdp-win32screenshot>, [">= 0.0.7.3"])
|
216
|
-
s.add_dependency(%q<mini_magick>, [">= 3.1"])
|
217
|
-
s.add_dependency(%q<whichr>, [">= 0.3.6"])
|
218
|
-
s.add_dependency(%q<jruby-win32ole>, [">= 0"])
|
219
|
-
s.add_dependency(%q<rdp-ruby-wmi>, [">= 0"])
|
220
|
-
s.add_dependency(%q<plist>, [">= 0"])
|
221
|
-
s.add_dependency(%q<ffi>, [">= 0"])
|
222
|
-
s.add_dependency(%q<hitimes>, [">= 0"])
|
223
|
-
s.add_dependency(%q<rspec>, ["> 2"])
|
224
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
225
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
226
|
-
s.add_dependency(%q<hitimes>, [">= 0"])
|
227
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
228
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
229
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|