diff --git a/app/assets/javascripts/channels/recording_update.js b/app/assets/javascripts/channels/recording_update.js index f27bf7ea..00314fb1 100644 --- a/app/assets/javascripts/channels/recording_update.js +++ b/app/assets/javascripts/channels/recording_update.js @@ -8,17 +8,19 @@ { received: function(data) { var table = $("#recordings").DataTable(); - var rowData = table.row("#"+data.record_id).data(); - rowData.published = data.published - table.row("#"+data.record_id).data(rowData).draw(); - var publish = (data.published) ? 'publish' : 'unpublish'; + var row = table.row("#"+data.record_id); + if (data.action === 'update') { + var rowData = row.data(); + rowData.published = data.published + table.row("#"+data.record_id).data(rowData).draw(); - // show alert success alert - $('.alert-template .alert-message').html($('.'+publish+'-alert').html()); - $('#alerts').html($('.alert-template').html()); - setTimeout(function() { - $('#alerts > .alert').alert('close'); - }, 4000); + var publish = (data.published) ? 'publish' : 'unpublish'; + showAlert($('.'+publish+'-alert').html(), 4000); + } else if (data.action === 'delete') { + row.remove().draw(); + + showAlert($('.delete-alert').html(), 4000); + } } }); }; diff --git a/app/assets/javascripts/landing.js b/app/assets/javascripts/landing.js index 376a59b7..11b47054 100644 --- a/app/assets/javascripts/landing.js +++ b/app/assets/javascripts/landing.js @@ -187,14 +187,18 @@ }); $('#recordings').on('click', '.recording-delete', function(event) { + var btn = $(this); var row = recordingsTable.api().row($(this).closest('tr')).data(); var url = $('.meeting-url').val(); var id = row.id; + btn.prop('disabled', true); $.ajax({ method: 'DELETE', url: url+'/recordings/'+id }).done(function() { - recordingsTable.api().row("#"+id).remove().draw(); + + }).fail(function(data) { + btn.prop('disabled', false); }); }); diff --git a/app/assets/javascripts/shared.js b/app/assets/javascripts/shared.js index 82e585d8..b1601f90 100644 --- a/app/assets/javascripts/shared.js +++ b/app/assets/javascripts/shared.js @@ -76,3 +76,18 @@ var loopJoin = function() { console.info("meeting join failed"); }); } + +var showAlert = function(html, timeout_delay) { + if (!html) { + return; + } + + $('.alert-template .alert-message').html(html); + $('#alerts').html($('.alert-template').html()); + + if (timeout_delay) { + setTimeout(function() { + $('#alerts > .alert').alert('close'); + }, timeout_delay); + } +} diff --git a/app/controllers/bbb_controller.rb b/app/controllers/bbb_controller.rb index f4eee6e4..bf45a720 100644 --- a/app/controllers/bbb_controller.rb +++ b/app/controllers/bbb_controller.rb @@ -69,6 +69,9 @@ class BbbController < ApplicationController # DELETE /rooms/:id/recordings/:record_id def delete_recordings bbb_res = bbb_delete_recordings(params[:record_id]) + if bbb_res[:returncode] + RecordingDeletesJob.perform_later(@user.username, params[:record_id]) + end render_bbb_response bbb_res end diff --git a/app/jobs/recording_deletes_job.rb b/app/jobs/recording_deletes_job.rb new file mode 100644 index 00000000..e3e04323 --- /dev/null +++ b/app/jobs/recording_deletes_job.rb @@ -0,0 +1,23 @@ +class RecordingDeletesJob < ApplicationJob + include BbbApi + + queue_as :default + + def perform(room, record_id) + tries = 0 + sleep_time = 2 + + while tries < 4 + bbb_res = bbb_get_recordings(nil, record_id) + if !bbb_res[:recordings] || bbb_res[:messageKey] == 'noRecordings' + ActionCable.server.broadcast "#{room}_recording_updates_channel", + action: 'delete', + record_id: record_id + break + end + sleep sleep_time + sleep_time = sleep_time * 2 + tries += 1 + end + end +end diff --git a/app/jobs/recording_updates_job.rb b/app/jobs/recording_updates_job.rb index 7d884756..e3160773 100644 --- a/app/jobs/recording_updates_job.rb +++ b/app/jobs/recording_updates_job.rb @@ -11,6 +11,7 @@ class RecordingUpdatesJob < ApplicationJob bbb_res = bbb_get_recordings(nil, record_id) if bbb_res[:recordings].first[:published].to_s == published ActionCable.server.broadcast "#{room}_recording_updates_channel", + action: 'update', record_id: record_id, published: bbb_res[:recordings].first[:published] break diff --git a/app/views/landing/rooms.html.erb b/app/views/landing/rooms.html.erb index 7be8d4a5..40747bde 100644 --- a/app/views/landing/rooms.html.erb +++ b/app/views/landing/rooms.html.erb @@ -68,13 +68,16 @@ -
+