sensible-cinema 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/TODO CHANGED
@@ -23,12 +23,9 @@
23
23
 
24
24
  == random backlog ... note: just plow forward, to "grab" available ideas...except that for now, just what *I* plan on needing for myself (filters for what I need/want). ==
25
25
 
26
- some real GUI...then I can have an 'edit preferences' button et al.
27
-
28
26
  "sav-ize"
29
- VLC can play from a playlist or batch file or multiples on command line or what not.
30
- VLC can save from said playlist to a single edited file.
31
-
27
+ GUI to make that actually feasible
28
+
32
29
  "ripperzy-ize"
33
30
  can rip from DVD and then edit that
34
31
  mplayer?
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.12.0
1
+ 0.13.0
Binary file
@@ -0,0 +1,38 @@
1
+ import java.awt.BorderLayout;
2
+ import java.awt.Dimension;
3
+ import java.awt.Point;
4
+ import java.awt.event.ActionEvent;
5
+ import java.awt.event.ActionListener;
6
+ import javax.swing.JButton;
7
+ import javax.swing.JDialog;
8
+ import javax.swing.JFrame;
9
+ import javax.swing.JLabel;
10
+ import javax.swing.JPanel;
11
+ public class AboutDialog extends JDialog implements ActionListener {
12
+ public AboutDialog(JFrame parent, String title, String message) {
13
+ super(parent, title, true);
14
+ if (parent != null) {
15
+ Dimension parentSize = parent.getSize();
16
+ Point p = parent.getLocation();
17
+ setLocation(p.x + parentSize.width / 4, p.y + parentSize.height / 4);
18
+ }
19
+ JPanel messagePane = new JPanel();
20
+ messagePane.add(new JLabel(message));
21
+ getContentPane().add(messagePane);
22
+ JPanel buttonPane = new JPanel();
23
+ JButton button = new JButton("OK");
24
+ buttonPane.add(button);
25
+ button.addActionListener(this);
26
+ getContentPane().add(buttonPane, BorderLayout.SOUTH);
27
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
28
+ pack();
29
+ setVisible(true);
30
+ }
31
+ public void actionPerformed(ActionEvent e) {
32
+ setVisible(false);
33
+ dispose();
34
+ }
35
+ public static void main(String[] a) {
36
+ AboutDialog dlg = new AboutDialog(new JFrame(), "title", "message");
37
+ }
38
+ }
Binary file
Binary file
Binary file
@@ -0,0 +1,67 @@
1
+
2
+ // : c14:ComboBoxes.java
3
+ // Using drop-down lists.
4
+ // <applet code=ComboBoxes width=200 height=125></applet>
5
+ // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
6
+ // www.BruceEckel.com. See copyright notice in CopyRight.txt.
7
+
8
+ import java.awt.Container;
9
+ import java.awt.FlowLayout;
10
+ import java.awt.event.ActionEvent;
11
+ import java.awt.event.ActionListener;
12
+
13
+ import javax.swing.JApplet;
14
+ import javax.swing.JButton;
15
+ import javax.swing.JComboBox;
16
+ import javax.swing.JFrame;
17
+ import javax.swing.JTextField;
18
+
19
+ public class ComboBoxes extends JApplet {
20
+ private String[] description = { "Ebullient", "Obtuse", "Recalcitrant",
21
+ "Brilliant", "Somnescent", "Timorous", "Florid", "Putrescent" };
22
+
23
+ private JTextField t = new JTextField(15);
24
+
25
+ private JComboBox c = new JComboBox();
26
+
27
+ private JButton b = new JButton("Add items");
28
+
29
+ private int count = 0;
30
+
31
+ public void init() {
32
+ for (int i = 0; i < 4; i++)
33
+ c.addItem(description[count++]);
34
+ t.setEditable(false);
35
+ b.addActionListener(new ActionListener() {
36
+ public void actionPerformed(ActionEvent e) {
37
+ if (count < description.length)
38
+ c.addItem(description[count++]);
39
+ }
40
+ });
41
+ c.addActionListener(new ActionListener() {
42
+ public void actionPerformed(ActionEvent e) {
43
+ t.setText("index: " + c.getSelectedIndex() + " "
44
+ + ((JComboBox) e.getSource()).getSelectedItem());
45
+ }
46
+ });
47
+ Container cp = getContentPane();
48
+ cp.setLayout(new FlowLayout());
49
+ cp.add(t);
50
+ cp.add(c);
51
+ cp.add(b);
52
+ }
53
+
54
+ public static void main(String[] args) {
55
+ run(new ComboBoxes(), 200, 125);
56
+ }
57
+
58
+ public static void run(JApplet applet, int width, int height) {
59
+ JFrame frame = new JFrame();
60
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
61
+ frame.getContentPane().add(applet);
62
+ frame.setSize(width, height);
63
+ applet.init();
64
+ applet.start();
65
+ frame.setVisible(true);
66
+ }
67
+ } ///:~
@@ -1,99 +1,152 @@
1
1
  #!/usr/bin/ruby
