From 986cca8c5c352b8ebe9e5a6ad577a91d3d0d2464 Mon Sep 17 00:00:00 2001 From: bohung Date: Sun, 21 Aug 2022 16:43:10 +0800 Subject: [PATCH] Fix bug. --- app/controllers/ad_banners_controller.rb | 4 +-- app/models/ad_image.rb | 40 +++++++++++++++++---- app/views/admin/ad_banners/show.html.erb | 2 +- app/views/admin/ad_images/_jplayer.html.erb | 18 +++++----- config/routes.rb | 19 ++++++---- 5 files changed, 60 insertions(+), 23 deletions(-) diff --git a/app/controllers/ad_banners_controller.rb b/app/controllers/ad_banners_controller.rb index d83b36c..6a6348b 100644 --- a/app/controllers/ad_banners_controller.rb +++ b/app/controllers/ad_banners_controller.rb @@ -151,8 +151,8 @@ class AdBannersController < ApplicationController extra_before_html = "" extra_after_html = "" if has_jplayer - extra_before_html = ActionController::Base.helpers.stylesheet_link_tag("banner/jplayer.blue.monday.min.css") - extra_after_html = ActionController::Base.helpers.javascript_include_tag("banner/jquery.jplayer.min.js") + extra_before_html = "\n" + ActionController::Base.helpers.stylesheet_link_tag("banner/jplayer.blue.monday.min.css") + "\n" + + ActionController::Base.helpers.javascript_include_tag("banner/jquery.jplayer.min.js") + "\n" end base_image = adbanner.base_image.nil? ? 1 : adbanner.base_image adbanner_title_escape = adbanner.title.to_s.gsub('"','"') diff --git a/app/models/ad_image.rb b/app/models/ad_image.rb index a7c73fa..7662d33 100644 --- a/app/models/ad_image.rb +++ b/app/models/ad_image.rb @@ -8,7 +8,7 @@ class AdImage mount_uploader :video_snapshot, BannerImageUploader mount_uploader :video_file, BannerUploader mount_uploader :video_file_webm, BannerUploader - + field :default_video_snapshot, type: Boolean, default: false field :auto_convert_video, type: Boolean, default: false field :title, type: String, localize: true field :context, type: String, localize: true @@ -33,14 +33,39 @@ class AdImage scope :can_display, ->{self.and(AdImage.unscoped.or({:postdate.lte=>Time.now},{:postdate=>nil}).selector,AdImage.unscoped.or({:deadline.gte=>Time.now},{:deadline=>nil}).selector)} scope :is_expired, ->{self.and(AdImage.unscoped.or({:deadline.lte=>Time.now}).selector)} scope :not_expired, ->{self.and(AdImage.unscoped.or({:deadline.gte=>Time.now},{:deadline=>nil}).selector)} - - after_save do - if (self.video_file_changed? || self.auto_convert_video_changed?) && self.auto_convert_video - Thread.new do - self.generate_webm + before_save do + unless @skip_callback + if self.video_snapshot_changed? + self.default_video_snapshot = false end end end + after_save do + unless @skip_callback + if (self.video_file_changed? || self.auto_convert_video_changed?) && self.auto_convert_video + Thread.new do + self.generate_webm + end + end + if self.video_file? && self.video_file_changed? && (!(self.video_snapshot?) || self.default_video_snapshot) + Thread.new do + self.generate_video_snapshot + end + end + end + end + def generate_video_snapshot + if self.video_file? + self.default_video_snapshot = true + self[:video_snapshot] = File.basename(self.video_file.file.path).split(/\.[^.]+$/)[0] + ".jpg" + FileUtils.mkdir_p(File.dirname(self.video_snapshot.file.path)) + system("tmp/ffmpeg/ffmpeg -i #{self.video_file.file.path} -vframes 1 #{self.video_snapshot.file.path}") + @skip_callback = true + self.save + @skip_callback = false + true + end + end def generate_webm video_path = self.video_file.path rescue nil if !video_path.blank? @@ -49,7 +74,10 @@ class AdImage flag = system("tmp/ffmpeg/ffmpeg -i #{video_path} -c:v libvpx-vp9 -crf 35 -b:v 0 -b:a 96k -c:a libopus -filter:v fps=20 #{video_webm} -cpu-used #{core_num}") if flag self.video_file_webm = File.open(video_webm) + @skip_callback = true self.save + @skip_callback = false + true else puts "generate webm failed" end diff --git a/app/views/admin/ad_banners/show.html.erb b/app/views/admin/ad_banners/show.html.erb index a68a0f5..bcb5055 100644 --- a/app/views/admin/ad_banners/show.html.erb +++ b/app/views/admin/ad_banners/show.html.erb @@ -66,7 +66,7 @@ <% end %> - <%= image.title rescue "" %> + <%= image.title.to_s.html_safe rescue "" %> <% if can_edit_or_delete?(@banner) %>