sensible-cinema 0.23.0 → 0.23.1

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -13,19 +13,21 @@ It will pop up some windows where you choose what to do.
13
13
  Note: please install from the zip files at https://sourceforge.net/projects/sensible-cinema/files/
14
14
  and not from github's "download" button. See the "install" section, below, for finer grained details.
15
15
 
16
- Sensible cinema basically allows you to create an edited video version of the DVD, onto your hard drive, and you can watch it there.
16
+ Sensible cinema basically allows you to create an edited video version of the DVD, onto your hard drive,
17
+ and you can watch it there. It also has some realtime playback support via the use of EDL playback in some
18
+ popular video players.
17
19
 
18
20
  How? Sensible cinema basically takes the original DVD, slices out the bad parts, then combines it back
19
21
  into a new file and gives you the result.
20
- It is basically a linear editor [1] that applies Edit Decision Lists [2] to videos. It wraps
22
+ It is essentially a linear editor [1] that applies Edit Decision Lists [2] to videos. It wraps
21
23
  a few freely available open source programs [3] to accomplish the editing for you.
22
- It also has a few "realtime viewing" options available, again based on open source software [3].
24
+ Note that the process can take several hours, so budget some time for it.
25
+ It also has a few "realtime viewing" options available, again based on some freely available
26
+ open source software [3].
23
27
 
24
- Note that the whole process can take several hours, so budget some time for it.
25
-
26
- Also note that just because an edited video lacks profanity...does not immediately make it an inspiring experience.
27
- I'd suggest carefully evaluating your real values, and going with those.
28
- Sensible cinema does not a clean movie make of a dirty one. Don't watch it if it's not wholesome! Be nice to yourself!
28
+ On a more moral note, just because an edited video lacks profanity/sex scenes...does not immediately make it an inspiring experience.
29
+ I'd suggest carefully evaluating your real values/motives, and going with those.
30
+ Sensible cinema does not a clean movie make of a dirty one. Don't watch it if it's not uplifting! Be nice to yourself!
29
31
 
30
32
  dove.org and common sense media are good references for discovering the "uplifting" level of movies [4].
31
33
  kids-in-mind.com is also a good reference for profanity levels, though sometimes it misses profanities,
@@ -106,12 +108,10 @@ so it doesn't work for many casual users.
106
108
  Their filters sometimes don't cut out all undesired content (ex: Saints and
107
109
  Soldiers left several profanities in...which wasn't what I had
108
110
  expected). If your standards differ from theirs, you're out of luck.
109
- Others have noted that sometimes their edit timings (or perhaps DVD players)
110
- are slightly mismatched so that it will end up muting sections just previous to profanity, while
111
- not muting the profanity itself, or so I've heard. Clearplay apparently also runs a rather
111
+ Clearplay apparently also runs a rather
112
112
  confusing subscription policy, or so I'm told [1], and their DVD players that
113
113
  are a bit weak at times [2]. Their DVD players aren't quite as readily accessible (read:
114
- can't buy at walmart), nor as cheap to buy as some others.
114
+ can't buy them at walmart), nor as cheap to buy as some others.
115
115
  Clearplay also has little community collaboration/review (though you can email them feedback).
116
116
  They also did't have filters for all movies that I, at times, wanted to watch edited (Condorman and Tron
117
117
  lacking last time I checked...probably because they are too
@@ -182,7 +182,7 @@ realtime tracking, so I also included this ability.
182
182
  The playlist option is disabled in later releases, as it was deemed too user-non-friendly, and because VLC timing
183
183
  is "different" than standard DVD players, so I decided to just use standardized timing, though it worked fine
184
184
  for VLC playbacks.
185
- I replaced it with support for mplayer's EDL format
185
+ I replaced it with support for mplayer's EDL format, which works better, and has consistent timing, though is still a bit buggy.
186
186
 
187
187
  You can see a full list of other features that have been published and demonstrated
188
188
  in the accompanying file change_log_with_feature_list.txt. Each feature mentioned works
@@ -206,6 +206,7 @@ Normal DVD's versus "directors cut" versions of movies (one is at times preferab
206
206
  http://en.wikipedia.org/wiki/Edit_decision_list (it's a linear editing tool, after all--so see the vast list of those)
207
207
  Clean Flicks (used to) sell edited movies
208
208
  http://www.videoredo.com/en/index.htm lets you "cut out" offensive content (commercials et al) and burn DVD's from mpeg's/h264 streams
209
+ http://www.microsoft.com/windows/windowsmedia/howto/articles/device_control.aspx Windows Media Encoder supports EDL's by timestamp
209
210
  http://www.mplayerhq.hu/DOCS/HTML/en/edl.html
210
211
  http://www.sharewareconnection.com/fast-compress-content-and-anti-profanity.htm replaces profanity in web pages with euphemized content.
211
212
  http://www.oreillynet.com/sysadmin/blog/2005/06/make_your_own_phantom_edit_wit.html (mplayer has had this ability for awhile, with no complaints).
@@ -223,6 +224,7 @@ http://code.google.com/p/movie-content-editor (player written in Python, control
223
224
  http://forums.gbpvr.com/showthread.php?10606-Automated-Cutting-and-Transcoding-Guide-Using-Mencoder/page45
224
225
  http://www.imdb.com/swiki/special?ParentalGuideHelp (search for "scene description")
225
226
  http://www.mythtv.org/wiki/Removing_Commercials
227
+ showanalyzer http://www.dragonglobal.biz/showanalyzer.html and comskip analyze videos to look for "segments to cut out" automatically (commercials, in this case, but the principle still applies)
226
228
  Old-school: using the remote control with the pause, mute, stop, fast forward, and play buttons, along with previous knowledge of "questionable" scene locations