2
-
3
2
  puts 'Welcome to Sensible Cinema...'
3
+
4
4
  require 'rubygems'
5
5
  require 'sane'
6
+ require File.dirname(__FILE__) + '/swing_helpers'
7
+ load File.dirname(__FILE__) + '/sensible-cinema-cli'
8
+ require 'tmpdir'
9
+ require 'ruby-wmi'
6
10
 
7
- Thread.abort_on_exception=true #gah
8
-
9
- for file in ['overlayer', 'keyboard_input', 'screen_tracker', 'mouse', 'file_chooser', 'ocr']
10
- require_relative '../lib/' + file
11
- end
12
-
13
- $VERBOSE = 1 if ARGV.delete('-v')
14
- $TEST = 1 if ARGV.delete('-t')
15
- if ARGV.delete('--clear-cache')
16
- OCR.clear_cache!
17
- puts 'cleared cache'
18
- end
19
-
20
- $stderr.puts 'warning: currently windows only for certain parts currently' unless ENV['OS'] == 'Windows_NT'
21
-
22
- if ARGV.detect{|arg| arg == '-h' || arg == '--help'}
23
-
24
- puts <<-END
25
-
26
- syntax: player_description.yml|test scene_descriptions_list.yml [-t -v --clear-cache] (or nothing to prompt for files)
27
- END
11
+ module SensibleSwing
12
+ class MainWindow < JFrame
13
+ def initialize
14
+ super "Sensible-Cinema"
15
+ setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
16
+ panel = JPanel.new
17
+ panel.set_layout nil
18
+ setSize 350,400
19
+ add panel # why can't I just slap these down?
20
+
21
+ jlabel = JLabel.new 'Welcome to Sensible Cinema'
22
+ happy = Font.new("Tahoma", Font::PLAIN, 11)
23
+ jlabel.setFont(happy)
24
+ jlabel.set_bounds(44,44,136,14)
25
+ panel.add jlabel
26
+ b = JButton.new( "Play Hulu, Youtube, or a DVD" ).on_clicked {
27
+ self.close
28
+ go_sc
29
+ }
30
+ b.set_bounds(44,120,200,23)
31
+ panel.add b
28
32
 
