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
# 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
# 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