Files
old-holivud2/app/models/video.rb
2020-05-31 22:38:19 +02:00

72 lines
3.1 KiB
Ruby

class Video < ApplicationRecord
include PgSearch
belongs_to :project, touch: true
has_many :acquired_media_releases, through: :project
has_many :appearance_releases, through: :project
has_many :location_releases, through: :project
has_many :material_releases, through: :project
has_many :talent_releases, through: :project
has_many :video_release_confirmations, dependent: :destroy
has_many :confirmed_acquired_media_releases, through: :video_release_confirmations, source: :releasable, source_type: "AcquiredMediaRelease"
has_many :confirmed_talent_releases, through: :video_release_confirmations, source: :releasable, source_type: "TalentRelease"
has_many :confirmed_appearance_releases, through: :video_release_confirmations, source: :releasable, source_type: "AppearanceRelease"
has_many :confirmed_location_releases, through: :video_release_confirmations, source: :releasable, source_type: "LocationRelease"
has_many :confirmed_music_releases, through: :video_release_confirmations, source: :releasable, source_type: "MusicRelease"
has_many :confirmed_material_releases, through: :video_release_confirmations, source: :releasable, source_type: "MaterialRelease"
has_many :bookmarks, dependent: :destroy
has_many :unreleased_appearances, dependent: :destroy
has_many :graphics_elements, dependent: :destroy
has_many :audio_confirmations, dependent: :destroy
has_one_attached :file
has_one_attached :edl_file
has_one_attached :graphics_only_edl_file
has_one_attached :audio_only_edl_file
enum analysis_status: { not_started: 0, pending: 1, success: 2, failure: 3 }, _prefix: "analysis"
enum audio_analysis_status: { not_started: 0, pending: 1, success: 2, failure: 3 }, _prefix: "audio_analysis"
enum video_editing_system: { avid: 0, adobe_premiere: 1 }
delegate :filename, to: :file, allow_nil: true
validates :file, attached: true, content_type: ["video/mp4", "video/quicktime"]
validates :edl_file, attached: true, content_type: ["application/octet-stream"]
validates :graphics_only_edl_file, content_type: ["application/octet-stream"]
validates :audio_only_edl_file, attached: true, content_type: ["application/octet-stream"], if: -> { adobe_premiere? }
pg_search_scope :search, {
against: [:name, :number],
using: {
tsearch: {any_word: true, prefix: true},
trigram: {},
dmetaphone: {any_word: true}
}
}
scope :video_analysis_started_before, ->(datetime) { where("analysis_started_at < ?", datetime) }
scope :audio_analysis_started_before, -> (datetime) { where("audio_analysis_started_at < ?", datetime) }
scope :reports_published, -> { where.not(report_published_at: nil) }
scope :published_at_desc_order, -> { order("report_published_at desc") }
def has_confirmed_release?(releasable)
public_send("confirmed_#{releasable.model_name.plural}").ids.include?(releasable.id)
end
def report_published?
report_published_at.present?
end
def report_unpublished?
!report_published?
end
def publish_report!(timestamp = Time.zone.now)
update!(report_published_at: timestamp)
end
def unpublish_report!
update!(report_published_at: nil)
end
end