29
- for file in Dir[__dir__ + '../zamples/mute*/*']
30
- puts "\n", "Example file:", file + "\n\n", File.read(file)
31
- end
33
+ c=JButton.new( "Copy edited DVD to Hard Drive" )
34
+ c.on_clicked {
35
+ drive = choose_dvd_drive
36
+ fc = JFileChooser.new
37
+ fc.setFileSelectionMode(nil)
38
+ fc.set_dialog_title "Please pick a DVD descriptor file"
39
+ fc.set_current_directory(JFile.new( __dir__ + "/../zamples/scene_lists/dvds"))
40
+ descriptor_path = fc.go
41
+ descriptors = YAML.load_file descriptor_path
42
+
43
+ fc = JFileChooser.new
44
+ # LODO allow for spaces in save to file
45
+ fc.set_dialog_title "Pick a location to save it to (like 'my_dvd')"
46
+ save_to_file_name = ((descriptors["title"] || "my dvd") + ' edited').gsub(' ', '_').gsub( /\W/, '') # no punctuation for now...
47
+ fc.setSelectedFile(JFile.new(get_drive_with_most_space + save_to_file_name))
48
+ save_to = fc.go
49
+ # TODO don't pop up those annoying windows
50
+ dvd_title_track = descriptors["dvd_title_track"]
51
+ bat_file = VLCProgrammer.convert_to_full_xspf(descriptors, save_to, drive)
52
+ temp_dir = Dir.tmpdir
53
+ temp_file = temp_dir + '/' + 'convert_it.bat'
54
+ File.write(temp_file, bat_file)
55
+ p 'running', temp_file
56
+ # TODO change title to "running" or something, while it runs...
57
+ if !ARGV.find{|a| a == '--test'} && system(temp_file)
58
+ JOptionPane.showMessageDialog(nil, " Done--you may now watch file #{save_to}.ps in VLC player", "Done!", JOptionPane::ERROR_MESSAGE)
59
+ command = "explorer /e,/select,\"#{File.expand_path(save_to).gsub('/', '\\')}.ps\""
60
+ system command
61
+ File.delete temp_file
62
+ self.close
63
+ else
64
+ JOptionPane.showMessageDialog(nil, " Failed--please examine #{temp_file} and screen output and report back!", "Failed", JOptionPane::ERROR_MESSAGE)
65
+ end
66
+ # TODO warn if they don't have VLC installed...
67
+ # LODO warn if they will overwrite a file
68
+ }
69
+
70
+ c.set_bounds(44,180,200,23)
71
+ panel.add c
72
+
73
+ exit = JButton.new("Exit").on_clicked {
74
+ self.close
75
+ }
76
+ exit.set_bounds(44,320,200,23)
77
+ panel.add exit
78
+
79
+ reload = JButton.new( "reload code" ).on_clicked {
80
+ eval File.read(__FILE__), nil, __FILE__
81
+ p 're-evaled it'
82
+ }
83
+ reload.set_bounds(44,280,200,23)
84
+ panel.add reload if ARGV.find{|a| a == '--test'}
85
+
86
+ end
32
87
 
33
- exit 1
88
+ def exit_and_close
89
+ JOptionPane.showMessageDialog(nil, "exiting", "exiting", JOptionPane::ERROR_MESSAGE)
90
+ close
91
+ exit
92
+ end
34
93
 
35
- else
36
-
37
- # allow for command line filenames
38
-
39
- player_description = ARGV.shift.to_s
40
- if !File.exist?(player_description)
41
- puts 'Please Select Computer Player'
42
- player_description = FileChooser.choose_file(" SELECT COMPUTER PLAYER", __dir__ + "/../zamples/players")
43
- end
44
-
45
- scene_list = ARGV.shift.to_s
46
-
47
- if scene_list == 'test'
48
- overlay = nil
49
- p 'got test...just doing screen dump'
50
- $VERBOSE=true # adds some extra output
51
- else
52
- if !File.exist? scene_list
53
- puts 'Select Scene Descriptions file'
54
- scene_list = FileChooser.choose_file(" SELECT SCENE DESCRIPTIONS FILE", __dir__ + "/../zamples/scene_lists")
55
- end
94
+
95
+ def choose_dvd_drive
96
+ opticals = get_dvd_drives
97
+ opticals.map!{|d| d.Name + "\\" + " (" + d.VolumeName + ")"}
56
98
 
57
- if !scene_list
58
- puts "error: have to specify a scene descriptions file\n or specify \"test\" on the command line if you just want to snapshot your player"
59
- exit 1
99
+ if opticals.length != 1
100
+ dialog = GetDisk.new(self, opticals)
101
+ dialog.show
102
+ selected = dialog.selected
103
+ else
104
+ selected = opticals[0]
60
105
  end
