about summary refs log tree commit diff
path: root/lib/paperclip
diff options
context:
space:
mode:
Diffstat (limited to 'lib/paperclip')
-rw-r--r--lib/paperclip/audio_transcoder.rb6
-rw-r--r--lib/paperclip/blurhash_transcoder.rb16
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