Upstream sync
This commit is contained in:
@@ -18,13 +18,14 @@ class AcquiredMediaRelease < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
%i[name file_infos_count]
|
||||
%i[name files_count owner_info]
|
||||
end
|
||||
end
|
||||
|
||||
# This association needs to be removed after changing the API. Removing it right now will cause failure in API specs.
|
||||
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||
|
||||
accepts_nested_attributes_for :file_infos
|
||||
has_many_attached :files
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
@@ -102,7 +103,19 @@ class AcquiredMediaRelease < ApplicationRecord
|
||||
true
|
||||
end
|
||||
|
||||
def file_infos_count
|
||||
file_infos.any? ? file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
||||
def files_count
|
||||
files.any? ? files.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
||||
end
|
||||
|
||||
def image_files
|
||||
files_blobs.where("content_type ILIKE ?", "%image%")
|
||||
end
|
||||
|
||||
def video_files
|
||||
files_blobs.where("content_type ILIKE ?", "%video%")
|
||||
end
|
||||
|
||||
def other_files
|
||||
files_blobs.where("NOT content_type ILIKE ANY (array[?])", ["%image%", "%video%"])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,7 +40,7 @@ class AppHost
|
||||
use_ssl: false,
|
||||
},
|
||||
production: {
|
||||
host: "bigmedia.ai",
|
||||
host: "mesuite.ai",
|
||||
use_ssl: true,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@ class AppearanceRelease < ApplicationRecord
|
||||
include SecondGuardianName
|
||||
include CsvExportable
|
||||
include Approvable
|
||||
include Amendmenable
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
|
||||
@@ -49,11 +49,13 @@ class Broadcast < ApplicationRecord
|
||||
private
|
||||
|
||||
def create_mux_live_stream
|
||||
stream = MuxLiveStream.new
|
||||
stream = MuxLiveStream.create_with_simulcast
|
||||
|
||||
self.stream_uid = stream.id
|
||||
self.stream_key = stream.key
|
||||
self.stream_playback_uid = stream.playback_id
|
||||
self.simulcast_uid = stream.simulcast_id
|
||||
self.director_mode_video_embed ||= stream.simulcast_destination.try(:playback_embed)
|
||||
self.save!
|
||||
end
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
module CsvExportable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
COMMON_HEADERS = %i[approved? notes tags signed_at].freeze
|
||||
COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze
|
||||
COMMON_HEADERS = %i[approved notes tags signed_at].freeze
|
||||
COMMON_VALUES = %w[approved? clean_notes clean_tags signed_on].freeze
|
||||
|
||||
included do
|
||||
class << self
|
||||
@@ -29,11 +29,20 @@ module CsvExportable
|
||||
|
||||
private
|
||||
|
||||
def owner_info
|
||||
compact_contact_info(name: person_name, address: person_address, phone: person_phone, email: person_email)
|
||||
end
|
||||
|
||||
def contact_info
|
||||
owner_info
|
||||
end
|
||||
|
||||
def compact_contact_info(name: nil, address: nil, phone: nil, email: nil)
|
||||
contact_info = ''
|
||||
contact_info += "#{person_address}; " if person_address.present?
|
||||
contact_info += "P: #{person_phone}; " if person_phone.present?
|
||||
contact_info += "E: #{person_email}" if person_email.present?
|
||||
contact_info += "#{name}; " if name.present?
|
||||
contact_info += "#{address}; " if address.present?
|
||||
contact_info += "P: #{phone}; " if phone.present?
|
||||
contact_info += "E: #{email}" if email.present?
|
||||
contact_info.delete_suffix '; '
|
||||
end
|
||||
|
||||
|
||||
@@ -23,6 +23,9 @@ class ContractTemplate < ApplicationRecord
|
||||
has_rich_text :guardian_clause
|
||||
has_rich_text :signature_legal_text
|
||||
has_rich_text :amendment_clause
|
||||
has_rich_text :exhibit_a_legal_text
|
||||
has_rich_text :exhibit_b_legal_text
|
||||
has_rich_text :questionnaire_legal_text
|
||||
|
||||
validates :name, presence: true
|
||||
validates :release_type, presence: true
|
||||
@@ -70,6 +73,14 @@ class ContractTemplate < ApplicationRecord
|
||||
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
|
||||
end
|
||||
|
||||
def has_exhibit_a?
|
||||
exhibit_a_legal_text.present?
|
||||
end
|
||||
|
||||
def has_exhibit_b?
|
||||
exhibit_b_legal_text.present?
|
||||
end
|
||||
|
||||
def editable?
|
||||
releases.size.zero?
|
||||
end
|
||||
|
||||
@@ -16,7 +16,7 @@ class LocationRelease < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
%i[name address]
|
||||
%i[location_info owner_info amendment_signed_column]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,6 +67,18 @@ class LocationRelease < ApplicationRecord
|
||||
true
|
||||
end
|
||||
|
||||
def location_info
|
||||
compact_contact_info(name: name, address: address)
|
||||
end
|
||||
|
||||
def amendment_signed_column
|
||||
if amendment_signable?
|
||||
amendment_signed?
|
||||
else
|
||||
I18n.t('location_releases.csv.no_amendment_clause')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def end_date_after_start_date
|
||||
|
||||
@@ -20,7 +20,7 @@ class MaterialRelease < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
%i[name]
|
||||
%i[name owner_info]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
41
app/models/millicast_destination.rb
Normal file
41
app/models/millicast_destination.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
class MillicastDestination
|
||||
attr_reader :name, :token
|
||||
|
||||
def self.create
|
||||
token_stream_name = SecureRandom.urlsafe_base64
|
||||
|
||||
publish_token = Millicast::PublishToken.create(
|
||||
label: SecureRandom.urlsafe_base64,
|
||||
streams: [
|
||||
{ streamName: token_stream_name }
|
||||
]
|
||||
)
|
||||
|
||||
new(token_stream_name, publish_token.data.token)
|
||||
end
|
||||
|
||||
def initialize(name, token)
|
||||
@name = name
|
||||
@token = token
|
||||
end
|
||||
|
||||
def account_id
|
||||
ENV["MILLICAST_ACCOUNT_ID"]
|
||||
end
|
||||
|
||||
def key
|
||||
"#{name}?token=#{token}"
|
||||
end
|
||||
|
||||
def url
|
||||
"rtmp://live-rtmp-pub.millicast.com:1935/v2/pub"
|
||||
end
|
||||
|
||||
def playback_url
|
||||
"https://viewer.millicast.com/v2?streamId=#{account_id}/#{name}"
|
||||
end
|
||||
|
||||
def playback_embed
|
||||
"<iframe src=\"#{playback_url}\" allowfullscreen width=\"640\" height=\"480\"></iframe>"
|
||||
end
|
||||
end
|
||||
@@ -11,6 +11,7 @@ class MiscRelease < ApplicationRecord
|
||||
include GuardianPhotoable
|
||||
include CsvExportable
|
||||
include Approvable
|
||||
include Exploitable
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
|
||||
@@ -1,4 +1,15 @@
|
||||
class MuxLiveStream
|
||||
attr_accessor :simulcast_id, :simulcast_destination
|
||||
|
||||
def self.create_with_simulcast(destination = nil)
|
||||
destination ||= MillicastDestination.create
|
||||
|
||||
MuxLiveStream.new.tap do |stream|
|
||||
stream.id # force the live stream to be created by calling for its id
|
||||
stream.create_simulcast(destination)
|
||||
end
|
||||
end
|
||||
|
||||
def id
|
||||
live_stream.data.id
|
||||
end
|
||||
@@ -15,6 +26,15 @@ class MuxLiveStream
|
||||
client.delete_live_stream(stream_uid)
|
||||
end
|
||||
|
||||
def create_simulcast(destination)
|
||||
return if test_mode_enabled?
|
||||
|
||||
request = MuxRuby::CreateSimulcastTargetRequest.new(stream_key: destination.key, url: destination.url)
|
||||
result = client.create_live_stream_simulcast_target(id, request)
|
||||
self.simulcast_destination = destination
|
||||
self.simulcast_id = result.data.id
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def live_stream
|
||||
|
||||
@@ -2,6 +2,7 @@ class Project < ApplicationRecord
|
||||
include Archivable
|
||||
include Filterable
|
||||
include Syncable
|
||||
include PgSearch
|
||||
|
||||
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material medical misc)
|
||||
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music medical misc)
|
||||
@@ -42,6 +43,15 @@ class Project < ApplicationRecord
|
||||
}
|
||||
end
|
||||
|
||||
pg_search_scope :search, {
|
||||
against: [:name],
|
||||
using: {
|
||||
tsearch: {any_word: true, prefix: true},
|
||||
trigram: {},
|
||||
dmetaphone: {any_word: true}
|
||||
}
|
||||
}
|
||||
|
||||
validates :name, presence: true, uniqueness: { scope: :account_id }
|
||||
|
||||
filterable_by :active, :inactive, :archived
|
||||
|
||||
Reference in New Issue
Block a user