61
-
62
- puts 'Selected scene descriptions file ' + File.basename(scene_list) + "\n\t(full path: #{scene_list})"
63
- Blanker.startup
64
- # todo start it late as it has an annoying startup blip
65
- overlay = OverLayer.new(scene_list)
66
- end
106
+ return selected[0..2]
107
+ end
67
108
 
68
- if File.exist? player_description.to_s
69
- puts 'Selected player ' + File.basename(player_description) + "\n\t(full path: #{player_description})"
70
- # this one doesn't use any updates, so just pass in file contents, not filename
71
- screen_tracker = ScreenTracker.new_from_yaml File.binread(player_description), overlay
72
- Mouse.jitter_forever_in_own_thread # when this ends you know a snapshot was taken...
109
+ def get_drive_with_most_space
110
+ disks = WMI::Win32_LogicalDisk.find(:all)
111
+ out = disks.sort_by{|d| d.FreeSpace}[-1].Name + "\\"
112
+ out
113
+ end
73
114
 
74
- # exit early if we just wanted a screen dump...a little kludgey...
75
- unless overlay
76
- puts 'warning--only doing screen dump in t-minus 4s...'
77
- sleep 4
78
- puts 'snap!'
79
- screen_tracker.dump_bmp
80
- exit 1
81
- end
82
- screen_tracker.process_forever_in_thread
83
- else
84
- puts 'warning--not using any screen tracking...'
115
+
116
+ private
117
+ def get_dvd_drives
118
+ disks = WMI::Win32_LogicalDisk.find(:all)
119
+ disks.select{|d| d.Description =~ /CD-ROM/} # hope this works...
85
120
  end
86
-
87
- OCR.unserialize_cache_from_disk # do this every time so we don't delete it if they don't have one...
88
121
 
