78 lines
2.2 KiB
Ruby
78 lines
2.2 KiB
Ruby
class Public::BroadcastsController < Public::BaseController
|
|
skip_after_action :verify_authorized
|
|
before_action :set_broadcast, only: [:show, :update]
|
|
|
|
def show
|
|
@conference_url = conference_url_for(@broadcast)
|
|
@multi_view_broadcasts = multi_view_broadcasts
|
|
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
|
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
|
|
|
render 'broadcasts/show'
|
|
end
|
|
|
|
def update
|
|
@broadcast.update(broadcast_params)
|
|
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
|
|
|
pagination_content = ApplicationController.render html: helpers.will_paginate(@files,params: { active_tab: params[:active_tab], page: params[:page], active_files_tab: params[:active_files_tab] })
|
|
BroadcastsChannel.broadcast_file_upload_updates(@broadcast, @files, pagination_content)
|
|
end
|
|
|
|
private
|
|
|
|
def broadcast_params
|
|
params.require(:broadcast).permit(files: [])
|
|
end
|
|
|
|
def multi_view_broadcasts
|
|
Broadcast.
|
|
where(token: params[:multi_view_tokens]).
|
|
order_by_recent.
|
|
map do |b|
|
|
files_page = params[:files_page] if params[:active_files_tab] == b.token
|
|
MultiViewBroadcast.new(b, params[:multi_view_tokens], files_page)
|
|
end
|
|
end
|
|
|
|
def set_broadcast
|
|
@broadcast = Broadcast.find_by_token(params[:token])
|
|
|
|
unless @broadcast.present?
|
|
redirect_to [:new, :session], alert: t(".alert")
|
|
end
|
|
end
|
|
|
|
def conference_url_for(broadcast)
|
|
broadcast.video_conference_url_override.presence || broadcast_zoom_meeting_url(broadcast.token)
|
|
end
|
|
|
|
class MultiViewBroadcast
|
|
include Rails.application.routes.url_helpers
|
|
|
|
delegate_missing_to :@broadcast
|
|
|
|
def initialize(broadcast, multi_view_tokens, paginate_page)
|
|
@broadcast = broadcast
|
|
@multi_view_tokens = multi_view_tokens
|
|
@paginate_page = paginate_page
|
|
end
|
|
|
|
def url
|
|
broadcast_url(uid, multi_view_tokens: @multi_view_tokens, host: AppHost.new.domain_with_port, locale: I18n.locale)
|
|
end
|
|
|
|
def files
|
|
@broadcast.files.order("created_at DESC").paginate(page: @paginate_page)
|
|
end
|
|
|
|
def uid
|
|
token
|
|
end
|
|
|
|
def self.model_name
|
|
Broadcast.model_name
|
|
end
|
|
end
|
|
end
|