227
229
  The scissors and old VHS tapes (Clean Flicks' origin, if I remember correctly). http://www.familysafemedia.com/home_movie_editor.html (was a helper kit for cutting VHS tape)
228
230
  Windows Movie Maker. Allows for users to cut and copy scenes of movies. Really any editor can do this.
@@ -232,6 +234,7 @@ Microsoft's built-in magnifier basically copies DVD's screen output if mouse is
232
234
  http://superuser.com/questions/85278/how-can-i-cut-scenes-out-of-a-dvd
233
235
  http://blog.josephhall.com/2008/09/command-line-dvd-authoring-part-1.html
234
236
  AviSynth can script dvd playback http://forum.doom9.org/archive/index.php/t-109558.html
237
+ ps3 media server has edl support: https://github.com/chocolateboy/PMS-EDL maybe would work with DVD's dunno
235
238
  Anydvd HD's "magic file replacement" for DVD's/blu-ray's
236
239
  RiffTrax allows for an audio "overlay" to a DVD playback, have their own player to coordinate the two.
237
240
 
@@ -246,23 +249,15 @@ See first also the file "is_it_legal_to_copy_dvds.txt" for more information on l
246
249
 
247
250
  == Troubleshooting ==
248
251
 
249
- If you run into some snag, it possibly could have failed in "grabbing" the DVD, and only got part of it.
250
- Try cleaning your DVD and starting over (delete all files, start again).
252
+ If you run into some snag, try cleaning your DVD and starting over (delete all files, start again).
251
253
  Baking soda toothpaste might help with cleaning it.
252
254
  If it still errs, report it, along with a screen snapshot and steps of
253
255
  how to reproduce the problem, preferably. See the feedback section.
254
256
 
255
257
  It can fail also because a deletion is past end of DVD, or
256
- Also note that if your DVD has scratches that cause it to skip, the time signatures will be off after that point,
257
- so clean your discs and try again!
258
- "DVDNAV stream read error!"
259
- this typically means a dirty or scratched DVD.
260
-
261
258
  Also make sure you aren't out of disk space.
262
259
 
263
- Try playback in VLC Media Player.
264
-
265
- Also you could try another computer (desktop computers' DVD drives seem to work better at times than laptops')
260
+ Try playback in "VLC Media Player"
266
261
 
267
262
  You try to play back a sensible cinema-ized video file and it plays back without
268
263
  audio or video (example: windows media player)?
@@ -271,17 +266,21 @@ You try to play back a sensible cinema-ized video file and it plays back without
271
266
  to handle this type of audio. Not to fear, just download the "ffdshow tryouts" (google for it)
272
267
  and, when it gives you the option, be sure to check "mpeg2 video" and then
273
268
  it should "just work." You could also optionally just play the file in VLC Media Player or smplayer
274
- (there's a button for that). Installing "AC3Filter" may help if you have no audio.
269
+ (there's a button for that). Installing "AC3Filter" may help if you can hear no audio.
270
+ Really VLC Media Player is your best bet though.
275
271
 
276
272
  If the end result picture is too grainy/pixelated or if the overall process is too slow, let me know and I'll work on
277
273
  making it better. No really, I have some ideas, but want to see if there's need first for improvement in those areas.
278
274
 
275
+ Finally, report back! If there are problems that arise, I want to hear about them so we can help you through it.
276
+
279
277
  == Thanks ==
280
278
 
281
279
  Thanks to Jarmo for the win32-screenshot gem, the mini_magick gem authors, jruby guys, etc.
282
280
  The combination of these tools made programming this actually something of a pleasure,
283
281
  and a breeze cross platform.
284
- Sensible Cinema leverages code from lots of other projects (see LICENSE.TXT)--many thanks to the authors and maintainers of said libraries, and anybody else I forgot to mention.
282
+ Sensible Cinema leverages code from lots of other projects (see LICENSE.TXT)--many thanks to
283
+ the authors and maintainers of said libraries, and anybody else I forgot to mention.
285
284
 
286
285
  == Feedback/Development ==
287
286
 
data/Rakefile CHANGED
@@ -9,8 +9,9 @@ Jeweler::Tasks.new do |s|
9
9
  s.email = "rogerdpack@gmail.com"
10
10
  s.homepage = "http://github.com/rdp"
11
11
  s.authors = ["Roger Pack"]
12
+ s.add_dependency 'os', '>= 0.9.3'
12
13
  s.add_dependency 'sane', '>= 0.22.0'
13
- s.add_dependency 'rdp-win32screenshot', '>= 0.0.7.3' # was 0.8.0 ?
14
+ s.add_dependency 'rdp-win32screenshot', '>= 0.0.7.3'
14
15
  s.add_dependency 'mini_magick', '>= 3.1' # for ocr...
15
16
  s.add_dependency 'whichr', '>= 0.3.6'
16
17
  s.add_dependency 'jruby-win32ole'
@@ -124,19 +125,13 @@ end
124
125
  task 'deploy' do
125
126
  name = 'sensible-cinema-' + cur_ver + ".zip"
126
127
  p 'copying to ilab'
127
- sys("scp #{name} rdp@ilab1.cs.byu.edu:~/incoming")
128
+ sys "scp #{name} rdp@ilab1.cs.byu.edu:~/incoming"
128
129
  p 'creating sf dir'
130
+ sys "ssh rdp@ilab1.cs.byu.edu 'ssh -t rogerdpack,sensible-cinema@shell.sourceforge.net create'" # needed for the next command to work.
129
131
  sys "ssh rdp@ilab1.cs.byu.edu 'ssh rogerdpack,sensible-cinema@shell.sourceforge.net \"mkdir /home/frs/project/s/se/sensible-cinema/#{cur_ver}\"'"
130
132
  p 'copying into sf'
131
133
  sys "ssh rdp@ilab1.cs.byu.edu 'scp ~/incoming/#{name} rogerdpack,sensible-cinema@frs.sourceforge.net:/home/frs/project/s/se/sensible-cinema/#{cur_ver}/#{name}'"
132
- p 'copying over to rogerd...'
133
- # ugh ugh ughly
134
- c = "ssh rdp@ilab1.cs.byu.edu \"scp ~/incoming/#{name} wilkboar@freemusicformormons.com:~/www/rogerdpackt28/sensible-cinema/releases\""
135
- sys(c)
136
- p 'linking rogerd...'
137
- sys("ssh rdp@ilab1.cs.byu.edu 'ssh wilkboar@freemusicformormons.com \\\"rm \\\\~/www/rogerdpackt28/sensible-cinema/releases/latest-sensible-cinema.zip\\\"'")
138
- sys("ssh rdp@ilab1.cs.byu.edu 'ssh wilkboar@freemusicformormons.com \\\"ln -s \\~/www/rogerdpackt28/sensible-cinema/releases/#{name} \\\\~/www/rogerdpackt28/sensible-cinema/releases/latest-sensible-cinema.zip\\\"'")
139
- p 'successfully deployed! ' + cur_ver
134
+ p 'successfully deployed to sf only! ' + cur_ver
140
135
  end
141
136
 
142
137
  task 'gem_release' do
data/TODO CHANGED
@@ -3,15 +3,16 @@
3
3
  release: cheap inventionzy, and medium inventionzy
4
4
  release: C EDL
5
5
  compare netflix/blu-ray timings et al
6
+
6
7
  === loose ordering/eventually ===
7
- linearize
8
- supplement mplayer EDL with mine (mac users, just ffmpeg) ???
9
- update todo/docu
8
+ linearize [?] hmm...
9
+ re-update todo/all docu
10
10
  create web site/api-ify
11
11
  LLC
12
12
  if...back off to just the ffmpeg (plus an "[A,B]" viewer) only...but for now stick with just DVD playback [?] until people want more...
13
13
  no propaganda...
14
14
  no auto subtitles...
15
+ try out on people
15
16
 
16
17
  == high prio like blocking bugs ==
17
18
 
@@ -30,18 +31,12 @@
30
31
  just in case youtube takes over the world
31
32
 
32
33
  == yes do ordered ==
33
- EDL for that fella...
34
- transfer from little stickie at....
35
34
  try buy delete lists from all x,y,z [?] maybe ask for them for free first? ()
36
- unit tests
37
- timing thing (notes file)
35
+ next timing thing (notes file)
38
36
 
39
37
  == yes do, un-ordered currently, from the various release options ==
40
- @macports: set notestxt \
41
- 13 "The MPlayer developers do not believe in making regular releases. \
42
- 14 You are likely better off using the mplayer-devel port." *before* and after (?) (double check it--would one way work ok? mplayer)
43
- @macports: does mplayer-devel enable dvdnav correctly?
44
38
 
39
+ unit tests all
45
40
  after remove the ability to "grab" update readme
46
41
  check if tmdb uses the full DVDID [?]
47
42
  just tell mac users "use tsmuxer this way" http://instantitunes.wordpress.com/2010/02/26/use-tsmuxer-on-snow-leopard
@@ -64,7 +59,7 @@
64
59
  "you could edit your file "raw" file "with avidemux, except video will be slightly off, but audio will be on"
65
60
  "VLC [or any GUI] is always slightly off."
66
61
  can I avoid requiring use of tsmuxer first?
67
- check with blu-ray...does it match timing-wise? sub-title wise?
62
+ check with blu-ray...do they match timing-wise? sub-title wise?
68
63
  donate tsmuxer, makemkv, http://ffmpeg.zeranoe.com/builds, mulder [?] smplayer
69
64
  auto tsmuxer/mediainfo [yikes]?
70
65
  MUXOPT --no-pcr-on-video-pid --new-audio-pes --vbr --vbv-len=500 V_MPEG-2, "G:\Video\c\title00.mkv", fps=23.976, ar=As source, track=1, lang=eng A_AC3, "G:\Video\c\title00.mkv", track=2, lang=eng
@@ -75,12 +70,10 @@
75
70
  youtube/hulu timings
76
71
  Watch...unedited smplayer button doesn't play from the right device if you have two :P
77
72
  get LLC before a "real" domain name
78
- add profanity filter this file button
79
- remove some buttons by default ?
80
73
  always force them to have a DVD in the drive :P
81
74
  upconverter
82
75
  split LLC's website+consumer
83
- employ: watch @ realtime after profanity filter first pass :P
76
+ employ instructions: watch @ realtime after profanity filter first pass :P
84
77
 
85
78
  clear runnings
86
79
  have ben and chris test it out, have it work, then ask about video quality
@@ -88,7 +81,7 @@
88
81
  try disney digital copy/amazon library "local download"...
89
82
  C player:
90
83
  use DVD navigator
91
- just use mplayer EDL syntax, plus a title track :)
84
+ just use mplayer EDL syntax, plus a title track (or just detect track change, if long enough, assume... :P) :)
92
85
  http://msdn.microsoft.com/en-us/library/ms787412(VS.85).aspx
93
86
  http://msdn.microsoft.com/en-us/library/dd407175(v=VS.85).aspx can be synchronous? might be a good first pass...
94
87
  PlayPeriodInTitleAutoStop EC_DVD_PLAYPERIOD_AUTOSTOP
@@ -101,10 +94,9 @@
101
94
  can come out of full screen more easily :P
102
95
  note pay for XP http://windows.microsoft.com/en-US/windows/downloads/windows-media-player/plug-ins search for the cheapest
103
96
  note to them windows vista/7: use ac3filter [?]
104
- if it doesn't parse something it loops *forever* "error pooping" "error pooping" [?]
105
97
  donate menumeter $
106
- tool tips for all buttons...tweak naming, too :P do something!
107
- fix/create the "play previously credited edited file for current DVD" button
98
+ tool tips for all buttons...tweak naming, too :P
99
+ fix/create the "play previously created edited file for current DVD" button
108
100
  vendorize smplayer * 2
109
101
  test if latest smplayer can work with edl and seek [?]
110
102
  be able to use smplayer, never just mplayer [yikes]
@@ -113,8 +105,6 @@
113
105
  ask for more beta testers for use, ask for more beta testers for creation, too
114
106
  beta release: rinse and repeat with various ppl
115
107
  youtube videos -> new account name
116
- vendorize a copy of ffmpeg, then they don't have to install imagemagick...also then we'll have ffprobe
117
- and sanity
118
108
  note "pay us/somebody to do it for you on the google group"?
119
109
  note "this is the full list--your help is wanted/needed"
120
110
  create a semi-accurate phantom edit EDL
@@ -127,18 +117,18 @@
127
117
  7: Windows Live Movie Maker
128
118
  previous: Windows Movie Maker
129
119
  re-run with several DVD's
130
- port to mac OS X--try everything out (all buttons), make sure it works...
131
- appears that, for now, have to just use mplayer dvd:// [sniff]
132
- ppc?
133
- app store mplayer perhaps? maybe tell the players to start supportin' dvdnav?
134
- bundle a copy of smplayer locally? huh?
135
- delete unedited.fulli file automatically
120
+ port to mac OS X--try everything out (all buttons), make sure all works...
121
+ appears that, for now, have to just use mplayer dvd://
122
+ ppc dvdid?
123
+ app store mplayer perhaps?
124
+ bundle a copy of smplayer locally?
125
+ typically delete unedited.fulli file automatically
136
126
  except if it's a specific scene run test...
137
- investigate: can I use zoomplayer max?
138
127
  the final "edited.avi" really "could/should" be playable in WMP...
139
- "profanity" => "language"
140
128
  it should clear old smplayer options on startup always, just in case, somehow
141
129
  use smplayer with my mplayer always...unless I'm moving away from that...
130
+ @makemkv: show us the title numbers, and number them *by those*
131
+ generic EDL run through should be through smplayer...do I need the other way around, even?
142
132
 
143
133
  == other lists ==
144
134
 
@@ -149,6 +139,7 @@
149
139
  todo.subtitle
150
140
 
151
141
  == DVD decide later to move up or down ==
142
+ canceling from the "dvd id" box exits the whole app LOL
152
143
 
153
144
  == DVD-realtime backlog once do, now not do, unordered ==
154
145
  can "blur out" scenes, or specific pixels on frames, like that guy bleeping out his own profanity just lips plus bleep
@@ -165,9 +156,21 @@
165
156
  mplayer EDL while grabbing, from grabbed :P
166
157
  note to them [in how_to_create]: can do the two types of preview at same time...concurrently...to save time...
167
158
  can I make playback more smooth by upping mplayer cache? does smplayer pass it a parameter?
159
+ lua VLC EDL plugin? LOL yeah right.
160
+ investigate: can I use zoomplayer max?
168
161
 
169
162
  == DVD/DVD-realtime backlog (totally unordered, some very low prio, basically all never do) ==
170
163
 
164
+ @macports: set notestxt \
165
+ 13 "The MPlayer developers do not believe in making regular releases. \
166
+ 14 You are likely better off using the mplayer-devel port." *before* and after (?) (double check it--would one way work ok? mplayer)
167
+ if it doesn't parse a file you choose it annoyingly loops *forever* "error pooping" "error pooping" [?]
168
+ "real" dvdid for blu-ray, can work with them (once I figure out timing info...)
169
+ accept the "user inputable" profanities, based on the DVD (like "thor" or what not...)
170
+ can I train the ps3ms to play a real DVD, with EDL ?
171
+ create an XBMC plugin that auto-searches for...ummm...uh...filters for you? huh? some type of plugin?
172
+ just create the side by side .EDL for various files for people.
173
+ make a mymovies plugin to auto-use EDL's somehow... ?
171
174
  auto download subtitles from opensubtitles somehow err other...
172
175
  an almost rifftrax that...says "here overlay x, change normal volume to 50% during that time..."
173
176
  check if tmdb needs some type of upload...hmm...to save them... ask that one guy if I can bribe him into doing it? dvdxml? dvdid.info?
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.23.0
1
+ 0.23.1
@@ -35,6 +35,7 @@ require_relative '../lib/storage'
35
35
  require_relative '../lib/edl_parser'
36
36
  require_relative '../lib/mplayer_edl'
37
37
  require_relative '../lib/play_audio'
38
+ require_relative '../lib/subtitle_profanity_finder'
38
39
 
39
40
  require 'tmpdir'
40
41
  require_relative '../lib/swing_helpers'
@@ -71,17 +72,23 @@ module SensibleSwing
71
72
 
72
73
  class MainWindow < JFrame
73
74
 
74
- def new_jbutton title, only_on_create_mode, always_add = false
75
+ def we_are_in_create_mode
76
+ ARGV.index("--create-mode")
77
+ end
78
+
79
+ # currently advanced mode only *adds* buttons
80
+ def new_jbutton title, only_on_create_mode, tooltip = nil
75
81
  button = JButton.new title
82
+ button.tool_tip= tooltip
76
83
  button.set_bounds(44, @starting_button_y, @button_width, 23)
77
-
78
- if ARGV.index("--create-mode")
79
- always_add = true if only_on_create_mode
84
+ add = true
85
+ if we_are_in_create_mode
86
+ add = true
80
87
  else
81
- always_add = true if !only_on_create_mode
88
+ add = false if only_on_create_mode
82
89
  end
83
90
 
84
- if always_add
91
+ if add
85
92
  increment_button_location
86
93
  @panel.add button
87
94
  @buttons << button
@@ -92,17 +99,21 @@ module SensibleSwing
92
99
  def increment_button_location
93
100
  @starting_button_y += 30
94
101
  end
95
-
96
- Storage = Storage.new("sensible_cinema")
97
102
 
98
- def initialize
99
- super "Sensible-Cinema #{VERSION} (GPL)"
100
- if !(Storage['main_license_accepted'] == VERSION)
103
+ def force_accept_license_first
101
104
  require_blocking_license_accept_dialog 'Sensible Cinema', 'gplv3', 'http://www.gnu.org/licenses/gpl.html', 'Sensible Cinema license agreement',
102
105
  "Sensible Cinema is distributed under the gplv3.\nBY CLICKING \"accept\" YOU SIGNIFY THAT YOU HAVE READ, UNDERSTOOD AND AGREED TO ABIDE BY THE TERMS OF THIS AGREEMENT"
103
106
  require_blocking_license_accept_dialog 'Sensible Cinema', 'is_it_legal_to_copy_dvds.txt file', File.expand_path(File.dirname(__FILE__) + "/../is_it_legal_to_copy_dvds.txt"),
104
107
  'is_it_legal_to_copy_dvds.txt file', 'I acknowledge that I have read, understand, accept and agree to abide by the implications noted in the is_it_legal_to_copy_dvds.txt file'
105
108
  Storage['main_license_accepted'] = VERSION
109
+ end
110
+
111
+ Storage = Storage.new("sensible_cinema")
112
+
113
+ def initialize
114
+ super "Sensible-Cinema #{VERSION} (GPL)"
115
+ if !(Storage['main_license_accepted'] == VERSION)
116
+ force_accept_license_first
106
117
  end
107
118
 
108
119
  setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
@@ -112,22 +123,43 @@ module SensibleSwing
112
123
  panel.set_layout nil
113
124
  add panel # why can't I just slap these down?
114
125
 
115
- jlabel = JLabel.new 'Welcome to Sensible Cinema!'
126
+ jlabel = JLabel.new 'Welcome to Sensible Cinema!' + (we_are_in_create_mode ? " Hover over buttons for descriptions." : "")
116
127
  happy = Font.new("Tahoma", Font::PLAIN, 11)
117
128
  jlabel.setFont(happy)
118
- jlabel.set_bounds(44,44,160,14)
129
+ jlabel.set_bounds(44,44,360,14)
119
130
  panel.add jlabel
120
131
  @starting_button_y = 120
121
132
  @button_width = 400
122
133
 
123
134
  ## BUTTONS ##
124
135
 
125
- @create_new_edl_for_current_dvd = new_jbutton("Create new Delete List for a DVD", true)
136
+ @mplayer_edl = new_jbutton( "Watch DVD edited on computer (realtime -- mplayer EDL)", false)
137
+ @mplayer_edl.tool_tip = "This will watch your DVD in realtime on your computer while skipping/muting the questionable scenes."
138
+ @mplayer_edl.on_clicked {
139
+ do_mplayer_edl
140
+ }
141
+
142
+ @create = new_jbutton( "Create edited copy of DVD on Your Hard Drive, from a DVD", false)
143
+ @create.tool_tip = <<-EOL
144
+ This grabs from your DVD and creates a new file on your hard disk like dvd_name_edited.mpg for you to watch later.
145
+ The file you create will contain the whole movie edited.
146
+ It takes quite awhile maybe 2 hours.
147
+ EOL
148
+ @create.on_clicked {
149
+ do_copy_dvd_to_hard_drive false
150
+ }
151
+
152
+ @create_new_edl_for_current_dvd = new_jbutton("Create new Delete List for a new DVD", true,
153
+ "If your DVD doesn't have an EDL created for it, this will be your first step--create a new EDL file for it.")
126
154
  @create_new_edl_for_current_dvd.on_clicked do
127
155
  create_brand_new_edl
128
156
  end
129
157
 
130
- @open_list = new_jbutton("Open/Edit a Delete List", true)
158
+ @open_help_file = new_jbutton("open how_to_get_files_from_dvd.txt file", false).on_clicked do
159
+ open_file_to_edit_it("how_to_get_files_from_dvd.txt")
160
+ end
161
+
162
+ @open_list = new_jbutton("Open/Edit a previously existing Delete List", true, "If your DVD has a previously existing EDL for it, you can open it to edit it with this button.")
131
163
  @open_list.on_clicked {
132
164
  dialog = FileDialog.new(self, "Pick file to edit")
133
165
  dialog.set_directory EDL_DIR
@@ -135,22 +167,29 @@ module SensibleSwing
135
167
  open_file_to_edit_it filename if filename
136
168
  }
137
169
 
138
-
139
- @create = new_jbutton( "Create edited copy of DVD on Your Hard Drive, from a DVD", false )
140
- @create.on_clicked {
141
- do_copy_dvd_to_hard_drive false
142
- }
143
-
144
- @mplayer_edl = new_jbutton( "Watch DVD edited (realtime -- mplayer EDL)", false, true )
145
- @mplayer_edl.on_clicked {
146
- do_mplayer_edl
147
- }
148
-
149
- @play_smplayer = new_jbutton( "Watch DVD unedited (realtime smplayer)", true).on_clicked {
170
+ @play_smplayer = new_jbutton( "Watch full DVD unedited (realtime smplayer)", true)
171
+ @play_smplayer.tool_tip = <<-EOL
172
+ This will play the DVD unedited within smplayer.
173
+ NB it will default to title 1, so updated your EDL file that matches this DVD with the proper title if this doesn't work for you
174
+ i.e. if it just plays a single preview title or what not, and not the main title, you need to change this value.
175
+ This is useful if you want to just kind of watch the movie to enjoy it, and look for scenes to cut out.
176
+ You can use the built-in OSD (on-screen-display) to see what time frame the questionable scenes are at
177
+ (type "o" to toggle it). However, just realize that the OSD is in 30 fps, and our time stamps are all in 29.97
178
+ fps, so you'll need to convert it to be able to use it in a file.
179
+ EOL
180
+ @play_smplayer.on_clicked {
150
181
  play_dvd_smplayer_unedited
151
182
  }
152
183
 
153
- @play_mplayer_raw = new_jbutton( "Watch DVD unedited (realtime mplayer--useful for subtitle timing)", true).on_clicked {
184
+ @play_mplayer_raw = new_jbutton( "Watch full DVD unedited (realtime mplayer)", true)
185
+ @play_mplayer_raw.tool_tip = <<-EOL
186
+ This is also useful for comparing subtitle files to see
187
+ if they have accurate timings.
188
+ If you turn on subtitles (v button), then compare your file at say, the 1 hour mark, or 2 hour mark,
189
+ with the subtitles that mplayer displays, it *should* match exactly with the output in the command line,
190
+ like "A: 3600.0" should match your subtitle line of approximately "01:00:00,000"
191
+ EOL
192
+ @play_mplayer_raw.on_clicked {
154
193
  play_dvd_smplayer_unedited true
155
194
  }
156
195
 
@@ -159,31 +198,40 @@ module SensibleSwing
159
198
  # }
160
199
 
161
200
  @preview_section = new_jbutton( "Preview a certain time frame from file (edited)", true )
201
+ @preview_section.tool_tip = <<-EOL
202
+ This allows you to preview an edit easily.
203
+ It is the equivalent of saying \"watch this file edited from exactly minute x second y to minute z second q"
204
+ Typically if you want to test an edit, you can start a few seconds before, and end a few seconds after it, to test it precisely.
205
+ EOL
162
206
  @preview_section.on_clicked {
163
207
  do_copy_dvd_to_hard_drive true
164
208
  }
165
209
 
166
- @preview_section_unedited = new_jbutton("Preview a certain time frame from file (unedited)", true)
210
+ @preview_section_unedited = new_jbutton("Preview a certain time frame (unedited)", true)
211
+ @preview_section.tool_tip = "Allows you to view a certain time frame unedited (ex: 10:00 to 10:05), so you can narrow down to pinpoint where questionable scenes are, etc. This is the only way to view a specific scene if there are not cuts within that scene yet."
167
212
  @preview_section_unedited.on_clicked {
168
213
  do_copy_dvd_to_hard_drive true, false, true
169
214
  }
170
215
 
171
- @rerun_preview = new_jbutton( "Re-run most recently watched file preview time frame", true )
216
+ @rerun_preview = new_jbutton( "Re-run most recently watched preview time frame", true )
217
+ @rerun_preview.tool_tip = "This will re-run the preview that you most recently performed. Great for checking to see if you last edits were successful or not."
172
218
  @rerun_preview.on_clicked {
173
219
  repeat_last_copy_dvd_to_hard_drive
174
220
  }
175
221
 
176
- @fast_preview = new_jbutton( "fast preview all (smplayer EDL on file)", true).on_clicked {
222
+ @fast_preview = new_jbutton( "fast preview all (smplayer EDL on file)", true)
223
+ @fast_preview.tool_tip = "Plays smplayer with an EDL. \nThis gives you a rough estimate to see if your edits are accurate, and is really fast to seek, etc.\nThis is useful because you can't use mplayer on a DVD if it has any DVD timestamp splits in it [some DVD's are buggy]"
224
+ @fast_preview.on_clicked {
177
225
  success, wrote_to_here_fulli = do_copy_dvd_to_hard_drive false, true
178
226
  sleep 0.5 # lodo take out ???
179
227
  background_thread.join if background_thread # let it write out the original fulli, if necessary [?]
180
228
  nice_file = wrote_to_here_fulli #+ ".fast.mpg"
181
229
  if false#!File.exist?(nice_file)
182
230
  p = show_non_blocking_message_dialog("Creating quick lookup file--NB that for each changed deletion,
183
- you'll need to restart the fast preview SMplayer
184
- Also note that the start and end times will be slightly off if reality [delayed]
185
- Also note that while doing fast preview, it can be doing a normal preview as well
186
- in the background, simultaneously.")
231
+ you'll need to restart the fast preview SMplayer
232
+ Also note that the start and end times will be slightly off if reality [delayed]
233
+ Also note that while doing fast preview, it can be doing a normal preview as well
234
+ in the background, simultaneously.")
187
235
  unless system_blocking("ffmpeg -i #{wrote_to_here_fulli} -target ntsc-dvd #{nice_file}")
188
236
  File.delete nice_file
189
237
  raise 'create '
@@ -192,15 +240,9 @@ module SensibleSwing
192
240
  end
193
241
  set_smplayer_opts "-edl #{EdlTempFile}"
194
242
  thread = do_mplayer_edl( "smplayer_portable #{nice_file}") # note the smplayer, but it's for the fast file...
195
- Thread.new { # XXX do we need this?
196
- begin
197
- thread.join
198
- ensure
199
- set_smplayer_opts ''
200
- end
201
- }
202
243
  }
203
-
244
+
245
+ # TODO remove me...
204
246
  @watch_unedited = new_jbutton("Watch full DVD unedited (while simultaneously grabbing file to hard drive)", true)
205
247
  @watch_unedited.on_clicked {
206
248
  success_no_run, wrote_to_here_fulli = do_copy_dvd_to_hard_drive false, true, true
@@ -209,20 +251,45 @@ module SensibleSwing
209
251
  system_non_blocking command
210
252
  }
211
253
 
212
-
213
254
  # until I can let them know *why* they would ever need this button...
214
- @display_unique = new_jbutton( "Display a DVD's unique ID", true ).on_clicked {
255
+ @display_unique = new_jbutton( "Calculate DVD's unique ID", true )
256
+ @display_unique.tool_tip = "This is useful to setup a DVD's 'unique ID' within an EDL for it. If your EDL doesn't have a line like disk_unique_id => \"...\" then you will want to run this to add it in."
257
+ @display_unique.on_clicked {
215
258
  drive, volume, dvd_id = choose_dvd_drive
216
259
  # display it, allow them to copy and paste it out
217
260
  get_user_input("#{drive} #{volume} for your copying+pasting pleasure (highlight, then ctrl+c to copy)\n
218
261
  This is USED to identify a disk to match it to its EDL, later.", "\"disk_unique_id\" => \"#{dvd_id}\",")
219
262
  }
220
263
 
221
- @upload = new_jbutton("Upload/E-mail suggestion/Submit anything", true).on_clicked {
264
+ @upload = new_jbutton("Upload/E-mail suggestion/Submit anything", true)
265
+ @upload.tool_tip = "We welcome all feedback! For example if you create a new DVD EDL, please submit it back to us so that others can benefit from it!"
266
+ @upload.on_clicked {
222
267
  system_non_blocking("start mailto:sensible-cinema@googlegroups.com")
223
268
  system_non_blocking("start http://groups.google.com/group/sensible-cinema")
224
269
  }
225
270
 
271
+ @parse_srt = new_jbutton("Parse a subtitle file (.srt) to detect profanities", true)
272
+ @parse_srt.tool_tip = <<-EOL
273
+ You can download a .srt file and parse it to automaticaly search for profanities.
274
+ Basically download it from opensubtitles.org (possibly from other places, too),
275
+ (enter dvd name in the search box, click a result, click one from the list with an English flag, then click 'Download(zip)')
276
+ Once you download the zip, unzip it, and then compare the timestamps in it with those on the DVD (see the button "Watch DVD unedited (realtime mplayer)")
277
+ EOL
278
+ @parse_srt.on_clicked {
279
+ fc = new_filechooser
280
+ fc.set_title "Pick srt file:"
281
+ if old_dir = Storage['old_srt_dir']
282
+ fc.set_current_directory JFile.new(old_dir)
283
+ end
284
+ filename = fc.go
285
+ Storage['old_srt_dir'] = fc.get_current_directory.to_s
286
+ Storage['start_time']
287
+
288
+ parsed = SubtitleProfanityFinder.edl_output [filename]
289
+ File.write(EdlTempFile, "# add these into your mute section if they apply\n" + parsed)
290
+ open_file_to_edit_it EdlTempFile
291
+ }
292
+
226
293
  @progress_bar = JProgressBar.new(0, 100)
227
294
  @progress_bar.set_bounds(44,@starting_button_y,@button_width,23)
228
295
  @progress_bar.visible = false
@@ -231,9 +298,11 @@ module SensibleSwing
231
298
  increment_button_location
232
299
  increment_button_location
233
300
 
234
- @exit = new_jbutton("Exit", false, true).on_clicked {
235
- #self.close # don't waste time :P
301
+ @exit = new_jbutton("Exit", false, "Exits the application and kills any background processes that are running at all--don't exit unless you are done processing all the way!")
302
+ @exit.on_clicked {
303
+ Thread.new { self.close } # don't waste the time to close it :P
236
304
  kill_processes
305
+ puts 'Thank you for using Sensible Cinema.'
237
306
  java.lang.System.exit 0
238
307
  }
239
308
 
@@ -267,23 +336,23 @@ module SensibleSwing
267
336
  "name" => "#{english_name}",
268
337
 
269
338
  "mutes" => [
270
- # example line, uncomment the leading "#" to make it active
339
+ # an example line, uncomment the leading "#" to make it active
271
340
  # "0:00:01.0", "0:00:02.0", "profanity", "da..",
272
341
  ],
273
342
 
274
343
  "blank_outs" => [
275
- # example line, uncomment the leading "#" to make it active
344
+ # an example line, uncomment the leading "#" to make it active
276
345
  # "00:03:00.0" , "00:04:00.0", "violence", "of some sort",
277
346
  ],
278
347
 
279
348
  "volume_name" => "#{volume}",
280
349
  "disk_unique_id" => "#{dvd_id}",
281
- "dvd_title_track" => "1", # most DVD's use title 1. Not all do, though. If sensible-cinema plays anything except the main title (for example, a trailer), when you use it, see http://goo.gl/QHLIF to set this right.
350
+ "dvd_title_track" => "1", # most DVD's use title 1. Not all do, though. If sensible-cinema plays anything except the main title (for example, it plays a trailer), when you use it, see http://goo.gl/QHLIF to set this right.
282
351
  # "not edited out stuff" => "some violence",
283
352
  # "closing thoughts" => "still...",
284
- # "mplayer_dvd_splits" => ["59:59", "1:04:59"], # these are where, in mplayer, the DVD timestamp "resets" to zero for some reason (bug) http://goo.gl/yMfqX . [] is a valid option, if there are none.
353
+ # "mplayer_dvd_splits" => ["59:59", "1:04:59"], # in mplayer, the DVD timestamp "resets" to zero for some reason, see http://goo.gl/yMfqX to set this value right. Note that [] is valid, if there are no resets.
285
354
  EOL
286
- # frame0 is the name of our window LOL tough to avoid that one...
355
+ # frame0 is the name of our window LOL tough to avoid that collision...hmm...
287
356
  filename = EDL_DIR + "\\" + english_name.gsub(' ', '_') + '.txt'
288
357
  filename.downcase!
289
358
  File.write(filename, input) unless File.exist?(filename) # lodo let them choose name (?)
@@ -415,12 +484,12 @@ module SensibleSwing
415
484
  # cancel button stays the same...
416
485
 
417
486
  message ||= "Sensible Cinema requires a separately installed program (#{program}). You can install this program
418
- separately, or Sensible Cinema can download it for you.
419
- By clicking accept, below, you are confirming that you have read and agree to be bound by the
420
- terms of its license (the #{license_name}), located at #{license_url_should_also_be_embedded_by_you_in_message}.
421
- Click 'View License' to view it. If you do not agree to these terms, click 'Cancel'. You also agree that this is a
422
- separate program, with its own distribution, license, ownership and copyright.
423
- You agree that you are responsible for the download and use of this program, within sensible cinema or otherwise."
487
+ separately, or Sensible Cinema can download it for you.
488
+ By clicking accept, below, you are confirming that you have read and agree to be bound by the
489
+ terms of its license (the #{license_name}), located at #{license_url_should_also_be_embedded_by_you_in_message}.
490
+ Click 'View License' to view it. If you do not agree to these terms, click 'Cancel'. You also agree that this is a
491
+ separate program, with its own distribution, license, ownership and copyright.
492
+ You agree that you are responsible for the download and use of this program, within sensible cinema or otherwise."
424
493
 
425
494
  returned = JOptionPane.showConfirmDialog nil, message, title, JOptionPane::YES_NO_CANCEL_OPTION
426
495
  # 1 is view button was clicked
@@ -459,15 +528,15 @@ module SensibleSwing
459
528
  end
460
529
 
461
530
  def download_zip_to english_name, url, to_this
462
- download_7zip
463
- Dir.chdir('vendor/cache') do
464
- file_name = url.split('/')[-1]
465
- print "downloading #{english_name} ..."
466
- download(url, file_name)
467
- system_blocking("7za e #{file_name} -y -o#{to_this}")
468
- puts 'done ' + english_name
469
- # creates vendor/cache/mencoder/mencoder.exe...
470
- end
531
+ download_7zip
532
+ Dir.chdir('vendor/cache') do
533
+ file_name = url.split('/')[-1]
534
+ print "downloading #{english_name} ..."
535
+ download(url, file_name)
536
+ system_blocking("7za e #{file_name} -y -o#{to_this}")
537
+ puts 'done ' + english_name
538
+ # creates vendor/cache/mencoder/mencoder.exe...
539
+ end
471
540
  end
472
541
 
473
542
  require 'lib/check_installed_mac.rb'
@@ -497,7 +566,7 @@ module SensibleSwing
497
566
  download_zip_to "Mplayer/mencoder (6MB)", "http://downloads.sourceforge.net/project/mplayer-win32/MPlayer%20and%20MEncoder/revision%2033574/MPlayer-rtm-svn-33574.7z", "mencoder"
498
567
  end
499
568
 
500
- if ARGV.index('--create-mode')
569
+ if we_are_in_create_mode
501
570
  # they're going to want these dependencies
502
571
  if OS.windows?
503
572
  path = RubyWhich.new.which('smplayer_portable')
@@ -515,24 +584,28 @@ module SensibleSwing
515
584
  end
516
585
  end
517
586
  end
518
-
587
+
519
588
  def open_file_to_edit_it filename
520
- system_non_blocking "notepad \"#{filename}\""
589
+ if OS.windows?
590
+ system_non_blocking "notepad \"#{filename}\""
591
+ else
592
+ system_non_blocking "#{OS.open_file_command} \"#{filename}\""
593
+ end
521
594
  end
522
595
 
523
596
  def single_edit_list_matches_dvd dvd_id
524
597
  matching = Dir[EDL_DIR + '/*.txt'].select{|file|
525
598
  begin
526
599
  parse_edl(file)["disk_unique_id"] == dvd_id
527
- rescue SyntaxError
528
- # ignore poorly formed delete lists for the auto choose
529
- p 'warning, unable to parse:' + file
600
+ rescue SyntaxError => e
601
+ # ignore poorly formed delete lists for the auto choose phase...
602
+ p 'warning, unable to parse a file:' + file + " " + e.to_s
530
603
  false
531
604
  end
532
605
  }
533
606
  if matching.length == 1
534
607
  file = matching[0]
535
- p "selecting the one matching file #{file} #{dvd_id}"
608
+ p "selecting the one only matching EDL #{file} for this DVD ID: #{dvd_id}"
536
609
  file
537
610
  else
538
611
  nil
@@ -545,8 +618,12 @@ module SensibleSwing
545
618
  generate_and_run_bat_file *Storage['last_params']
546
619
  end
547
620
 
548
- def new_filechooser
549
- JFileChooser.new
621
+ def new_filechooser default_dir = nil
622
+ out = JFileChooser.new
623
+ if default_dir
624
+ out.set_current_directory JFile.new(default_dir)
625
+ end
626
+ out
550
627
  end
551
628
 
552
629
  def show_blocking_message_dialog(message, title = message.split("\n")[0], style= JOptionPane::INFORMATION_MESSAGE)
@@ -611,11 +688,22 @@ module SensibleSwing
611
688
  given
612
689
  end
613
690
 
691
+ def get_import_from_filename dvd_title, dvd_title_track
692
+ @_get_import_from_filename ||=
693
+ begin
694
+ file_from_chooser = new_filechooser Storage['get_import_from_filename_dir']
695
+ file_from_chooser.set_title "Please choose the file that is your ripped version of #{dvd_title} title ##{dvd_title_track} (.mpg or .ts--see how_to_use.txt)"
696
+ outgoing = file_from_chooser.go
697
+ Storage['get_import_from_filename_dir'] = File.dirname(outgoing)
698
+ outgoing
699
+ end
700
+ end
701
+
614
702
  def get_save_to_filename dvd_title
615
703
  @_get_save_to_filename ||=
616
704
  begin
617
705
  fc = new_filechooser
618
- fc.set_title "Pick where to save #{dvd_title} edited to"
706
+ fc.set_title "Pick where to save #{dvd_title} edited version as"
619
707
  save_to_file_name = dvd_title + ' edited version'
620
708
  save_to_file_name = save_to_file_name.gsub(' ', '_').gsub( /\W/, '') # no punctuation or spaces for now...
621
709
  fc.set_file(get_drive_with_most_space_with_slash + save_to_file_name)
@@ -644,8 +732,14 @@ module SensibleSwing
644
732
  # LODO allow for spaces in the save_to filename
645
733
  if should_prompt_for_start_and_end_times
646
734
  # only show this message once :)
647
- @show_block ||= show_blocking_message_dialog("Ok, let's preview just a portion of it. \nNote that you'll want to preview a section that wholly includes a deleted section in it\n For example, if it mutes from second 1 to second 10, you'll want to play from 00:00 to 00:12 or what not.\nAlso note that the first time you preview a section of a video, it will take a long time (like an hour) as it sets up the video for previewing.\nSubsequent previews will be faster, though, as long as you use the same filename.\n
648
- Also note that if you change your delete list, you'll need to close, and regenerate the video to see it with your new settings.", "Preview")
735
+ @show_block ||= show_blocking_message_dialog(<<-EOL, "Preview")
736
+ Ok, let's preview just a portion of it.
737
+ Note that you'll want to preview a section that wholly includes a deleted section in it.
738
+ For example, if it mutes from second 1 to second 10, you'll want to play from 00:00 to 00:12 or what not.
739
+ Also note that the first time you preview a section of a video, it will take a long time (like an hour) as it sets up the entire video for processing.
740
+ Subsequent previews will be faster, though, as long as you use the same filename, as it won't have to re-set it up for processing.
741
+ Also note that if you change your delete list, you'll need to close, and restart the video to be able to see it with your new settings.
742
+ EOL
649
743
  old_start = Storage['start_time']
650
744
  start_time = get_user_input("At what point in the video would you like to start your preview? (like 01:00 for starting at 1 minute)", Storage['start_time'])
651
745
  default_end = Storage['end_time']
@@ -661,11 +755,15 @@ module SensibleSwing
661
755
  Storage['start_time'] = start_time
662
756
  Storage['end_time'] = end_time
663
757
  end
664
- dvd_title = descriptors['name'] || dvd_volume_name
665
- save_to = get_save_to_filename dvd_title
666
- fulli = MencoderWrapper.calculate_final_filename save_to
758
+ dvd_friendly_name = descriptors['name']
759
+ raise 'no name?' unless dvd_friendly_name
760
+
761
+ dvd_title_track = get_title_track(descriptors)
762
+ file_from = get_import_from_filename dvd_friendly_name, dvd_title_track
763
+ save_to_edited = get_save_to_filename dvd_friendly_name
764
+ fulli = MencoderWrapper.calculate_fulli_filename save_to_edited
667
765
  if exit_early_if_fulli_exists
668
- if File.exist? fulli + ".done"
766
+ if fulli_dot_done_file_exists
669
767
  return [true, fulli]
670
768
  end
671
769
  # make it create a dummy response file for us :)
@@ -673,10 +771,9 @@ module SensibleSwing
673
771
  end_time = "00:01"
674
772
  end
675
773
 
676
- dvd_title_track = get_title_track(descriptors)
677
774
  should_run_mplayer = should_prompt_for_start_and_end_times || exit_early_if_fulli_exists
678
775
  require_deletion_entry = true unless watch_unedited
679
- generate_and_run_bat_file save_to, edit_list_path, descriptors, drive, dvd_title, start_time, end_time, dvd_title_track, should_run_mplayer, require_deletion_entry
776
+ generate_and_run_bat_file save_to_edited, edit_list_path, descriptors, file_from, dvd_friendly_name, start_time, end_time, dvd_title_track, should_run_mplayer, require_deletion_entry
680
777
  [false, fulli] # false means it's running in a background thread :P
681
778
  end
682
779
 
@@ -684,16 +781,21 @@ module SensibleSwing
684
781
  DriveInfo.get_drive_with_most_space_with_slash
685
782
  end
686
783
 
687
- # stubbable :)
688
- def get_mencoder_commands descriptors, drive, save_to, start_time, end_time, dvd_title_track, require_deletion_entry
689
- delete_partials = true unless start_time
690
- MencoderWrapper.get_bat_commands descriptors, drive, save_to, start_time, end_time, dvd_title_track, delete_partials, require_deletion_entry # delete partials...
784
+ def fulli_dot_done_file_exists? save_to_edited
785
+ fulli = MencoderWrapper.calculate_fulli_filename save_to_edited
786
+ File.exist?(fulli + ".done") # stinky!
787
+ end
788
+
789
+ # to make it stubbable :)
790
+ def get_mencoder_commands descriptors, file_from, save_to, start_time, end_time, dvd_title_track, require_deletion_entry
791
+ delete_partials = true unless start_time # in case anybody wants to look really really close [?]
792
+ MencoderWrapper.get_bat_commands descriptors, file_from, save_to, start_time, end_time, dvd_title_track, delete_partials, require_deletion_entry
691
793
  end
692
794
 
693
- def generate_and_run_bat_file save_to, edit_list_path, descriptors, drive, dvd_title, start_time, end_time, dvd_title_track, run_mplayer, require_deletion_entry
694
- Storage['last_params'] = [save_to, edit_list_path, descriptors, drive, dvd_title, start_time, end_time, dvd_title_track, run_mplayer, require_deletion_entry]
795
+ def generate_and_run_bat_file save_to, edit_list_path, descriptors, file_from, dvd_title, start_time, end_time, dvd_title_track, run_mplayer, require_deletion_entry
796
+ Storage['last_params'] = [save_to, edit_list_path, descriptors, file_from, dvd_title, start_time, end_time, dvd_title_track, run_mplayer, require_deletion_entry]
695
797
  begin
696
- commands = get_mencoder_commands descriptors, drive, save_to, start_time, end_time, dvd_title_track, require_deletion_entry
798
+ commands = get_mencoder_commands descriptors, file_from, save_to, start_time, end_time, dvd_title_track, require_deletion_entry
697
799
  rescue MencoderWrapper::TimingError => e
698
800
  show_blocking_message_dialog("Appears you chose a time frame with no deletion segment in it--please try again:" + e)
699
801
  return
@@ -704,14 +806,23 @@ module SensibleSwing
704
806
  temp_dir = Dir.tmpdir
705
807
  temp_file = temp_dir + '/vlc.temp.bat'
706
808
  File.write(temp_file, commands)
707
- popup = show_non_blocking_message_dialog(
708
- "Applying #{File.basename edit_list_path} \n against #{drive} (#{dvd_title}).\n" +
709
- "Copying to #{save_to}.\n" +
710
- "This could take quite awhile, and will prompt you and chime a noise when it is done.\n" +
711
- "You can close this window and continue working while it runs in the background.\n" +
712
- "NB that the created file will be playable only with VLC (possibly with smplayer, possibly with\n" +
713
- "Windows Media Player if you install ffdshow first with mpeg2 video checkbox checked.).",
714
- "OK")
809
+ popup_message = <<-EOL
810
+ Applying #{File.basename edit_list_path}
811
+ to #{file_from} (#{dvd_title}).
812
+ Copying to #{save_to}.
813
+ EOL
814
+ if !fulli_dot_done_file_exists save_to
815
+ popup_message += "This could take quite awhile (several hours), and will prompt you with a chime noise when it is done.\n
816
+ You can close this window and minimize sensible cinema and continue using your computer while it runs in the background."
817
+ end
818
+
819
+ if !start_time
820
+ # assume a full run..
821
+ popup_message += "\nNB that the created file will be playable only with VLC (possibly also with smplayer), but probably not with windows media player."
822
+ end
823
+
824
+
825
+ popup = show_non_blocking_message_dialog(popup_message, "OK")
715
826
 
716
827
  # allow our popups to still be serviced while it is running
717
828
  @background_thread = Thread.new {
@@ -749,7 +860,10 @@ module SensibleSwing
749
860
  system_non_blocking "smplayer_portable #{saved_to}"
750
861
  else
751
862
  show_file = "explorer /e,/select,\"#{File.expand_path(saved_to).to_filename}\""
752
- system_blocking show_file # returns immediately
863
+ begin
864
+ system_blocking show_file # returns immediately tho...
865
+ rescue => why_does_this_happen_ignore_this_exception_it_actually_succeeded
866
+ end
753
867
  PlayAudio.play(File.expand_path(File.dirname(__FILE__)) + "/../vendor/music.wav")
754
868
  show_blocking_message_dialog "Done--you may now watch file\n #{saved_to}\n in VLC player (or possibly smplayer)"
755
869
  end