From 23127f1119c7fcc12d20710af5b14892451b30fb Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 15 Jun 2017 13:59:55 -0400 Subject: [PATCH] reduce can_upload post requests --- app/assets/javascripts/recordings.coffee | 42 ++++++++++++++---------- app/controllers/bbb_controller.rb | 17 ++++------ config/locales/en-us.yml | 1 + config/routes.rb | 2 +- 4 files changed, 32 insertions(+), 30 deletions(-) diff --git a/app/assets/javascripts/recordings.coffee b/app/assets/javascripts/recordings.coffee index ec39d595..a0d23113 100644 --- a/app/assets/javascripts/recordings.coffee +++ b/app/assets/javascripts/recordings.coffee @@ -38,16 +38,6 @@ class @Recordings constructor: -> recordingsObject = this - canUpload = {} - - # Determine which recordings can be uploaded to Youtube. - $.ajax({ - method: 'GET', - async: false, - url: recordingsObject.getRecordingsURL() + '/can_upload' - }).success((res_data) -> - canUpload = res_data - ) # configure the datatable for recordings this.table = $('#recordings').dataTable({ @@ -144,13 +134,6 @@ class @Recordings trigger.removeClass(classes.join(' ')) trigger.addClass(cls) - upload_btn = recordingActions.find('.cloud-upload') - - if canUpload[row.id] - upload_btn.attr('data-popover-body', '.mail_youtube_popover') - else - upload_btn.attr('data-popover-body', '.mail_popover') - return recordingActions.html() return data } @@ -266,6 +249,7 @@ class @Recordings table_api = this.table.api() recordingsObject = this selectedUpload = null + canUpload = false @getTable().on 'click', '.recording-update', (event) -> btn = $(this) @@ -330,13 +314,15 @@ class @Recordings cloud = selectedUpload.find('.cloud-blue') check = selectedUpload.find('.green-check') spinner = selectedUpload.find('.load-spinner') + + showAlert(I18n.successful_upload, 4000); spinner.hide() check.show() setTimeout ( -> cloud.show() check.hide() - ), 4000 + ), 2500 }) selectedUpload.find('.cloud-blue').hide() @@ -364,8 +350,28 @@ class @Recordings $('#video-title').attr('value', row.name) @getTable().on 'click', '.cloud-upload', (event) -> + btn = $(this) + row = table_api.row($(this).closest('tr')).data() + id = row.id + selectedUpload = $(this) + # Determine if the recording can be uploaded to Youtube. + $.ajax({ + method: 'POST', + data: {'rec_id': id} + url: recordingsObject.getRecordingsURL() + '/can_upload' + }).success((res_data) -> + canUpload = res_data['uploadable'] + ) + + if canUpload + $(this).attr('data-popover-body', '.mail_youtube_popover') + else + $(this).attr('data-popover-body', '.mail_popover') + + $(this).popover('show') + @getTable().on 'draw.dt', (event) -> $('time[data-time-ago]').timeago(); diff --git a/app/controllers/bbb_controller.rb b/app/controllers/bbb_controller.rb index 9ab37f79..7703423b 100644 --- a/app/controllers/bbb_controller.rb +++ b/app/controllers/bbb_controller.rb @@ -186,18 +186,13 @@ class BbbController < ApplicationController end end - # GET /rooms/:room_id/recordings/can_upload + # POST /rooms/:room_id/recordings/can_upload def can_upload - upload_data = {} - bbb_get_recordings[:recordings].each{ |recording_data| - next if recording_data[:recordID] == "" - # The recording is uploadable if it contains webcam data and they are logged in thorugh Google. - uploadable = Faraday.head(get_webcams_url(recording_data[:recordID])).status == 200 && - Rails.application.config.omniauth_google && - current_user.provider == 'google' - upload_data[recording_data[:recordID]] = uploadable - } - render json: upload_data + # The recording is uploadable if it contains webcam data and they are logged in thorugh Google. + uploadable = Faraday.head(get_webcams_url(params[:rec_id])).status == 200 && + Rails.application.config.omniauth_google && + current_user.provider == 'google' + render json: {:uploadable => uploadable} end def get_webcams_url(recording_id) diff --git a/config/locales/en-us.yml b/config/locales/en-us.yml index b05779b2..5688c7f4 100644 --- a/config/locales/en-us.yml +++ b/config/locales/en-us.yml @@ -67,6 +67,7 @@ en-US: recording_unlisted: Recording was unlisted recording_unpublished: Recording was unpublished share: Share + successful_upload: Recording successfully uploaded to Youtube! unpublish_recording: Hide recording unlisted: Unlisted unpublished: No one diff --git a/config/routes.rb b/config/routes.rb index b32234f5..68166c0c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -38,7 +38,7 @@ Rails.application.routes.draw do scope '/:room_id', :constraints => {:room_id => disallow_slash} do # recording routes for updating, deleting and viewing recordings get '/(:id)/recordings', to: 'bbb#recordings', defaults: {id: nil, format: 'json'}, :constraints => {:id => disallow_slash} - get '/(:id)/recordings/can_upload', to: 'bbb#can_upload', defaults: {id: nil, format: 'json'}, :constraints => {:id => disallow_slash} + post '/(:id)/recordings/can_upload', to: 'bbb#can_upload', defaults: {id: nil, format: 'json'}, :constraints => {:id => disallow_slash} post '/(:id)/recordings/:record_id', to: 'bbb#youtube_publish', defaults: {id: nil, format: 'json'}, :constraints => {:id => disallow_slash} patch '/(:id)/recordings/:record_id', to: 'bbb#update_recordings', defaults: {id: nil, format: 'json'}, :constraints => {:id => disallow_slash} delete '/(:id)/recordings/:record_id', to: 'bbb#delete_recordings', defaults: {id: nil, format: 'json'}, :constraints => {:id => disallow_slash}