uploads: clean up process_upload.

* Remove `initialize_status` (status already defaults to pending in database)
* Remove `has_dimensions?` (always returns true)
* Remove `async_conversion?` (dead code)
* Remove `validate_file_exists` (unneeded checks)
* Simplify `calculate_dimensions`
* Merge `file_header_to_content_type` with `content_type_to_file_ext` (content type isn't used elsewhere)
This commit is contained in:
evazion
2018-03-18 01:59:26 -05:00
parent b0c7d9c185
commit 2286ccfca8

View File

@@ -10,7 +10,6 @@ class Upload < ApplicationRecord
belongs_to :uploader, :class_name => "User"
belongs_to :post
before_validation :initialize_uploader, :on => :create
before_validation :initialize_status, :on => :create
before_create :convert_cgi_file
after_destroy :delete_temp_file
validate :uploader_is_not_limited, :on => :create
@@ -53,12 +52,6 @@ class Upload < ApplicationRecord
end
end
def validate_file_exists
unless file_path && File.exists?(file_path)
raise "file does not exist"
end
end
def validate_file_content_type
unless is_valid_content_type?
raise "invalid content type (only JPEG, PNG, GIF, SWF, MP4, and WebM files are allowed)"
@@ -75,12 +68,6 @@ class Upload < ApplicationRecord
end
end
def validate_md5_confirmation_after_move
if !md5_confirmation.blank? && md5_confirmation != Digest::MD5.file(md5_file_path).hexdigest
raise "md5 mismatch"
end
end
def rating_given
if rating.present?
return true
@@ -112,13 +99,12 @@ class Upload < ApplicationRecord
def process_upload
CurrentUser.scoped(uploader, uploader_ip_addr) do
update_attribute(:status, "processing")
self.source = strip_source
self.source = source.to_s.strip
if is_downloadable?
self.downloaded_source, self.source = download_from_source(temp_file_path)
end
validate_file_exists
self.content_type = file_header_to_content_type(file_path)
self.file_ext = content_type_to_file_ext(content_type)
self.file_ext = file_header_to_file_ext(file_path)
validate_file_content_type
calculate_hash(file_path)
validate_md5_uniqueness
@@ -126,12 +112,9 @@ class Upload < ApplicationRecord
tag_audio
validate_video_duration
calculate_file_size(file_path)
if has_dimensions?
calculate_dimensions(file_path)
end
self.image_width, self.image_height = calculate_dimensions
generate_resizes(file_path)
move_file
validate_md5_confirmation_after_move
save
end
end
@@ -175,10 +158,6 @@ class Upload < ApplicationRecord
delete_temp_file
end
def async_conversion?
is_ugoira?
end
def ugoira_service
@ugoira_service ||= PixivUgoiraService.new
end
@@ -288,27 +267,17 @@ class Upload < ApplicationRecord
module DimensionMethods
# Figures out the dimensions of the image.
def calculate_dimensions(file_path)
def calculate_dimensions
if is_video?
self.image_width = video.width
self.image_height = video.height
[video.width, video.height]
elsif is_ugoira?
ugoira_service.calculate_dimensions(file_path)
self.image_width = ugoira_service.width
self.image_height = ugoira_service.height
[ugoira_service.width, ugoira_service.height]
else
File.open(file_path, "rb") do |file|
image_size = ImageSpec.new(file)
self.image_width = image_size.width
self.image_height = image_size.height
end
image_size = ImageSpec.new(file_path)
[image_size.width, image_size.height]
end
end
# Does this file have image dimensions?
def has_dimensions?
%w(jpg gif png swf webm mp4 zip).include?(file_ext)
end
end
module ContentTypeMethods
@@ -316,61 +285,26 @@ class Upload < ApplicationRecord
file_ext =~ /jpg|gif|png|swf|webm|mp4|zip/
end
def content_type_to_file_ext(content_type)
case content_type
when "image/jpeg"
def file_header_to_file_ext(file_path)
case File.read(file_path, 16)
when /^\xff\xd8/n
"jpg"
when "image/gif"
when /^GIF87a/, /^GIF89a/
"gif"
when "image/png"
when /^\x89PNG\r\n\x1a\n/n
"png"
when "application/x-shockwave-flash"
when /^CWS/, /^FWS/, /^ZWS/
"swf"
when "video/webm"
when /^\x1a\x45\xdf\xa3/n
"webm"
when "video/mp4"
when /^....ftyp(?:isom|3gp5|mp42|MSNV|avc1)/
"mp4"
when "application/zip"
when /^PK\x03\x04/
"zip"
else
"bin"
end
end
def file_header_to_content_type(source_path)
case File.read(source_path, 16)
when /^\xff\xd8/n
"image/jpeg"
when /^GIF87a/, /^GIF89a/
"image/gif"
when /^\x89PNG\r\n\x1a\n/n
"image/png"
when /^CWS/, /^FWS/, /^ZWS/
"application/x-shockwave-flash"
when /^\x1a\x45\xdf\xa3/n
"video/webm"
when /^....ftyp(?:isom|3gp5|mp42|MSNV|avc1)/
"video/mp4"
when /^PK\x03\x04/
"application/zip"
else
"application/octet-stream"
end
end
end
module FilePathMethods
@@ -405,10 +339,6 @@ class Upload < ApplicationRecord
end
module DownloaderMethods
def strip_source
source.to_s.strip
end
# Determines whether the source is downloadable
def is_downloadable?
source =~ /^https?:\/\// && file_path.blank?
@@ -442,10 +372,6 @@ class Upload < ApplicationRecord
end
module StatusMethods
def initialize_status
self.status = "pending"
end
def is_pending?
status == "pending"
end