shelr 0.15.2 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/shelr CHANGED
@@ -15,6 +15,7 @@ HELP = <<-HELP
15
15
  Recording:
16
16
 
17
17
  record - record new shellcast
18
+ record --sound - record new shellcast with sound
18
19
 
19
20
  Publishing:
20
21
 
@@ -48,7 +49,7 @@ case ARGV[0]
48
49
  when '-h', '--help'
49
50
  puts HELP
50
51
  when 'record'
51
- Shelr::Recorder.record!
52
+ Shelr::Recorder.record!(sound: ARGV[1] == '--sound')
52
53
  when 'list'
53
54
  Shelr::Player.list
54
55
  when 'play'
@@ -58,7 +59,7 @@ when 'play'
58
59
  elsif ARGV[1] =~ /.*\.json$/ # local file
59
60
  Shelr::Player.play_dump(ARGV[1])
60
61
  else
61
- Shelr::Player.play(ARGV[1])
62
+ Shelr::Player.play(:record_id => ARGV[1])
62
63
  end
63
64
  else
64
65
  puts "Missing id for shellcast"
data/lib/shelr/player.rb CHANGED
@@ -8,8 +8,8 @@ require 'pathname'
8
8
  module Shelr
9
9
  class Player
10
10
 
11
- def self.play(id)
12
- new(id).play
11
+ def self.play(options)
12
+ new.play(options)
13
13
  end
14
14
 
15
15
  def self.play_remote(url)
@@ -28,9 +28,9 @@ module Shelr
28
28
  end
29
29
 
30
30
  def self.list
31
- Dir[File.join(Shelr::DATA_DIR, "**", 'meta')].each do |path|
32
- metadata = JSON.parse(IO.read(path))
33
- puts "#{metadata["recorded_at"]}: #{metadata["title"]}"
31
+ (Dir[File.join(Shelr::DATA_DIR, "**")] - ['.', '..']).sort.each do |dir|
32
+ metadata = JSON.parse(IO.read(File.join(dir, 'meta')))
33
+ puts "#{metadata["recorded_at"]} : #{metadata["title"]}"
34
34
  end
35
35
  end
36
36
 
@@ -40,26 +40,32 @@ module Shelr
40
40
  %w(typescript timing).each do |type|
41
41
  File.open(File.join(dir, type), 'w') { |f| f.puts(parts[type]) }
42
42
  end
43
- Shelr.terminal.puts_line
44
- puts "=> Title: #{parts['title']}"
45
- puts "=> Description: #{parts['description']}t"
46
- Shelr.terminal.puts_line
47
- scriptreplay File.join(dir, 'typescript'), File.join(dir, 'timing')
48
- Shelr.terminal.puts_line
49
- puts "=> Title: #{parts['title']}"
50
- puts "=> Description: #{parts['description']}t"
51
- Shelr.terminal.puts_line
43
+ play(:record_dir => dir)
52
44
  end
53
45
  end
54
46
 
55
- def initialize(id)
56
- @record_id = id
57
- end
58
-
59
- def play
47
+ def play(options = {})
48
+ @options = options
49
+ start_sound_player
60
50
  Shelr.terminal.puts_line
61
51
  self.class.scriptreplay record_file('typescript'), record_file('timing')
62
52
  Shelr.terminal.puts_line
53
+ stop_sound_player
54
+ end
55
+
56
+ def start_sound_player
57
+ return unless File.exist?(record_file('sound.ogg'))
58
+ at_exit { system('stty echo') }
59
+ STDOUT.puts "=> Starting sound player..."
60
+ @sox_pid = fork do
61
+ `play #{record_file('sound.ogg')} 2>&1`
62
+ end
63
+ end
64
+
65
+ def stop_sound_player
66
+ return unless File.exist?(record_file('sound.ogg'))
67
+ STDOUT.puts "=> Stopping sound player..."
68
+ Process.kill("HUP", @sox_pid)
63
69
  end
64
70
 
65
71
  def self.scriptreplay(typescript_file, timing_file)
@@ -78,7 +84,11 @@ module Shelr
78
84
  private
79
85
 
80
86
  def record_file(name)
81
- File.join(Shelr.data_dir(@record_id), name)
87
+ File.join(record_dir, name)
88
+ end
89
+
90
+ def record_dir
91
+ @options[:record_id] ? Shelr.data_dir(@options[:record_id]) : @options[:record_dir]
82
92
  end
83
93
  end
84
94
  end
@@ -4,15 +4,15 @@ module Shelr
4
4
 
5
5
  attr_accessor :meta, :user_rows, :user_columns
6
6
 
7
- def self.record!
8
- new.record!
7
+ def self.record!(options = {})
8
+ new.record!(options)
9
9
  end
10
10
 
11
11
  def initialize
12
12
  @meta = {}
13
13
  end
14
14
 
15
- def record!
15
+ def record!(options = {})
16
16
  ensure_terminal_has_good_size
17
17
  check_record_dir
18
18
  with_lock_file do
@@ -23,7 +23,9 @@ module Shelr
23
23
  STDOUT.puts "=> Please, do not resize your terminal while recording"
24
24
  STDOUT.puts "=> Press Ctrl+D or 'exit' to finish recording"
25
25
  Shelr.terminal.puts_line
26
+ start_sound_recording if options[:sound]
26
27
  system(recorder_cmd)
28
+ stop_sound_recording if options[:sound]
27
29
  save_as_typescript if Shelr.backend == 'ttyrec'
28
30
  Shelr.terminal.puts_line
29
31
  STDOUT.puts "=> Session finished"
@@ -107,6 +109,22 @@ module Shelr
107
109
  File.join(Shelr.data_dir(record_id), name)
108
110
  end
109
111
 
112
+ def start_sound_recording
113
+ STDOUT.puts "Sound file stored in #{record_file('sound.ogg')}"
114
+ @sox_pid = fork do
115
+ Signal.trap("HUP") { puts "Sound recording finished!"; exit }
116
+ run_sound_recorder
117
+ end
118
+ end
119
+
120
+ def stop_sound_recording
121
+ Process.kill("HUP", @sox_pid)
122
+ end
123
+
124
+ def run_sound_recorder
125
+ `rec -C 1 --channels 1 --rate 8k --comment 'Recorded for http://shelr.tv/' #{record_file('sound.ogg')} 2>&1`
126
+ end
127
+
110
128
  def recorder_cmd
111
129
  case Shelr.backend
112
130
  when 'script'
data/lib/shelr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Shelr
2
- VERSION = '0.15.2'
2
+ VERSION = '0.16.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shelr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.2
4
+ version: 0.16.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-05-02 00:00:00.000000000 Z
15
+ date: 2012-05-05 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: json
@@ -88,7 +88,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
88
  version: '0'
89
89
  segments:
90
90
  - 0
91
- hash: -1693508584259767020
91
+ hash: -611569918164860445
92
92
  required_rubygems_version: !ruby/object:Gem::Requirement
93
93
  none: false
94
94
  requirements:
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  version: '0'
98
98
  segments:
99
99
  - 0
100
- hash: -1693508584259767020
100
+ hash: -611569918164860445
101
101
  requirements: []
102
102
  rubyforge_project:
103
103
  rubygems_version: 1.8.21