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