89
- puts "Opening the curtains... (please play in player now)"
90
- overlay.start_thread true
91
- key_input = KeyboardInput.new overlay
92
- key_input.start_thread # status thread
93
- at_exit {
94
- Blanker.shutdown # lodo move this and the 'q' key to within overlayer
95
- OCR.serialize_cache_to_disk
96
- }
97
- key_input.handle_keystrokes_forever # when this method exits, we want to exit fully...
98
-
99
- end
122
+ end
123
+
124
+ class GetDisk < JDialog
125
+ attr_reader :selected
126
+ def initialize parent, options_array
127
+ super parent, true
128
+
129
+ box = JComboBox.new
130
+ box.add_action_listener do |e|
131
+ idx = box.get_selected_index
132
+ if idx != 0
133
+ @selected = box.get_selected_item
134
+ dispose
135
+ end
136
+ end
137
+
138
+ box.add_item "Select DVD drive" # put something in index 0
139
+ options_array.each{|drive|
140
+ box.add_item drive
141
+ }
142
+ add box
143
+ pack
144
+ end
145
+
146
+ end
147
+
148
+ end
149
+
150
+ SensibleSwing::MainWindow.new.set_visible true
151
+
152
+ puts 'Please use the Sensible Cinema GUI window'
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'rubygems'
4
+ require 'sane'
5
+
6
+ Thread.abort_on_exception=true #gah
7
+
8
+ for file in ['overlayer', 'keyboard_input', 'screen_tracker', 'mouse', 'file_chooser', 'ocr', 'vlc_programmer']
9
+ require_relative '../lib/' + file
10
+ end
11
+
12
+
13
+ def go_sc(args=ARGV)
14
+
15
+ $VERBOSE = 1 if args.delete('-v')
16
+ $TEST = 1 if args.delete('-t')
17
+ if args.delete('--clear-cache')
18
+ OCR.clear_cache!
19
+ puts 'cleared cache'
20
+ end
21
+
22
+ $stderr.puts 'warning: currently windows only for certain parts currently' unless ENV['OS'] == 'Windows_NT'
23
+
24
+ if args.detect{|arg| arg == '-h' || arg == '--help'}
25
+
26
+ puts <<-END
27
+
28
+ syntax: player_description.yml|test scene_descriptions_list.yml [-t -v --clear-cache] (or nothing to prompt for files)
29
+ END
30
+
31
+ for file in Dir[__dir__ + '../zamples/mute*/*']
32
+ puts "\n", "Example file:", file + "\n\n", File.read(file)
33
+ end
34
+
35
+ exit 1
36
+
37
+ else
38
+
39
+ # allow for command line filenames
40
+
41
+ player_description = args.shift.to_s
42
+ if !File.exist?(player_description)
43
+ puts 'Please Select Computer Player'
44
+ player_description = FileChooser.choose_file(" SELECT COMPUTER PLAYER", __dir__ + "/../zamples/players")
45
+ end
46
+
47
+ scene_list = args.shift.to_s
48
+
49
+ if scene_list == 'test'
50
+ overlay = nil
51
+ p 'got test...just doing screen dump'
52
+ $VERBOSE=true # adds some extra output
53
+ else
54
+ if !File.exist? scene_list
55
+ puts 'Select Scene Descriptions file'
56
+ scene_list = FileChooser.choose_file(" SELECT SCENE DESCRIPTIONS FILE", __dir__ + "/../zamples/scene_lists")
57
+ end
58
+
59
+ if !scene_list
60
+ puts "error: have to specify a scene descriptions file\n or specify \"test\" on the command line if you just want to snapshot your player"
61
+ exit 1
62
+ end
63
+
64
+ puts 'Selected scene descriptions file ' + File.basename(scene_list) + "\n\t(full path: #{scene_list})"
65
+ Blanker.startup
66
+ # todo start it late as it has an annoying startup blip
67
+ overlay = OverLayer.new(scene_list)
68
+ end
69
+
70
+ if File.exist? player_description.to_s
71
+ puts 'Selected player ' + File.basename(player_description) + "\n\t(full path: #{player_description})"
72
+ # this one doesn't use any updates, so just pass in file contents, not filename
73
+ screen_tracker = ScreenTracker.new_from_yaml File.binread(player_description), overlay
74
+ Mouse.jitter_forever_in_own_thread # when this ends you know a snapshot was taken...
75
+
76
+ # exit early if we just wanted a screen dump...a little kludgey...
77
+ unless overlay
78
+ puts 'warning--only doing screen dump in t-minus 4s...'
79
+ sleep 4
80
+ puts 'snap!'
81
+ screen_tracker.dump_bmp
82
+ exit 1
83
+ end
84
+ screen_tracker.process_forever_in_thread
85
+ else
86
+ puts 'warning--not using any screen tracking...'
87
+ end
88
+
89
+ OCR.unserialize_cache_from_disk # do this every time so we don't delete it if they don't have one...
90
+
91
+ puts "Opening the curtains... (please play in player now)"
92
+ overlay.start_thread true
93
+ key_input = KeyboardInput.new overlay
94
+ key_input.start_thread # status thread
95
+ at_exit {
96
+ Blanker.shutdown # lodo move this and the 'q' key to within overlayer
97
+ OCR.serialize_cache_to_disk
98
+ }
99
+ key_input.handle_keystrokes_forever # when this method exits, we want to exit fully...
100
+
101
+ end
102
+ end
103
+
104
+ if __FILE__ == $0
105
+ puts 'Welcome to Sensible Cinema...'
106
+ go_sc
107
+ end
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/ruby
2
+ puts 'Welcome to Sensible Cinema...'
3
+ require 'rubygems'
4
+ require 'ruby-wmi'
5
+ require 'swing_helpers'
6
+
7
+ module SensibleSwing
8
+ class MainWindow < JFrame
9
+ def initialize
10
+ super "Sensible-Cinema"
11
+ setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
12
+ panel = JPanel.new
13
+ panel.set_layout nil
14
+ setSize 350,400
15
+ add panel # why can't I just slap these down?
16
+
17
+ jlabel = JLabel.new 'Welcome to Sensible Cinema'
18
+ happy = Font.new("Tahoma", Font::PLAIN, 11)
19
+ jlabel.setFont(happy)
20
+ jlabel.set_bounds(44,44,136,14)
21
+ panel.add jlabel
22
+
23
+ c=JButton.new( "Save local copy of an edited DVD" )
24
+ c.on_clicked {
25
+ drive = get_disk_name
26
+ =begin
27
+ fc = JFileChooser.new
28
+ fc.setFileSelectionMode(nil)
29
+ fc.set_dialog_title "Please pick a DVD descriptor file"
30
+ fc.set_current_directory(JFile.new( __dir__ + "/../zamples/scene_lists/dvds"))
31
+ descriptor = fc.execute
32
+ fc = JFileChooser.new
33
+ # TODO allow for spaces in save to file
34
+ fc.set_dialog_title "Pick a location to save it to (like 'my_dvd')"
35
+ fc.setCurrentDirectory(JFile.new("c:\\"))
36
+ save_to = fc.execute
37
+ p [drive, descriptor, save_to]
38
+ descriptors = YAML.load_file descriptor
39
+ bat_file = VLCProgrammer.convert_to_full_xspf(descriptors, save_to, drive)
40
+ temp_dir = Dir.tmpdir
41
+ temp_file = temp_dir + '/' + 'convert_it.bat'
42
+ File.write(temp_file, bat_file)
43
+ p 'running', temp_file
44
+ p 'got', system(temp_file)
45
+ JOptionPane.showMessageDialog(nil, " Done--you may now watch file #{save_to}.ps in VLC player", "Done!", JOptionPane::ERROR_MESSAGE)
46
+ self.close
47
+ =end
48
+ }
49
+ c.set_bounds(44,180,200,23)
50
+ panel.add c
51
+
52
+ reload = JButton.new( "reload code" ).on_clicked {
53
+ eval File.read(__FILE__), nil, __FILE__
54
+ p 're-evaled it'
55
+ }
56
+ reload.set_bounds(44,280,200,23)
57
+ panel.add reload # if ARGV.find{|a| a == '--test'}
58
+
59
+ end
60
+
61
+ def exit_and_close
62
+ JOptionPane.showMessageDialog(nil, "exiting", "exiting", JOptionPane::ERROR_MESSAGE)
63
+ close
64
+ exit
65
+ end
66
+
67
+ def get_disk_name
68
+ disks = WMI::Win32_LogicalDisk.find(:all)
69
+
70
+ opticals = disks.select{|d| d.Description =~ /CD-ROM/}
71
+
72
+ opticals.map!{|d| [d.Name + "\\", d.VolumeName]}
73
+ p opticals
74
+ p 'showing dialog'
75
+ dialog = GetDisk.new(self, opticals)
76
+ p 'done showing dialog'
77
+
78
+ return opticals[0][0]
79
+ end
80
+
81
+
82
+ end
83
+
84
+ class GetDisk < JDialog
85
+ def initialize parent, options_array
86
+ super parent, true
87
+
88
+ box = JComboBox.new
89
+ box.add_action_listener do |e|
90
+ p 'chosen perhaps?', e, box.get_selected_index, e.get_source, get_selected_item
91
+ #dispose if
92
+ end
93
+ box.add_item "Select DVD drive"
94
+ box.add_item "halloo"
95
+
96
+ add box
97
+ pack
98
+ end
99
+ end
100
+
101
+ end
102
+
103
+ SensibleSwing::MainWindow.new.set_visible true
104
+
105
+ puts 'Please see the Sensible Cinema window'
@@ -0,0 +1,48 @@
1
+ require 'java'
2
+ module SensibleSwing
3
+ include_package 'javax.swing'
4
+ [JButton, JFrame, JLabel, JPanel, JOptionPane,
5
+ JFileChooser, JComboBox, JDialog] # grab these constants (http://jira.codehaus.org/browse/JRUBY-5107)
6
+ include_package 'java.awt'
7
+ [FlowLayout, Font]
8
+ include_class 'java.awt.event.ActionListener'
9
+ JFile = java.io.File
10
+
11
+ class JButton
12
+ def initialize *args
13
+ super *args
14
+ set_font Font.new("Tahoma", Font::PLAIN, 11)
15
+ end
16
+
17
+ def on_clicked &block
18
+ raise unless block
19
+ add_action_listener do |e|
20
+ block.call
21
+ end
22
+ self
23
+ end
24
+
25
+ end
26
+
27
+ class JFrame
28
+ def close
29
+ dispose # sigh
30
+ end
31
+ end
32
+
33
+ class JFileChooser
34
+ # returns nil on failure...
35
+ def go
36
+ success = show_open_dialog nil
37
+ unless success == Java::javax::swing::JFileChooser::APPROVE_OPTION
38
+ puts "did not choose one"
39
+ java.lang.System.exit 1
40
+ end
41
+ get_selected_file.get_absolute_path
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ # code examples
48
+ # JOptionPane.showInputDialog(nil, "not implemented yet", "not implemented yet", JOptionPane::ERROR_MESSAGE)
@@ -1,5 +1,8 @@
1
1
  require_relative 'overlayer'
