Rifiuta file troppo grandi o non-immagine via Marcel prima di attach, e genera la slate in sync anche quando cover_image esiste ma cover_slate non è ancora pronta. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.0 KiB
Ruby
40 lines
1.0 KiB
Ruby
module Streams
|
|
# Garantisce che la slate MP4 esista per il record effettivo della partita (sync al go-live).
|
|
class CoverSlateEnsurer
|
|
def self.ensure_for!(match)
|
|
new(match).ensure!
|
|
end
|
|
|
|
def initialize(match)
|
|
@match = match
|
|
@resolver = CoverResolver.new(match)
|
|
end
|
|
|
|
def ensure!
|
|
record = find_pending_cover_record
|
|
return unless record
|
|
return if slate_ready?(record)
|
|
|
|
GenerateCoverSlate.call(record)
|
|
rescue GenerateCoverSlate::Error => e
|
|
Rails.logger.warn("[CoverSlateEnsurer] match=#{@match.id} #{e.message}")
|
|
nil
|
|
end
|
|
|
|
private
|
|
|
|
# Cerca il record con cover_image nella catena di ereditarietà,
|
|
# anche se la slate non è ancora pronta (a differenza di resolve che richiede la slate su disco).
|
|
def find_pending_cover_record
|
|
@resolver.pending_cover_record
|
|
end
|
|
|
|
def slate_ready?(record)
|
|
return false unless record.cover_slate.attached?
|
|
|
|
path = CoverSlatePaths.local_path_for(record)
|
|
path.present? && File.exist?(path)
|
|
end
|
|
end
|
|
end
|