class StreamFlow

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.

Attributes

delete_photo[R]

Public Class Methods

live_now() click to toggle source
# 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
programmed() click to toggle source
# File app/models/stream_flow.rb, line 51
def self.programmed
  Event.current.with_streaming.map {|evt| evt.stream_flow}.compact.uniq
end

Public Instance Methods

announced?() click to toggle source

Devuelve true si el streaming está anunciado.

# File app/models/stream_flow.rb, line 136
def announced?
  self.announced_in_irekia?
end
assign_event!() click to toggle source

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
day_events() click to toggle source

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
default_event() click to toggle source

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
delete_photo=(value) click to toggle source

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
event_info_file_name() click to toggle source

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
event_info_file_path() click to toggle source
# 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
event_info_file_url() click to toggle source
# File app/models/stream_flow.rb, line 196
def event_info_file_url
  "/streaming_status/#{self.event_info_file_name}"
end
events_to_be_emitted(time_interval) click to toggle source

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
has_photo?() click to toggle source

Indica si hay foto de la sala.

# File app/models/stream_flow.rb, line 164
def has_photo?
  self.photo_file_name.present?
end
mobile_url() click to toggle source

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
next_event() click to toggle source

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
on_air?() click to toggle source

Devuelve true si el streaming se está emitiendo.

# File app/models/stream_flow.rb, line 131
def on_air?
  self.show_in_irekia?
end
on_web?() click to toggle source

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
photo_path() click to toggle source

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
pretty_dates(locale = I18n.locale) click to toggle source

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
pretty_hours(locale = I18n.locale) click to toggle source

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
status_file_name() click to toggle source

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
status_file_path() click to toggle source
# File app/models/stream_flow.rb, line 179
def status_file_path
  File.join(RAILS_ROOT, '/public/streaming_status', self.status_file_name)
end
status_file_url() click to toggle source
# File app/models/stream_flow.rb, line 183
def status_file_url
  "/streaming_status/#{self.status_file_name}"
end
streaming_status() click to toggle source

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
to_be_shown?(time_interval=60) click to toggle source

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
travelling?() click to toggle source
# File app/models/stream_flow.rb, line 200
def travelling?
  # Los streamings itinerantes tienen código SIT*
  self.code.match(/^SIT/)
end