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