class VideoSessionsController

Public Instance Methods

accept() click to toggle source

Method for fixxpert to accept the request for video session.

# File app/controllers/video_sessions_controller.rb, line 40
def accept
  user = User.find(params[:user_id])
  resource = params[:resource_type].constantize.find(params[:resource_id])
  @expert_session = current_user.expert_sessions.build(
    user: user,
    resource: resource,
    start_time: Time.now,
    date: Date.today_in_time_zone,
    session_type: ExpertSession::TYPES.assoc('Video').last
  )
  @expert_session.save!
  @video_session_room = @expert_session.find_or_create_video_session_room
  ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{user.id}"].trigger_async('video-session-accepted-user', video_session_url: video_session_path(@video_session_room))
  ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{user.id}"].trigger_async('video-session-accepted-fixxpert', user_id: user.id, resource_id: params[:resource_id], resource_type: params[:resource_type])
  respond_to do |format|
    format.js
  end
end
close() click to toggle source

It closes video session by customer or by fixxpert.

# File app/controllers/video_sessions_controller.rb, line 99
def close
  @video_session_room.close!
  @expert_session = @video_session_room.expert_session
  @expert_session.build_review unless @expert_session.review
  client = ActsAsTenant.current_tenant.pusher_configuration.client
  if current_user == @expert_session.fixxpert
    client["private-user-#{@expert_session.other_user(current_user).id}"].trigger_async('video_session_ended', {session_id: @expert_session.id, rating_url: rating_expert_session_path(@expert_session), message: "Video session has been closed by #{current_user.name}"})
  else
    client["private-user-#{@expert_session.other_user(current_user).id}"].trigger_async('video_session_ended', {session_id: @expert_session.id, message: "Video session has been closed by #{current_user.name}"})
  end
  respond_to do |format|
    format.js
    format.html {redirect_to dashboard_path, notice: 'Video Session has been closed successfully.'}
  end
end
new() click to toggle source

To initialize video session

# File app/controllers/video_sessions_controller.rb, line 6
def new
  @fixxpert = Fixxpert.find(params[:session][:fixxpert_id])
  if current_user.has_balanced_account?
    if !@fixxpert.related_sessions.ongoing_sessions.exists? and !current_user.related_sessions.ongoing_sessions.exists? and @fixxpert.available_for_video? and @fixxpert.online?
      @available = true
      unless params[:session][:resource_id].blank?
        resource = params[:session][:resource_type].constantize.find(params[:session][:resource_id])
        ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{@fixxpert.id}"].trigger_async(
          'video-session-requested',
          user: {
            id: current_user.id,
            name: current_user.name,
            image: view_context.image_path(current_user.image_url(:medium))},
          resource_name: resource.name,
          resource_type: params[:session][:resource_type],
          resource_id: params[:session][:resource_id],
          accept_url: accept_video_sessions_path(user_id: current_user.id, resource_type: params[:session][:resource_type], resource_id: params[:session][:resource_id]),
          reject_url: reject_video_sessions_path(user_id: current_user.id, resource_type: params[:session][:resource_type], resource_id: params[:session][:resource_id])
        )
      end
    end
    respond_to do |format|
      format.html {render layout: false}
      format.js {}
    end
  else
    @user = current_user
    @user.credit_cards.build unless @user.credit_cards.exists?
    @redirect_url = request.url
    render 'settings/payment_details', layout: false
  end
end
reject() click to toggle source

Method for fixxpert to reject the request for video session.

# File app/controllers/video_sessions_controller.rb, line 60
def reject
  if params[:user_id]
    user = User.find(params[:user_id])
    fixxpert = current_user
  else
    user = current_user
    fixxpert = Fixxpert.find(params[:fixxpert_id])
  end
  data = {fixxpert_id: fixxpert.id, user_id: user.id, resource_id: params[:resource_id], resource_type: params[:resource_type], message: 'Your request for video session has been rejected by the fixxpert'}
  ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{user.id}"].trigger_async('video-session-request-rejected',  data)
  ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{fixxpert.id}"].trigger_async('video-session-request-rejected',  data)
  render nothing: true
end
show() click to toggle source

Shows the video session window.

# File app/controllers/video_sessions_controller.rb, line 75
def show
  unless @video_session_room.closed?
    @conversation = ChatConversation.find_or_create_conversation_for(current_user, [@video_session_room.expert_session.other_user(current_user).id])
  end
  respond_to do |format|
    format.html {render layout: false}
    format.json {render json: @video_session_room.to_json(only: [], methods: [:canvas_data])}
  end
end
update() click to toggle source

To update video sessions.

# File app/controllers/video_sessions_controller.rb, line 86
def update
  canvas = @video_session_room.canvas || @video_session_room.build_canvas
  canvas.data = params[:canvas_json]
  if canvas.save
    client = ActsAsTenant.current_tenant.pusher_configuration.client
    client["private-user-#{@video_session_room.expert_session.other_user(current_user).id}"].trigger_async('video_session_canvas_data', {action: 'reload'})
    render json: {status: 200}
  else
    render json: {status: 400, error: 'Unable to update canvas'}
  end
end