Class Video
In: app/models/video.rb
Parent: ActiveRecord::Base

Clase para los videos de la Web TV.

Nota sobre los idiomas: las columnas que determinan el idioma en el que está disponible el video (show_in_es, show_in_eu y show_in_en) se actualizan automáticamente con un cronjob que llama a RAILS_ROOT/batch_processes/check_webtv_video_languages.sh.

Este proceso es necesario porque los videos se suben independientemente a través de SFTP sin tener que pasar por la aplicación web. Las columnas son necesarias para que por ejemplo en euskera, los listados solo contengan los videos disponibles en euskera

Methods

Included Modules

Sluggable DraftUtils::InstanceMethods FerretMethods VideoPaths

Attributes

info_from_file  [RW] 

Public Class methods

[Source]

     # File app/models/video.rb, line 121
121:   def self.featured
122:     self.published.translated.find(:first, :conditions => ["featured=?", true]) || Video.published.translated.find(:first, :order => "published_at DESC")
123:   end

Devuelve los videos FLV que hay en el directoio path

[Source]

     # File app/models/video.rb, line 126
126:   def self.videos_in_dir(path)
127:     Dir.glob(Video::VIDEO_PATH + path + "_e[sun].flv") + Dir.glob(Video::VIDEO_PATH + path + ".flv")
128:   end

Public Instance methods

Método que se usa en el bloque compartir.

[Source]

     # File app/models/video.rb, line 131
131:   def body
132:     self.title
133:   end

Devuelve los canales a los que pertenece el video.

[Source]

     # File app/models/video.rb, line 136
136:   def channels
137:     @private_tags ||= self.tags.private.collect {|t| t.name_es}
138:     if @private_tags
139:       @channels ||= WebTv.new.channels.find_tagged_with(@private_tags)
140:     else
141:       @channels = []
142:     end
143:     @channels
144:   end

[Source]

     # File app/models/video.rb, line 176
176:   def display_format_from_file
177:     info_from_file[:display_format]
178:   end

[Source]

     # File app/models/video.rb, line 180
180:   def duration_from_file
181:     info_from_file[:duration]
182:   end

Video a mostrar, en función del idioma actual

[Source]

    # File app/models/video.rb, line 72
72:   def featured_video
73:     videos[I18n.locale.to_sym] || videos[:common] || videos[I18n.default_locale.to_sym] || videos.values.first
74:   end

Determina si este video tiene imagen para preview

[Source]

     # File app/models/video.rb, line 102
102:   def has_cover_photo?
103:     File.exists?("#{Video::VIDEO_PATH}{video_path}.jpg")
104:   end

[Source]

     # File app/models/video.rb, line 146
146:   def info_from_file
147:     unless @info_from_file.present?
148:       begin
149:         @info_from_file = {}
150:         output = `/usr/local/bin/flvdump #{Video::VIDEO_PATH}#{self.featured_video} |head -1000`
151:         # 
152:         # if  m = output.match("'duration' => (.+)$")
153:         #   @duration_from_file = m[1].to_f.round
154:         # else
155:         #   logger.info "No he podido sacar la duracion de '#{output}'"
156:         # end
157:     
158:         [:duration, :width, :height].each do |key|
159:           if  m = output.match("'#{key}' => (.+)$")
160:             @info_from_file[key] = m[1].to_f.round
161:           else
162:             logger.info "No he podido sacar #{key} de '#{output}'"
163:           end
164:         end
165:         if (@info_from_file[:width].to_i > 0) && @info_from_file[:height].to_i > 0
166:           @info_from_file[:display_format] = (@info_from_file[:width].to_f / @info_from_file[:height].to_f) < 1.4 ? '43' : '169'
167:         end
168:       rescue
169:         logger.info "No he podido obtenerla"
170:       end
171:     end
172:     
173:     return @info_from_file
174:   end

Indica si el video está publicado

[Source]

    # File app/models/video.rb, line 48
48:   def published?
49:     !draft && !published_at.nil? && published_at <= Time.now
50:   end

Indica si se muestra en Agencia. Sólo se usa en las búsquedas.

[Source]

     # File app/models/video.rb, line 114
114:   def show_in_agencia
115:     false
116:   end
show_in_agencia?()

Alias for show_in_agencia

Indica si se muestra en OpenIrekia. Sólo se usa en las búsquedas.

[Source]

     # File app/models/video.rb, line 109
109:   def show_in_irekia
110:     true
111:   end
show_in_irekia?()

Alias for show_in_irekia

Indica si el video está traducido a lang

[Source]

    # File app/models/video.rb, line 77
77:   def translated_to?(lang)
78:     !videos[lang.to_sym].nil? || !videos[:common].nil?
79:   end

Devuelve el listado de videos disponible para este video. Puede haber varios, uno para cada idioma.

[Source]

    # File app/models/video.rb, line 59
59:   def videos
60:     videos = {}
61:     if video_path.present?
62:       videos_in_dir = Video.videos_in_dir(video_path)
63:       Video::LANGUAGES.each do |l|
64:         videos[l.to_sym] = "#{video_path}_#{l}.flv" if videos_in_dir.include?("#{Video::VIDEO_PATH}#{video_path}_#{l}.flv")
65:       end
66:     videos[:common] = "#{video_path}.flv" if videos_in_dir.include?("#{Video::VIDEO_PATH}#{video_path}.flv")
67:     end
68:     return videos
69:   end

Protected Instance methods

Asegura que sólo hay un video destacado. Se llama desde before_update

[Source]

     # File app/models/video.rb, line 186
186:     def check_only_one_featured
187:       Video.update_all("featured='f'") if featured && featured_changed?
188:     end

Obtiene la duración del video

[Source]

     # File app/models/video.rb, line 191
191:     def set_video_duration_and_display_format
192:       if self.duration.blank?
193:         logger.info "Obteniendo duracion de #{Video::VIDEO_PATH}#{self.featured_video}"
194:         self.duration = self.duration_from_file
195:       end
196:       
197:       if self.display_format.blank?
198:         logger.info "Obteniendo formato de #{Video::VIDEO_PATH}#{self.featured_video}"
199:         self.display_format = self.display_format_from_file        
200:       end
201:       
202:       return true
203:     end

[Validate]