2
2
 
3
+ # add some common locations for vlc.exe to the path...
4
+ ENV['PATH'] = ENV['PATH'] + ";C:\\Program Files\\VideoLAN\\VLC"+ ";D:\\Program Files\\VideoLAN\\VLC" + ";E:\\Program Files\\VideoLAN\\VLC"
5
+
3
6
  class VLCProgrammer
4
7
 
5
8
  def self.to_english s
@@ -7,8 +10,10 @@ class VLCProgrammer
7
10
  @overlayer.translate_time_to_human_readable s
8
11
  end
9
12
 
10
- def self.convert_to_full_xspf incoming, filename = nil
13
+ def self.convert_to_full_xspf incoming, filename = nil, drive_with_slash = nil, dvd_title_track = nil
14
+ @drive = drive_with_slash || "e:\\"
11
15
  @filename = filename
16
+ @dvd_title_track = dvd_title_track || "1"
12
17
  mutes = incoming["mutes"] || {}
13
18
  blanks = incoming["blank_outs"] || {}
14
19
  mutes = mutes.map{|k, v| [OverLayer.translate_string_to_seconds(k), OverLayer.translate_string_to_seconds(v), :mute]}
@@ -93,7 +98,7 @@ class VLCProgrammer
93
98
  end
94
99
 
