Compare commits
9 Commits
implement-
...
do-not-cha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe61e5bc47 | ||
|
|
d9f5e2cd10 | ||
|
|
a076edcf8b | ||
|
|
dcc1d098d2 | ||
|
|
830a5eb3e4 | ||
|
|
add8304eab | ||
|
|
f04d34d337 | ||
|
|
c033f5df17 | ||
|
|
7f49f31ebf |
@@ -21,7 +21,8 @@ $(document).on "turbolinks:load", ->
|
||||
|
||||
refreshBroadcastVideo: (data) ->
|
||||
$("#broadcast_updates").html data.status_content
|
||||
if data.streamer_status == 'recording' && data.status == 'active'
|
||||
stream_selected = $("#broadcast_video").attr('video-type') == 'stream';
|
||||
if data.streamer_status == 'recording' && data.status == 'active' && stream_selected
|
||||
$("#broadcast_video").html data.video_content
|
||||
new (Clappr.Player)(
|
||||
parentId: '#broadcast_video'
|
||||
|
||||
@@ -3,7 +3,7 @@ $(document).on("click", "[data-behavior=play_recording]", function() {
|
||||
return false;
|
||||
}
|
||||
|
||||
console.warn('Play prev : ', playback_url);
|
||||
$("#broadcast_video").attr('video-type', 'recording');
|
||||
|
||||
var playback_url = $(this).attr("data-playback-url")
|
||||
$("#broadcast_video").empty();
|
||||
@@ -23,4 +23,6 @@ $(document).on("click", "[data-behavior=play_recording]", function() {
|
||||
$(this).siblings().children("i").remove();
|
||||
$(this).addClass('active');
|
||||
$(this).prepend('<i class="fa fa-check"> </i>');
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on("click", "[data-behavior=play_stream]", function() { $("#broadcast_video").attr('video-type', 'stream'); });
|
||||
@@ -33,6 +33,11 @@ class BroadcastsController < ApplicationController
|
||||
end
|
||||
|
||||
def update
|
||||
unless params.has_key?(:broadcast)
|
||||
@broadcast.regenerate_token
|
||||
redirect_to([@project, @broadcast], notice: t('.reset_notice')) and return
|
||||
end
|
||||
|
||||
@broadcast.update(broadcast_params)
|
||||
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
||||
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
<%= link_to "Switch View", "#", class: "btn btn-light border dropdown-toggle", role: "button", id: "dropdownMenuLink", data: { toggle: "dropdown" }, aria: { haspopup: "true", expanded: "false" } %>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
|
||||
<h5 class="dropdown-header">Live Streams</h5>
|
||||
<%= link_to fa_icon("check", text: @broadcast.name.titleize), "#", class: "dropdown-item active" %>
|
||||
<%= link_to fa_icon("check", text: @broadcast.name.titleize), "#", data: { behavior: "play_stream"}, class: "dropdown-item active" %>
|
||||
<% @multi_view_broadcasts.each do |broadcast| %>
|
||||
<% if broadcast.id != @broadcast.id %>
|
||||
<%= link_to broadcast.name.titleize, broadcast.url, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
|
||||
<%= link_to broadcast.name.titleize, broadcast.url, data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<h5 class="dropdown-header">Previous Sessions</h5>
|
||||
@@ -102,6 +102,7 @@
|
||||
<i class="fa fa-clipboard"></i>
|
||||
Copy URL
|
||||
</button>
|
||||
<%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
|
||||
</div>
|
||||
<% else %>
|
||||
<input type="text" class="form-control" value="<%= broadcast_url(@broadcast.token) %>" readonly>
|
||||
@@ -110,6 +111,7 @@
|
||||
<i class="fa fa-clipboard"></i>
|
||||
Copy URL
|
||||
</button>
|
||||
<%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<dl>
|
||||
<%= description_list_pair t('.description_labels.producer'), releasable.project.account.name %>
|
||||
<%= description_list_pair t('.description_labels.production'), releasable.project.name %>
|
||||
<%= description_list_pair t('.description_labels.employee_issued_to'), releasable.name %>
|
||||
<%= description_list_pair t('.description_labels.issued_to'), releasable.name %>
|
||||
<%= description_list_pair t('.description_labels.issued_by'), releasable.approved_by_user_name %>
|
||||
<%= description_list_pair t('.description_labels.date_issued'), releasable.approved_at %>
|
||||
</dl>
|
||||
@@ -217,6 +217,9 @@ en:
|
||||
new:
|
||||
heading:
|
||||
Create Live Stream
|
||||
show:
|
||||
actions:
|
||||
reset_url: Reset URL
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
@@ -235,6 +238,8 @@ en:
|
||||
share_stream: Share live stream link with clients
|
||||
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||
stream_multiple_cameras: Stream multiple cameras at one time
|
||||
update:
|
||||
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
|
||||
bulk_taggings:
|
||||
new_bulk_tag_modal:
|
||||
submit: Add
|
||||
@@ -312,8 +317,8 @@ en:
|
||||
for_office_use_only:
|
||||
description_labels:
|
||||
date_issued: Date Issued
|
||||
employee_issued_to: Employee Issued To
|
||||
issued_by: Issued By
|
||||
issued_to: Issued To
|
||||
producer: Producer
|
||||
production: Production
|
||||
heading: For Office Use Only
|
||||
|
||||
@@ -81,6 +81,9 @@ es:
|
||||
do_not_copy_warning: "Do not copy (ES)"
|
||||
serial_number_label: "Serial Number (ES)"
|
||||
broadcasts:
|
||||
show:
|
||||
actions:
|
||||
reset_url: Reset URL (ES)
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
@@ -99,6 +102,8 @@ es:
|
||||
share_stream: Share live stream link with clients
|
||||
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||
stream_multiple_cameras: Stream multiple cameras at one time
|
||||
update:
|
||||
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
|
||||
contract_templates:
|
||||
blank_contracts:
|
||||
create:
|
||||
@@ -146,8 +151,8 @@ es:
|
||||
for_office_use_only:
|
||||
description_labels:
|
||||
date_issued: Date Issued (ES)
|
||||
employee_issued_to: Employee Issued To (ES)
|
||||
issued_by: Issued By (ES)
|
||||
issued_to: Issued To (ES)
|
||||
producer: Producer (ES)
|
||||
production: Production (ES)
|
||||
heading: For Office Use Only (ES)
|
||||
|
||||
@@ -203,6 +203,15 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
expect(BroadcastsChannel).to have_received(:broadcast_file_upload_updates)
|
||||
end
|
||||
|
||||
it "regenerates token if #update is called without broadcast param" do
|
||||
old_token = broadcast.token
|
||||
patch :update, params: { project_id: project.id, id: broadcast.id }
|
||||
|
||||
expect(response).to redirect_to [project, broadcast]
|
||||
expect(flash.notice).to eq token_reset_notice
|
||||
expect(Broadcast.last.token).not_to eq old_token
|
||||
end
|
||||
end
|
||||
|
||||
describe "#destroy" do
|
||||
@@ -252,4 +261,8 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
def create_stream
|
||||
t 'broadcasts.splash.actions.create_stream'
|
||||
end
|
||||
|
||||
def token_reset_notice
|
||||
t 'broadcasts.update.reset_notice'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -63,6 +63,54 @@ feature 'User managing broadcasts' do
|
||||
expect(page).to have_content(recording.download_file_name)
|
||||
end
|
||||
|
||||
scenario 'Clicking Reset URL regenerates broadcast token' do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
old_token = broadcast.token
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
expect(page).to have_content reset_url
|
||||
expect(page).to have_xpath "//input[@readonly][@value='#{broadcast_url(old_token)}']"
|
||||
|
||||
click_link reset_url
|
||||
expect(Broadcast.last.token).not_to eq old_token
|
||||
expect(page).to have_xpath "//input[@readonly][@value='#{broadcast_url(Broadcast.last.token)}']"
|
||||
expect(page).to have_content token_reset_notice
|
||||
end
|
||||
|
||||
scenario 'Player will not reload if stream is reactivated while user is watching previous recording', js: true do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast)
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
expect(page).to have_content stream_idle_message
|
||||
|
||||
broadcast.streamer_status = :recording
|
||||
broadcast.status = :active
|
||||
BroadcastsChannel.broadcast_stream_updates(broadcast)
|
||||
|
||||
expect(page).to have_content stream_begun_message
|
||||
expect(page).to have_selector('div#broadcast_video', count: 1)
|
||||
|
||||
broadcast.streamer_status = :idle
|
||||
broadcast.status = :idle
|
||||
BroadcastsChannel.broadcast_stream_updates(broadcast)
|
||||
|
||||
click_on switch_view_dropdown
|
||||
click_on recording.download_file_name
|
||||
|
||||
expect(page).to have_content stream_idle_message
|
||||
expect(page).to have_selector('div#broadcast_video', count: 1)
|
||||
|
||||
broadcast.streamer_status = :recording
|
||||
broadcast.status = :active
|
||||
BroadcastsChannel.broadcast_stream_updates(broadcast)
|
||||
|
||||
expect(page).to have_content stream_begun_message
|
||||
expect(page).to have_selector('div#broadcast_video', count: 1)
|
||||
end
|
||||
|
||||
scenario 'user can go back and forth between live session and previous sessions', js: true do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast)
|
||||
@@ -189,4 +237,22 @@ feature 'User managing broadcasts' do
|
||||
def create_stream
|
||||
t 'broadcasts.splash.actions.create_stream'
|
||||
end
|
||||
|
||||
def reset_url
|
||||
t 'broadcasts.show.actions.reset_url'
|
||||
end
|
||||
|
||||
def token_reset_notice
|
||||
t 'broadcasts.update.reset_notice'
|
||||
end
|
||||
|
||||
def stream_begun_message
|
||||
'Live stream has begun, click play to watch it'
|
||||
end
|
||||
|
||||
def stream_idle_message
|
||||
'Live stream is waiting to begin'
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
@@ -260,7 +260,7 @@ feature "User managing medical releases" do
|
||||
expect(pdf_body).to have_content for_office_use_only.upcase
|
||||
expect(pdf_body).to have_content producer_label
|
||||
expect(pdf_body).to have_content production_label
|
||||
expect(pdf_body).to have_content employee_issued_to_label
|
||||
expect(pdf_body).to have_content issued_to_label
|
||||
expect(pdf_body).to have_content issued_by_label
|
||||
expect(pdf_body).to have_content date_issued
|
||||
expect(pdf_body).to have_content 'Big Joe'
|
||||
@@ -282,7 +282,7 @@ feature "User managing medical releases" do
|
||||
expect(pdf_body).not_to have_content for_office_use_only.upcase
|
||||
expect(pdf_body).not_to have_content producer_label
|
||||
expect(pdf_body).not_to have_content production_label
|
||||
expect(pdf_body).not_to have_content employee_issued_to_label
|
||||
expect(pdf_body).not_to have_content issued_to_label
|
||||
expect(pdf_body).not_to have_content issued_by_label
|
||||
expect(pdf_body).not_to have_content date_issued
|
||||
expect(pdf_body).not_to have_content 'Big Joe'
|
||||
@@ -580,8 +580,8 @@ feature "User managing medical releases" do
|
||||
t 'contracts.for_office_use_only.description_labels.production'
|
||||
end
|
||||
|
||||
def employee_issued_to_label
|
||||
t 'contracts.for_office_use_only.description_labels.employee_issued_to'
|
||||
def issued_to_label
|
||||
t 'contracts.for_office_use_only.description_labels.issued_to'
|
||||
end
|
||||
|
||||
def issued_by_label
|
||||
|
||||
Reference in New Issue
Block a user