class VideoSessionsController

Public Instance Methods

accept() click to toggle source

Method for tutor 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])
  @tutoring_session = current_user.tutoring_sessions.build(
    user: user,
    resource: resource,
    start_time: Time.now,
    date: Date.today_in_time_zone,
    session_type: TutoringSession::TYPES.assoc('Video').last
  )
  @tutoring_session.save!
  @video_session_room = @tutoring_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-tutor', 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 student or by tutor.

# File app/controllers/video_sessions_controller.rb, line 99
def close
  @video_session_room.close!
  @tutoring_session = @video_session_room.tutoring_session
  @tutoring_session.build_review unless @tutoring_session.review
  client = ActsAsTenant.current_tenant.pusher_configuration.client
  if current_user == @tutoring_session.tutor
    client["private-user-#{@tutoring_session.other_user(current_user).id}"].trigger_async('video_session_ended', {session_id: @tutoring_session.id, rating_url: rating_tutoring_session_path(@tutoring_session), message: "Video session has been closed by #{current_user.name}"})
  else
    client["private-user-#{@tutoring_session.other_user(current_user).id}"].trigger_async('video_session_ended', {session_id: @tutoring_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
  @tutor = Tutor.find(params[:session][:tutor_id])
  if current_user.has_balanced_account?
    if !@tutor.related_sessions.ongoing_sessions.exists? and !current_user.related_sessions.ongoing_sessions.exists? and @tutor.available_for_video? and @tutor.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-#{@tutor.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 tutor 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])
    tutor = current_user
  else
    user = current_user
    tutor = Tutor.find(params[:tutor_id])
  end
  data = {tutor_id: tutor.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 tutor'}
  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-#{tutor.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.tutoring_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.tutoring_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