| 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
| info_from_file | [RW] |
# 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
Método que se usa en el bloque compartir.
# File app/models/video.rb, line 131
131: def body
132: self.title
133: end
Devuelve los canales a los que pertenece el video.
# 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
# File app/models/video.rb, line 176
176: def display_format_from_file
177: info_from_file[:display_format]
178: end
# File app/models/video.rb, line 180
180: def duration_from_file
181: info_from_file[:duration]
182: end
Determina si este video tiene imagen para preview
# File app/models/video.rb, line 102
102: def has_cover_photo?
103: File.exists?("#{Video::VIDEO_PATH}{video_path}.jpg")
104: end
# 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
# 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.
# File app/models/video.rb, line 114
114: def show_in_agencia
115: false
116: end
Indica si se muestra en OpenIrekia. Sólo se usa en las búsquedas.
# File app/models/video.rb, line 109
109: def show_in_irekia
110: true
111: end
Indica si el video está traducido a lang
# 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.
# 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
Asegura que sólo hay un video destacado. Se llama desde before_update
# 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
# 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