95
100
  def self.get_section title, start, stop, idx, no_audio = false
96
- loc = "dvd://e:\@1"
101
+ loc = "dvd://#{@drive}@#{@dvd_title_track}"
97
102
  if !@filename
98
103
  "<track>
99
104
  <title>#{title}</title>
@@ -106,7 +111,7 @@ class VLCProgrammer
106
111
  <location>#{loc}</location>
107
112
  </track>"
108
113
  else
109
- "call vlc -I dummy #{loc} --start-time=#{start} --stop-time=#{stop} --sout=file/ps:#{@filename}.ps.#{idx} #{"--no-sout-audio" if no_audio} vlc://quit\n" # +
114
+ "call vlc -I dummy #{loc} --start-time=#{start} --stop-time=#{stop} --sout=\"file/ps:#{@filename}.ps.#{idx}\" #{"--no-sout-audio" if no_audio} vlc://quit\n" # +
110
115
  #"call vlc #{@filename}.ps.#{idx}.tmp --sout=file/ps:go.ps
111
116
  end
112
117
  end
@@ -118,14 +123,13 @@ class VLCProgrammer
118
123
  files = (1..idx).map{|n| "#{@filename}.ps.#{n}"}
119
124
  # concat
120
125
  line = 'type ' + files.join(' ')
121
- line += " > #{@filename}.all.ps\n"
126
+ line += " > #{@filename}.ps\n"
122
127
 
123
128
  line += "rm " + files.join(' ') + "\n"
124
- line += "echo Done--you may now watch file #{@filename}.all.ps in VLC player"
129
+ line += "echo Done--you may now watch file #{@filename}.ps in VLC player"
125
130
  end
126
131
 
127
132
  end
128
-
129
133
 
130
134
  end
131
135
 
@@ -95,7 +95,11 @@ describe 'VLC Programmer' do
95
95
  File.write('mute5-10.bat', bat_file)
96
96
  puts 'run it like $ mute5-10.bat'
