72 lines
1.5 KiB
Ruby
72 lines
1.5 KiB
Ruby
module JamRuby
|
|
class Mix < ActiveRecord::Base
|
|
MAX_MIX_TIME = 7200 # 2 hours
|
|
|
|
before_destroy :delete_s3_files
|
|
|
|
self.primary_key = 'id'
|
|
belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :mixes
|
|
|
|
def self.schedule(recording, manifest)
|
|
raise if recording.nil?
|
|
|
|
mix = Mix.new
|
|
mix.recording = recording
|
|
mix.manifest = manifest
|
|
mix.save
|
|
|
|
mix
|
|
end
|
|
|
|
def self.next(mix_server)
|
|
# First check if there are any mixes started so long ago that we want to re-run them
|
|
Mix.where("completed_at IS NULL AND started_at < ?", Time.now - MAX_MIX_TIME).each do |mix|
|
|
# FIXME: This should probably throw some kind of log, since it means something went wrong
|
|
mix.started_at = nil
|
|
mix.mix_server = nil
|
|
mix.save
|
|
end
|
|
|
|
mix = Mix.where(:started_at => nil).limit(1).first
|
|
return nil if mix.nil?
|
|
|
|
mix.started_at = Time.now
|
|
mix.mix_server = mix_server
|
|
mix.save
|
|
|
|
mix
|
|
end
|
|
|
|
def finish(length, md5)
|
|
self.completed_at = Time.now
|
|
self.length = length
|
|
self.md5 = md5
|
|
save
|
|
end
|
|
|
|
def s3_url
|
|
S3Manager.s3_url(hashed_filename)
|
|
end
|
|
|
|
def url
|
|
S3Manager.url(hashed_filename)
|
|
end
|
|
|
|
def is_completed
|
|
!completed_at.nil?
|
|
end
|
|
|
|
private
|
|
|
|
def delete_s3_files
|
|
S3Manager.delete(hashed_filename)
|
|
end
|
|
|
|
def hashed_filename
|
|
S3Manager.hashed_filename('mix', id)
|
|
end
|
|
|
|
|
|
end
|
|
end
|