diff --git a/app/controllers/concerns/bbb_server.rb b/app/controllers/concerns/bbb_server.rb index 39a0f086..d38d52da 100644 --- a/app/controllers/concerns/bbb_server.rb +++ b/app/controllers/concerns/bbb_server.rb @@ -108,6 +108,16 @@ module BbbServer bbb_server.send_api_request("updateRecordings", meta) end + # Update a recording from a room + def publish_recording(record_id) + bbb_server.publish_recordings(record_id, true) + end + + # Update a recording from a room + def unpublish_recording(record_id) + bbb_server.publish_recordings(record_id, false) + end + # Deletes a recording from a room. def delete_recording(record_id) bbb_server.delete_recordings(record_id) diff --git a/app/controllers/recordings_controller.rb b/app/controllers/recordings_controller.rb index 93912b46..f3e200ba 100644 --- a/app/controllers/recordings_controller.rb +++ b/app/controllers/recordings_controller.rb @@ -28,6 +28,12 @@ class RecordingsController < ApplicationController "meta_#{META_LISTED}" => (params[:state] == "public"), } + if params[:state] == "inaccessible" + unpublish_recording(params[:record_id]) + else + publish_recording(params[:record_id]) + end + res = update_recording(params[:record_id], meta) # Redirects to the page that made the initial request diff --git a/app/views/admins/components/_server_recording_row.html.erb b/app/views/admins/components/_server_recording_row.html.erb index 5f82cfbf..6e2362f3 100644 --- a/app/views/admins/components/_server_recording_row.html.erb +++ b/app/views/admins/components/_server_recording_row.html.erb @@ -42,6 +42,8 @@ - <% sorted_formats = recording[:playbacks].sort_by! { |p| p[:type] } %> - <% sorted_formats.each do |p| %> - <%= link_to t("recording.format.#{p[:type]}"), p[:url], class: "btn btn-sm btn-primary", target: "_blank" %> + <% unless recording[:state] == "unpublished" %> + <% sorted_formats = recording[:playbacks].sort_by! { |p| p[:type] } %> + <% sorted_formats.each do |p| %> + <%= link_to t("recording.format.#{p[:type]}"), p[:url], class: "btn btn-sm btn-primary", target: "_blank" %> + <% end %> <% end %> diff --git a/app/views/shared/components/_recording_row.html.erb b/app/views/shared/components/_recording_row.html.erb index 9efe062a..bd394c66 100644 --- a/app/views/shared/components/_recording_row.html.erb +++ b/app/views/shared/components/_recording_row.html.erb @@ -32,10 +32,12 @@ <% if recording_thumbnails? %> - <% p = recording[:playbacks].find do |p| p.key?(:preview) end %> - <% if p %> - <% safe_recording_images(p[:preview][:images][:image]).each do |img| %> - <%= image_tag(img[:content].strip, class: "thumbnail px-2") %> + <% if recording[:state] != "unpublished" %> + <% p = recording[:playbacks].find do |p| p.key?(:preview) end %> + <% if p %> + <% safe_recording_images(p[:preview][:images][:image]).each do |img| %> + <%= image_tag(img[:content].strip, class: "thumbnail px-2") %> + <% end %> <% end %> <% end %> @@ -50,6 +52,8 @@ - <% sorted_formats = recording[:playbacks].sort_by! { |p| p[:type] } %> - <% sorted_formats.each do |p| %> - <%= link_to t("recording.format.#{p[:type]}"), p[:url], class: "btn btn-sm btn-primary", target: "_blank" %> + <% unless recording[:state] == "unpublished" %> + <% sorted_formats = recording[:playbacks].sort_by! { |p| p[:type] } %> + <% sorted_formats.each do |p| %> + <%= link_to t("recording.format.#{p[:type]}"), p[:url], class: "btn btn-sm btn-primary", target: "_blank" %> + <% end %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 4fa9b725..f305cb0e 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -510,6 +510,7 @@ en: visibility: Visibility formats: Formats visibility: + inaccessible: Inaccessible public: Public unlisted: Unlisted format: diff --git a/spec/concerns/bbb_server_spec.rb b/spec/concerns/bbb_server_spec.rb index 6d3f3364..b6cb2375 100644 --- a/spec/concerns/bbb_server_spec.rb +++ b/spec/concerns/bbb_server_spec.rb @@ -82,6 +82,24 @@ describe BbbServer do end context "#recordings" do + it "publishes a recording" do + allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:publish_recordings).and_return( + returncode: true, published: true + ) + + expect(publish_recording(Faker::IDNumber.valid)) + .to contain_exactly([:returncode, true], [:published, true]) + end + + it "unpublishes a recording" do + allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:publish_recordings).and_return( + returncode: true, published: false + ) + + expect(unpublish_recording(Faker::IDNumber.valid)) + .to contain_exactly([:returncode, true], [:published, false]) + end + it "deletes the recording" do allow_any_instance_of(BigBlueButton::BigBlueButtonApi).to receive(:delete_recordings).and_return( returncode: true, deleted: true