uploads: factor out image dimension and filetype detection code.

* Add MediaFile abstraction. A MediaFile represents an image or video file.
* Move filetype detection and dimension parsing code from uploads to MediaFile.
This commit is contained in:
evazion
2020-05-06 00:33:35 -05:00
parent eab413199c
commit e477232e02
10 changed files with 215 additions and 154 deletions

View File

@@ -0,0 +1,6 @@
class MediaFile::Flash < MediaFile::Image
def dimensions
image_size = ImageSpec.new(file.path)
[image_size.width, image_size.height]
end
end

View File

@@ -0,0 +1,6 @@
class MediaFile::Image < MediaFile
def dimensions
image_size = ImageSpec.new(file.path)
[image_size.width, image_size.height]
end
end

View File

@@ -0,0 +1,13 @@
class MediaFile::Ugoira < MediaFile
def dimensions
tempfile = Tempfile.new
folder = Zip::File.new(file.path)
folder.first.extract(tempfile.path) { true }
image_file = MediaFile.open(tempfile)
image_file.dimensions
ensure
image_file.close
tempfile.close!
end
end

View File

@@ -0,0 +1,9 @@
class MediaFile::Video < MediaFile
def dimensions
[video.width, video.height]
end
def video
@video ||= FFMPEG::Movie.new(file.path)
end
end