97
97
  end
98
-
98
+
99
+ it "should modify path to have VLC available" do
100
+ ENV['PATH'].should include("VideoLAN")
101
+ end
102
+
99
103
  it "should produce a workable non VLC playable file"
100
104
 
101
105
  end
@@ -2,7 +2,7 @@ mutes:
2
2
  # none yet
3
3
 
4
4
  blank_outs:
5
- 10:22.5 : 10:24 # dancing mardi gras girl
5
+ 10:22.5 : 10:24 # dancing mardi gras girl on a float with tight clothes.
6
6
 
7
7
  title: All Dogs Go to Heaven
8
8
  source: DVD/vlc
@@ -0,0 +1,9 @@
1
+ mutes:
2
+ "1" : "1:06" # theme song is a bit raucous
3
+ "48:46" : "49:08" # theme song again
4
+ blank_outs:
5
+ # none
6
+
7
+ title: Bob's Big Plan
8
+ source: DVD (vlc)
9
+ dvd_title_track: 1
@@ -1,4 +1,4 @@
1
- name: cars widescreen 2006
1
+ title: cars widescreen 2006
2
2
  player: VLC
3
3
  mutes:
4
4
  "0:17:22" : "0:17:23.5" # you could see his [rusty] undercarriage
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 12
7
+ - 13
8
8
  - 0
9
- version: 0.12.0
9
+ version: 0.13.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Roger Pack
@@ -14,8 +14,8 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-17 00:00:00 -07:00
18
- default_executable: sensible-cinema
17
+ date: 2010-11-19 00:00:00 -07:00
18
+ default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: sane
@@ -116,7 +116,16 @@ dependencies:
116
116
  description:
117
117
  email: rogerdpack@gmail.com
118
118
  executables:
119
+ - AboutDialog.class
120
+ - AboutDialog.java
121
+ - ComboBoxes$1.class
122
+ - ComboBoxes$2.class
123
+ - ComboBoxes.class
124
+ - ComboBoxes.java
119
125
  - sensible-cinema
126
+ - sensible-cinema-cli
127
+ - sensible-cinema-hit-reload-twice-then-save-copy-of-for-death
128
+ - swing_helpers.rb
120
129
  extensions:
121
130
  - ext/mkrf_conf.rb
122
131
  extra_rdoc_files:
@@ -130,6 +139,8 @@ files:
130
139
  - TODO
131
140
  - VERSION
132
141
  - bin/sensible-cinema
142
+ - bin/sensible-cinema-cli
143
+ - bin/swing_helpers.rb
133
144
  - ext/mkrf_conf.rb
134
145
  - gplv3.txt
135
146
  - lib/blanker.rb
@@ -238,6 +249,7 @@ files:
238
249
  - zamples/scene_lists/category descriptions.yml
239
250
  - zamples/scene_lists/dvds/White Christmas.yml
240
251
  - zamples/scene_lists/dvds/all_dogs_go_to_heaven_dvd.yml
252
+ - zamples/scene_lists/dvds/bobs_big_plan.yml
241
253
  - zamples/scene_lists/dvds/cars_disney.yml
242
254
  - zamples/scene_lists/dvds/happy_feet_dvd.yml
243
255
  - zamples/scene_lists/dvds/labyrinth.yml
@@ -246,6 +258,13 @@ files:
246
258
  - zamples/scene_lists/star_trek_generations_hulu.yml
247
259
  - zamples/scene_lists/youtube/gummy_bear_song_youtube.yml
248
260
  - zamples/scene_lists/youtube/nuki_song_youtube.yml
261
+ - bin/AboutDialog.class
262
+ - bin/AboutDialog.java
263
+ - bin/ComboBoxes$1.class
264
+ - bin/ComboBoxes$2.class
265
+ - bin/ComboBoxes.class
266
+ - bin/ComboBoxes.java
267
+ - bin/sensible-cinema-hit-reload-twice-then-save-copy-of-for-death
249
268
  has_rdoc: true
250
269
  homepage: http://github.com/rdp
251
270
  licenses: []