Add support for general-purpose file sharing.
parent
b53ddb8126
commit
1ca30982fa
|
@ -125,8 +125,7 @@ class MediaAttachment < ApplicationRecord
|
||||||
},
|
},
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
IMAGE_LIMIT = 8.megabytes
|
SIZE_LIMIT = 40.megabytes
|
||||||
VIDEO_LIMIT = 40.megabytes
|
|
||||||
GIF_LIMIT = ENV.fetch('MAX_GIF_SIZE', 200).to_i.kilobytes
|
GIF_LIMIT = ENV.fetch('MAX_GIF_SIZE', 200).to_i.kilobytes
|
||||||
|
|
||||||
belongs_to :account, inverse_of: :media_attachments, optional: true
|
belongs_to :account, inverse_of: :media_attachments, optional: true
|
||||||
|
@ -138,10 +137,9 @@ class MediaAttachment < ApplicationRecord
|
||||||
processors: ->(f) { file_processors f },
|
processors: ->(f) { file_processors f },
|
||||||
convert_options: { all: '-quality 90 -strip' }
|
convert_options: { all: '-quality 90 -strip' }
|
||||||
|
|
||||||
validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES
|
do_not_validate_attachment_file_type :file
|
||||||
validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :video_or_audio?
|
validates_attachment_size :file, less_than: SIZE_LIMIT
|
||||||
validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :video_or_audio?
|
remotable_attachment :file, SIZE_LIMIT
|
||||||
remotable_attachment :file, VIDEO_LIMIT
|
|
||||||
|
|
||||||
include Attachmentable
|
include Attachmentable
|
||||||
|
|
||||||
|
@ -167,6 +165,10 @@ class MediaAttachment < ApplicationRecord
|
||||||
video? || gifv? || audio?
|
video? || gifv? || audio?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def is_media?
|
||||||
|
file_content_type.in?(IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES)
|
||||||
|
end
|
||||||
|
|
||||||
def to_param
|
def to_param
|
||||||
shortcode
|
shortcode
|
||||||
end
|
end
|
||||||
|
@ -192,7 +194,9 @@ class MediaAttachment < ApplicationRecord
|
||||||
after_commit :reset_parent_cache, on: :update
|
after_commit :reset_parent_cache, on: :update
|
||||||
before_create :prepare_description, unless: :local?
|
before_create :prepare_description, unless: :local?
|
||||||
before_create :set_shortcode
|
before_create :set_shortcode
|
||||||
|
before_create :set_file_name, unless: :is_media?
|
||||||
before_post_process :set_type_and_extension
|
before_post_process :set_type_and_extension
|
||||||
|
before_post_process :is_media?
|
||||||
before_save :set_meta
|
before_save :set_meta
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
@ -225,8 +229,10 @@ class MediaAttachment < ApplicationRecord
|
||||||
small: VIDEO_STYLES[:small],
|
small: VIDEO_STYLES[:small],
|
||||||
original: VIDEO_FORMAT,
|
original: VIDEO_FORMAT,
|
||||||
}
|
}
|
||||||
else
|
elsif VIDEO_MIME_TYPES.include? f.instance.file_content_type
|
||||||
VIDEO_STYLES
|
VIDEO_STYLES
|
||||||
|
else
|
||||||
|
{original: {}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -241,7 +247,7 @@ class MediaAttachment < ApplicationRecord
|
||||||
[:video_transcoder, :blurhash_transcoder]
|
[:video_transcoder, :blurhash_transcoder]
|
||||||
elsif AUDIO_MIME_TYPES.include? f.file_content_type
|
elsif AUDIO_MIME_TYPES.include? f.file_content_type
|
||||||
[:audio_transcoder]
|
[:audio_transcoder]
|
||||||
else
|
elsif IMAGE_MIME_TYPES.include? f.file_content_type
|
||||||
[:lazy_thumbnail, :blurhash_transcoder]
|
[:lazy_thumbnail, :blurhash_transcoder]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -264,8 +270,21 @@ class MediaAttachment < ApplicationRecord
|
||||||
self.description = description.strip[0...666] unless description.nil?
|
self.description = description.strip[0...666] unless description.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_file_name
|
||||||
|
temp = file.queued_for_write[:original]
|
||||||
|
unless temp.nil?
|
||||||
|
orig = temp.original_filename
|
||||||
|
ext = File.extname(orig).downcase
|
||||||
|
name = File.basename(orig, '.*')
|
||||||
|
self.file.instance_write(:file_name, "#{name}#{ext}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def set_type_and_extension
|
def set_type_and_extension
|
||||||
self.type = VIDEO_MIME_TYPES.include?(file_content_type) ? :video : AUDIO_MIME_TYPES.include?(file_content_type) ? :audio : :image
|
self.type = VIDEO_MIME_TYPES.include?(file_content_type) ? :video :
|
||||||
|
AUDIO_MIME_TYPES.include?(file_content_type) ? :audio :
|
||||||
|
IMAGE_MIME_TYPES.include?(file_content_type) ? :image :
|
||||||
|
:unknown
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_meta
|
def set_meta
|
||||||
|
|
|
@ -77,7 +77,7 @@ class InitialStateSerializer < ActiveModel::Serializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def media_attachments
|
def media_attachments
|
||||||
{ accept_content_types: MediaAttachment::IMAGE_FILE_EXTENSIONS + MediaAttachment::VIDEO_FILE_EXTENSIONS + MediaAttachment::AUDIO_FILE_EXTENSIONS + MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES + MediaAttachment::AUDIO_MIME_TYPES }
|
{ accept_content_types: [] }
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
Loading…
Reference in New Issue