diff options
Diffstat (limited to 'lib/paperclip')
-rw-r--r-- | lib/paperclip/audio_transcoder.rb | 6 | ||||
-rw-r--r-- | lib/paperclip/blurhash_transcoder.rb | 16 |
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/paperclip/audio_transcoder.rb b/lib/paperclip/audio_transcoder.rb index 631ccb0be..323ec7bfe 100644 --- a/lib/paperclip/audio_transcoder.rb +++ b/lib/paperclip/audio_transcoder.rb @@ -3,10 +3,12 @@ module Paperclip class AudioTranscoder < Paperclip::Processor def make + max_aud_len = (ENV['MAX_AUDIO_LENGTH'] || 60.0).to_f + meta = ::Av.cli.identify(@file.path) # {:length=>"0:00:02.14", :duration=>2.14, :audio_encode=>"mp3", :audio_bitrate=>"44100 Hz", :audio_channels=>"mono"} - if meta[:duration] > 60.0 - raise Mastodon::ValidationError, "Audio uploads must be less than 60 seconds in length." + if meta[:duration] > max_aud_len + raise Mastodon::ValidationError, "Audio uploads must be less than #{max_aud_len} seconds in length." end final_file = Paperclip::Transcoder.make(file, options, attachment) diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb new file mode 100644 index 000000000..08925a6dd --- /dev/null +++ b/lib/paperclip/blurhash_transcoder.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Paperclip + class BlurhashTranscoder < Paperclip::Processor + def make + return @file unless options[:style] == :small + + pixels = convert(':source RGB:-', source: File.expand_path(@file.path)).unpack('C*') + geometry = options.fetch(:file_geometry_parser).from_file(@file) + + attachment.instance.blurhash = Blurhash.encode(geometry.width, geometry.height, pixels, options[:blurhash] || {}) + + @file + end + end +end |