class Punchblock::Translator::Asterisk::Component::Record
Constants
- RECORDING_BASE_PATH
Public Instance Methods
execute()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 14 def execute max_duration = @component_node.max_duration || -1 raise OptionError, 'Record cannot be used on a call that is not answered.' unless @call.answered? raise OptionError, 'A start-paused value of true is unsupported.' if @component_node.start_paused raise OptionError, 'An initial-timeout value is unsupported.' if @component_node.initial_timeout && @component_node.initial_timeout != -1 raise OptionError, 'A final-timeout value is unsupported.' if @component_node.final_timeout && @component_node.final_timeout != -1 raise OptionError, 'A max-duration value that is negative (and not -1) is invalid.' unless max_duration >= -1 @format = @component_node.format || 'wav' call.register_tmp_handler :ami, :name => 'MonitorStop' do |event| finished end if @component_node.start_beep @call.execute_agi_command 'STREAM FILE', 'beep', '""' end ami_client.send_action 'Monitor', 'Channel' => call.channel, 'File' => filename, 'Format' => @format, 'Mix' => true unless max_duration == -1 call.after max_duration/1000 do stop end end send_ref rescue ChannelGoneError set_node_response ProtocolError.new.setup(:item_not_found, "Could not find a call with ID #{call_id}", call_id) rescue RubyAMI::Error => e with_error :platform_error, "Terminated due to AMI error '#{e.message}'" rescue OptionError => e with_error 'option error', e.message end
execute_command(command)
click to toggle source
Calls superclass method
Punchblock::Translator::Asterisk::Component::Component#execute_command
# File lib/punchblock/translator/asterisk/component/record.rb, line 49 def execute_command(command) case command when Punchblock::Component::Stop command.response = true ami_client.send_action 'StopMonitor', 'Channel' => call.channel @complete_reason = stop_reason when Punchblock::Component::Record::Pause ami_client.send_action 'PauseMonitor', 'Channel' => call.channel command.response = true when Punchblock::Component::Record::Resume ami_client.send_action 'ResumeMonitor', 'Channel' => call.channel command.response = true else super end end
finished()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 66 def finished send_complete_event(@complete_reason || max_duration_reason) end
setup()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 10 def setup @complete_reason = nil end
Private Instance Methods
filename()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 78 def filename File.join RECORDING_BASE_PATH, id end
max_duration_reason()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 90 def max_duration_reason Punchblock::Component::Record::Complete::MaxDuration.new end
recording()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 82 def recording Punchblock::Component::Record::Recording.new :uri => "file://#{filename}.#{@format}" end
send_complete_event(reason)
click to toggle source
Calls superclass method
Punchblock::Translator::Asterisk::Component::Component#send_complete_event
# File lib/punchblock/translator/asterisk/component/record.rb, line 94 def send_complete_event(reason) super reason, recording end
stop()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 72 def stop AMIErrorConverter.convert(nil) do ami_client.send_action 'StopMonitor', 'Channel' => call.channel end end
stop_reason()
click to toggle source
# File lib/punchblock/translator/asterisk/component/record.rb, line 86 def stop_reason Punchblock::Event::Complete::Stop.new end