module GPhoto2::Camera::Event

Public Instance Methods

wait(timeout = 2000) click to toggle source

@param [Integer] timeout time to wait in milliseconds @return [CameraEvent]

# File lib/gphoto2/camera/event.rb, line 6
def wait(timeout = 2000)
  wait_for_event(timeout)
end
wait_for(event_type) click to toggle source

@param [CameraEventType] event_type @return [CameraEvent]

# File lib/gphoto2/camera/event.rb, line 12
def wait_for(event_type)
  begin
    event = wait
  end until event.type == event_type

  event
end

Private Instance Methods

wait_for_event(timeout) click to toggle source
# File lib/gphoto2/camera/event.rb, line 22
def wait_for_event(timeout)
  # assume CameraEventType is an int
  type_ptr = FFI::MemoryPointer.new(:int)
  data_ptr = FFI::MemoryPointer.new(:pointer)

  rc = gp_camera_wait_for_event(ptr, timeout, type_ptr, data_ptr, context.ptr)
  GPhoto2.check!(rc)

  type = FFI::GPhoto2::CameraEventType[type_ptr.read_int]
  data = data_ptr.read_pointer

  data =
    case type
    when :unknown
      data.null? ? nil : data.read_string
    when :file_added
      path_ptr = FFI::GPhoto2::CameraFilePath.new(data)
      path = CameraFilePath.new(path_ptr)
      CameraFile.new(self, path.folder, path.name)
    when :folder_added
      path_ptr = FFI::GPhoto2::CameraFilePath.new(data)
      path = CameraFilePath.new(path_ptr)
      CameraFolder.new(self, '%s/%s' % [path.folder, path.name])
    else
      nil
    end

  CameraEvent.new(type, data)
end