Salas de streaming.
Cada sale tiene un título y un código que se usa para generar el HTML necesario para emitir en la web.
# File app/models/stream_flow.rb, line 55 def self.live_now live_streamings = [] self.live.map do |sf| if sf.on_air? live_streamings << sf.event.present? ? sf.event : sf end end return live_streamings.compact.uniq end
# File app/models/stream_flow.rb, line 51 def self.programmed Event.current.with_streaming.map {|evt| evt.stream_flow}.compact.uniq end
Devuelve true si el streaming está anunciado.
# File app/models/stream_flow.rb, line 136 def announced? self.announced_in_irekia? end
Asigna evento por defecto a la sala de streaming. Primero mira si hay eventos que empiezan dentro de menos de 1 hora. Si no encuentra, coge el primer evento del día si hay eventos del día. Si la sala ya tiene asignado un evento, este no cambia
# File app/models/stream_flow.rb, line 103 def assign_event! if self.event.nil? if !self.on_web? evt = self.default_event self.update_attribute(:event_id, evt.id) if evt end else unless self.event.starts_at.to_date.eql?(Date.today) self.event = nil self.save end end self.event end
Eventos del día asignados a la sala de streaming.
# File app/models/stream_flow.rb, line 79 def day_events Event.published.with_streaming.find(:all, :conditions => [ "(stream_flow_id = :flow_id) AND (starts_at <= :end) AND (ends_at >= :beginning)", { :flow_id => self.id, :beginning => Time.zone.now.at_beginning_of_day, :end => Time.zone.now.end_of_day }], :order => 'starts_at') end
Devuelve el evento que el sistema considera que corresponde al streaming flow en este momento.
# File app/models/stream_flow.rb, line 96 def default_event self.next_event || self.day_events.first end
Accessor para borrar la foto de la sala
# File app/models/stream_flow.rb, line 170 def delete_photo=(value) self.photo = nil if value.to_i == 1 end
El nombre del fichero con los datos del evento que se emite.
# File app/models/stream_flow.rb, line 188 def event_info_file_name "streamed_event#{self.id}.txt" end
# File app/models/stream_flow.rb, line 192 def event_info_file_path File.join(RAILS_ROOT, '/public/streaming_status', self.event_info_file_name) end
# File app/models/stream_flow.rb, line 196 def event_info_file_url "/streaming_status/#{self.event_info_file_name}" end
Eventos del día que empiezan dentro de un intervalo de tiempo (en minutos)
# File app/models/stream_flow.rb, line 66 def events_to_be_emitted(time_interval) evt = Event.published.with_streaming.find(:all, :conditions => [ "(stream_flow_id = :flow_id) AND (starts_at <= :time_int) AND (ends_at >= :now)", { :flow_id => self.id, :time_int => Time.zone.now + time_interval.minutes, :now => Time.zone.now }], :order => 'starts_at') evt end
Indica si hay foto de la sala.
# File app/models/stream_flow.rb, line 164 def has_photo? self.photo_file_name.present? end
URL de acceso al streaming para móviles. Sólo para streamings que tienen soporte para este tipo de emisión.
# File app/models/stream_flow.rb, line 207 def mobile_url self.mobile_support? ? "http://bideoak3.euskadi.net:1935/live/#{self.code}/playlist.m3u8" : nil end
Devuelve el evento que toca emitir dentro de 1 hora o menos.
# File app/models/stream_flow.rb, line 91 def next_event self.events_to_be_emitted(60).to_a.first end
Devuelve true si el streaming se está emitiendo.
# File app/models/stream_flow.rb, line 131 def on_air? self.show_in_irekia? end
Devuelve true
si el streaming está anunciado o se está
emitiendo en Irekia.
# File app/models/stream_flow.rb, line 126 def on_web? self.show_in_irekia? || self.announced_in_irekia? end
El path que se usa en el image_tag con la foto de la sala de streaming.
# File app/models/stream_flow.rb, line 159 def photo_path self.has_photo? ? self.photo.url(:n600) : "/video/streaming.jpg" end
Deluelve las fechas del evento la fecha de inicio del streaming si el streaming no tiene evento asignado
# File app/models/stream_flow.rb, line 149 def pretty_dates(locale = I18n.locale) self.event.present? ? self.event.pretty_dates(locale) : "#{I18n.localize(self.updated_at.to_date, :format => :long, :locale => locale)}, #{self.updated_at.strftime('%H:%M')}" end
Deluelve las horas del evento o la hora de inicio del streaming si el streaming no tiene evento asignado
# File app/models/stream_flow.rb, line 154 def pretty_hours(locale = I18n.locale) self.event.present? ? self.event.pretty_hours(locale) : "#{self.updated_at.strftime('%H:%M')} - " end
El nombre del fichero con el status del streaming. Se usa para saber si hay que mostrar el player.
# File app/models/stream_flow.rb, line 175 def status_file_name "streaming#{self.id}.txt" end
# File app/models/stream_flow.rb, line 179 def status_file_path File.join(RAILS_ROOT, '/public/streaming_status', self.status_file_name) end
# File app/models/stream_flow.rb, line 183 def status_file_url "/streaming_status/#{self.status_file_name}" end
Devuelve el status del stream flow
# File app/models/stream_flow.rb, line 141 def streaming_status status = 'finished' status = 'announced' if self.announced? status = 'live' if self.on_air? status end
Indica si el streaming está programado para dentro del tiempo
indicado como time_interval
(en minutos).
# File app/models/stream_flow.rb, line 121 def to_be_shown?(time_interval=60) !self.events_to_be_emitted(time_interval).blank? end
# File app/models/stream_flow.rb, line 200 def travelling? # Los streamings itinerantes tienen código SIT* self.code.match(/^SIT/) end